2023-03-09

vak: (Default)
Думаю, надо вынести из комментов. Всем будет интересно, не только [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. Четырёхмерное, естественно.