![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Думаю, надо вынести из комментов. Всем будет интересно, не только
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.
А теперь, собственно, к теме разговора. Откуда берётся четырёхмерная матрица? Операция свёртки математически представляет собой скалярное умножение небольшой области входного изображения на другую матрицу. Её ещё называют ядром, или фильтром. И так для каждого выходного пиксела:
Каждый пиксел это одномерный вектор признаков (или каналов). Чтобы их трёхмерного входного изображения получить одномерный вектор, нужно скалярно умножить на четырёхмерное ядро. Всё довольно однозначно.
Напомню, что скалярное произведение это сумма попарных произведений компонентов. Что для матрицы, что для вектора - одинаково. Этому тоже в школе не учат.
В статье по ссылке, что я давал, это тоже всё объясняется, хотя и требует внимания:
В их примере входное изображение имеет размер 100x100x3, а ядро - 3x3x3x6. Четырёхмерное, естественно.
![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)

С этой моделью связывали большие надежды в 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. Четырёхмерное, естественно.
no subject
Date: 2023-03-10 10:39 (UTC)no subject
Date: 2023-03-10 12:47 (UTC)Логично. А их не тензорами разве называют? Ну если размерность больше двух, то и.
no subject
Date: 2023-03-10 18:06 (UTC)no subject
Date: 2023-03-10 19:32 (UTC)Ну, у нас на матмехе у механиков были тензоры, а вот у математиков с тензорами была полная фигня (хотя и проходили их по геометрии). Ну т.е. чисто алгебраических их определить (через тензорное произведение) можно, но фигня получается.
no subject
Date: 2023-03-10 21:23 (UTC)Там ещё есть разница между ковариантными и контравариантными тензорами, но это уже совсем глубокая пурга.
no subject
Date: 2023-03-10 22:58 (UTC)Оно же по одним размерностям ковариантное, по другим контравариантное. Да, на матмехе у нас народ тоже тупил. Теория категорий тогда ширнармассам не была известна.
no subject
Date: 2023-03-10 23:26 (UTC)no subject
Date: 2023-03-10 23:43 (UTC)Категорные вполне помогают.
Да блин, я сейчас вспоминаю свой диплом... в категорной постановке там два сопряженных функтора надо было построить. Но мой проф, хоть и изучал в Сорбонне теорию категорий (и нас учил), а отплевывался от "абстрактной чепухи". Ну и вот. Все руками.
no subject
Date: 2023-03-10 20:41 (UTC)no subject
Date: 2023-03-10 19:32 (UTC)И однажды мне захотелось сделать четырехмерный муд (спойлер: я его не сделал). То есть массив комнат теперь будет не 3, а 4 мерным и координаты комнаты будут задваться 4 координатами. Помнится, Шелдон и Леонард в сериале "Теория Большого взрыва" играли в четырехмерные шахматы.
А потом я обдумывал муд по миру "Девяти принцев Амбера" Желязны и для того, чтобы смоделировать перемещение по Отражениям в зависимости от сложности модели требовалось бы от 4 до 6 измерений.
На самом же деле амбериты рассматривали мир как очень длинный n-мерный вектор и путешествовали по измерениям, меняя отдельные координаты. Гм, мы так же делаем в реальном мире, меняя 3 пространственных координаты. И также, как мы не можем прыгнуть с (1,1,1) на (1,1,10000), амберит не может прыгнуть со значительным изменением параметров, они менялись постепенно. В книге это очень художественно описано.
no subject
Date: 2023-03-10 20:41 (UTC)no subject
Date: 2023-03-10 21:18 (UTC)no subject
Date: 2023-03-10 21:33 (UTC)И, я так понял, у них сначала 1х1х64, потом 3х3х64, потом 1х1х256 - и так три раза?
no subject
Date: 2023-03-10 21:40 (UTC)no subject
Date: 2023-03-11 01:29 (UTC)Какой смысл выдавать вектор в формате 3D матрицы?
no subject
Date: 2023-03-11 22:44 (UTC)no subject
Date: 2023-03-12 02:07 (UTC)no subject
Date: 2023-03-13 22:13 (UTC)no subject
Date: 2023-03-14 02:41 (UTC)Одно из важнейших соображений в программировании является уменьшение сложности системы.
Определение выходного интерфейса в виде трёхмерной матрицы, когда можно обойтись вектором - усложняет систему без необходимости.
> Достаточно в неё заглянуть, и станет понятно, выдаётся матрица или вектор.
Если посмотреть на исходный код, в котором выходной интерфейс определяется как трехмерная матрица -- догадаться, что на выходе вектор - совсем непросто.
no subject
Date: 2023-03-14 02:57 (UTC)no subject
Date: 2023-03-14 03:07 (UTC)Зачем в декларировать выход в виде 3D-матрицы, если можно обойтись вектором?
Избыточность во внутренних слоях
Date: 2023-03-11 01:34 (UTC)Первый слой: 224*224*3 = 150528 комбинаций
Второй слой: 112*112*64 = 802816 комбинаций
Получается, что количество комбинаций второго слоя - в пять раз больше, чем у входного изображения?
Эта пятикратная избыточность специально создается?
no subject
Date: 2023-03-11 22:29 (UTC)no subject
Date: 2023-03-12 02:09 (UTC)А степень избыточности как выбиралась? Путем экспериментов с разной степенью избыточности и наблюдения за результатами?
no subject
Date: 2023-03-12 03:40 (UTC)no subject
Date: 2023-03-12 14:05 (UTC)no subject
Date: 2023-03-13 22:18 (UTC)Проще всего через книжки, написанные такими людьми. Мне больше всего помогли эти две:
https://www.amazon.com/Learning-Python-Second-Fran%C3%A7ois-Chollet/dp/1617296864/
https://www.amazon.com/Deep-Learning-Game-Kevin-Ferguson-ebook/dp/B097821929
no subject
Date: 2023-03-14 02:37 (UTC)no subject
Date: 2023-03-11 02:48 (UTC)> Её ещё называют ядром
Что называют "ядром"? Небольшую область входного изображения?
Или "другую матрицу"?
Или "скалярное умножение"?
> Чтобы их трёхмерного входного изображения получить одномерный вектор, нужно скалярно умножить на четырёхмерное ядро.
Почему ядро - четырёхмерное?
no subject
Date: 2023-03-11 22:24 (UTC)https://ru.wikipedia.org/wiki/%D0%AF%D0%B4%D1%80%D0%BE_%D1%81%D0%B2%D0%B5%D1%80%D1%82%D0%BA%D0%B8
В случае нейронных сетей ядро имеет четыре измерения: высота, ширина, входные каналы, выходные каналы.
Четырёхмерное ядро?
Date: 2023-03-12 14:32 (UTC)Если ядро свертки - это операция, то ядро свертки не несет в себе обрабатываемые данные, верно?
То есть у ядра свертки нет размерности -- оно не может быть ни 4D ни 3D ни 2D ни 1D (вектором) ни, даже 0D (просто скалярным числом).
Какой смысл тогда в утверждении "четырёхмерное ядро"?
Re: Четырёхмерное ядро?
Date: 2023-03-13 22:24 (UTC)У операции свёртки A*B тоже два операнда. Второй операнд B и называется ядром свёртки. Это матрица соответствующей размерности.
Re: Четырёхмерное ядро?
Date: 2023-03-14 02:27 (UTC)"Второй операнд" - это часть первого операнда, выделенная по определенному алгоритму, верно?
Тогда какой смысл рассматривать "Второй операнд" как независимую матрицу?
no subject
Date: 2023-03-14 02:47 (UTC)На жаргоне это называется веса, или weights.
no subject
Date: 2023-03-14 03:11 (UTC)То есть второй операнд свертки - тоже самообучаемый, как и остальные части нейронной сети?
> веса, или weights.
Веса чего?
Того, как каждый пиксель из сворачиваемой группы - трансформируется в сигнал на следующем шаге?
no subject
Date: 2023-03-14 03:20 (UTC)"тоже самообучаемый" - в нейронной сети нет ничего _само_обучаемого. Её кто-то обучил.
no subject
Date: 2023-03-14 03:40 (UTC)Базовое понимание чего именно?
Как работают Neural Networks специализирующиеся на image recognition?
> А то от моих ответов никакой пользы.
Это не так.
> "тоже самообучаемый" - в нейронной сети нет ничего _само_обучаемого. Её кто-то обучил.
В machine learning, обычно, это работает так:
Кто-то (инженер/программист) создал само-обучающуюся систему.
Что позволило этой самообучающейся системе обучиться.
Или вы имеете ввиду какое-то другое обучение?
no subject
Date: 2023-03-14 04:21 (UTC)