vak: (Default)
[personal profile] vak
Думаю, надо вынести из комментов. Всем будет интересно, не только [personal profile] dennisgorelik. Он задал вопрос "зачем нужна четырёхмерная матрица в нейронных сетях". Вопрос вполне законный между прочим. Это действительно неочевидно. Вообще то, что изобрёл Ян Лекун, неочевидно. За свёрточными нейронными сетями стоит красивая математика, но народ её так пока и не осознал. Обычно вспоминают только перцептрон Розенблатта с искусственными нейронами:



С этой моделью связывали большие надежды в 50-е годы, но они не оправдались. Свёрточные сети устроены на другом принципе.

Свёрточные сети тоже состоят из слоёв, но в отличие от перцептрона, этих слоёв много. К примеру, в часто упоминаемой сетке Resnet50 имеется 22 слоя. На входе каждый слой принимает "изображение", представляющее собой трёхмерную матрицу. Первые два измерения обычно имеют геометрическую семантику: реальную высоту и ширину картинки. Смысл третьего измерения обычно не связан с геометрией. На входе сети это компоненты цвета (красный, синий, зелёный), а во внутренних слоях их называют признаками (features по английски). Чаще всего третье измерение обозначают обобщённым термином channels (каналы). Может быть эта картинка поможет представить.



В зависимости от задачи, смысл трёхмерных матриц и их измерений может быть и негеометрической, скажем при разпознавании звука или текста. Обобщённо эти матрицы принято называть Feature Maps, или FM. Ещё различают Input Feature Maps на входе слоя, и Output Feature Maps на выходе, соответственно IFM и OFM. Математически это просто трёхмерные матрицы.

Простой рисунок для наглядности: промежуточные "изображения" между двумя слоями сетки Resnet50.



Упрощённое представление всех слоёв сетки Resnet50. Эта сеть принимает на входе цветное изображение размером 224x224x3 и распознаёт, что находится на снимке, из тысячи различных категорий. На выходе выдаёт матрицу размером 1x1x1000, вектор фактически. Каждый элемент вектора означает степень "похожести" для данной категории.

Вот упрощённое изображение всех слоёв сетки Resnet50:



Количество каналов в Feature Maps обычно увеличивается с глубиной слоя. Уже первый слой Resnet50 превращает изображение 224x224x3 в 112x112x64, то есть уже 64 канала. Дальше их будет 128, 256, и под конец 512.

А теперь, собственно, к теме разговора. Откуда берётся четырёхмерная матрица? Операция свёртки математически представляет собой скалярное умножение небольшой области входного изображения на другую матрицу. Её ещё называют ядром, или фильтром. И так для каждого выходного пиксела:
выходной пиксел := скалярное умножение(фрагмент входного изображения, ядро)

Каждый пиксел это одномерный вектор признаков (или каналов). Чтобы их трёхмерного входного изображения получить одномерный вектор, нужно скалярно умножить на четырёхмерное ядро. Всё довольно однозначно.

Напомню, что скалярное произведение это сумма попарных произведений компонентов. Что для матрицы, что для вектора - одинаково. Этому тоже в школе не учат.

В статье по ссылке, что я давал, это тоже всё объясняется, хотя и требует внимания:
свёрточный слой использует фильтры c ядром 3×3 пикселя с выходом на 6 каналов, тогда в процессе обучения определяется только 9 весов ядра, однако по всем сочетаниям каналов, то есть 9×3×6=162

В их примере входное изображение имеет размер 100x100x3, а ядро - 3x3x3x6. Четырёхмерное, естественно.

Date: 2023-03-10 10:39 (UTC)
tiresome_cat: (AgreedCat)
From: [personal profile] tiresome_cat
Интересно. Спасибо за науку.

Date: 2023-03-10 12:47 (UTC)
juan_gandhi: (Default)
From: [personal profile] juan_gandhi

Логично. А их не тензорами разве называют? Ну если размерность больше двух, то и.

Date: 2023-03-10 19:32 (UTC)
prool: cat (Default)
From: [personal profile] prool
Я вот делаю свой MUD. Пространство в мудах терхмерно и обычно евклидово. Перемещение по координатам происходит в метафоре географической карты north, south, west, east, down, up.

И однажды мне захотелось сделать четырехмерный муд (спойлер: я его не сделал). То есть массив комнат теперь будет не 3, а 4 мерным и координаты комнаты будут задваться 4 координатами. Помнится, Шелдон и Леонард в сериале "Теория Большого взрыва" играли в четырехмерные шахматы.

А потом я обдумывал муд по миру "Девяти принцев Амбера" Желязны и для того, чтобы смоделировать перемещение по Отражениям в зависимости от сложности модели требовалось бы от 4 до 6 измерений.

На самом же деле амбериты рассматривали мир как очень длинный n-мерный вектор и путешествовали по измерениям, меняя отдельные координаты. Гм, мы так же делаем в реальном мире, меняя 3 пространственных координаты. И также, как мы не можем прыгнуть с (1,1,1) на (1,1,10000), амберит не может прыгнуть со значительным изменением параметров, они менялись постепенно. В книге это очень художественно описано.

Date: 2023-03-10 20:41 (UTC)
skittishfox: (Default)
From: [personal profile] skittishfox
Во всей єтой картинке не очень понятно, как размер матрицьі уменьшается с 56 до 28. Если со stride 2 я могу єто себе представить, то что происходит при трехкратном конволюционировании мне непонятно.

Date: 2023-03-11 01:29 (UTC)
dennisgorelik: 2020-06-13 in my home office (Default)
From: [personal profile] dennisgorelik
> На выходе выдаёт матрицу размером 1x1x1000, вектор фактически.

Какой смысл выдавать вектор в формате 3D матрицы?
dennisgorelik: 2020-06-13 in my home office (Default)
From: [personal profile] dennisgorelik
> Уже первый слой Resnet50 превращает изображение 224x224x3 в 112x112x64

Первый слой: 224*224*3 = 150528 комбинаций
Второй слой: 112*112*64 = 802816 комбинаций

Получается, что количество комбинаций второго слоя - в пять раз больше, чем у входного изображения?
Эта пятикратная избыточность специально создается?

Date: 2023-03-11 02:48 (UTC)
dennisgorelik: 2020-06-13 in my home office (Default)
From: [personal profile] dennisgorelik
> Откуда берётся четырёхмерная матрица? Операция свёртки математически представляет собой скалярное умножение небольшой области входного изображения на другую матрицу.
> Её ещё называют ядром

Что называют "ядром"? Небольшую область входного изображения?
Или "другую матрицу"?
Или "скалярное умножение"?

> Чтобы их трёхмерного входного изображения получить одномерный вектор, нужно скалярно умножить на четырёхмерное ядро.

Почему ядро - четырёхмерное?