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)
juan_gandhi: (Default)
From: [personal profile] juan_gandhi

Ну, у нас на матмехе у механиков были тензоры, а вот у математиков с тензорами была полная фигня (хотя и проходили их по геометрии). Ну т.е. чисто алгебраических их определить (через тензорное произведение) можно, но фигня получается.

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

Оно же по одним размерностям ковариантное, по другим контравариантное. Да, на матмехе у нас народ тоже тупил. Теория категорий тогда ширнармассам не была известна.

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

Категорные вполне помогают.

Да блин, я сейчас вспоминаю свой диплом... в категорной постановке там два сопряженных функтора надо было построить. Но мой проф, хоть и изучал в Сорбонне теорию категорий (и нас учил), а отплевывался от "абстрактной чепухи". Ну и вот. Все руками.

Date: 2023-03-10 20:41 (UTC)
skittishfox: (Default)
From: [personal profile] skittishfox
Не знаю, как-то всегда cube и hypercube использовал.

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-10 21:33 (UTC)
skittishfox: (Default)
From: [personal profile] skittishfox
Stride 2 перед первой 1x1 Conv 64 или после последней 1x1 Conv 256?

И, я так понял, у них сначала 1х1х64, потом 3х3х64, потом 1х1х256 - и так три раза?

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

Какой смысл выдавать вектор в формате 3D матрицы?

Date: 2023-03-12 02:07 (UTC)
dennisgorelik: 2020-06-13 in my home office (Default)
From: [personal profile] dennisgorelik
Так выдается 3D матрица [1x1xN] или вектор [N]?

Date: 2023-03-14 02:41 (UTC)
dennisgorelik: 2020-06-13 in my home office (Default)
From: [personal profile] dennisgorelik
> чем вызван такой странный вопрос

Одно из важнейших соображений в программировании является уменьшение сложности системы.
Определение выходного интерфейса в виде трёхмерной матрицы, когда можно обойтись вектором - усложняет систему без необходимости.

> Достаточно в неё заглянуть, и станет понятно, выдаётся матрица или вектор.

Если посмотреть на исходный код, в котором выходной интерфейс определяется как трехмерная матрица -- догадаться, что на выходе вектор - совсем непросто.

Date: 2023-03-14 03:07 (UTC)
dennisgorelik: 2020-06-13 in my home office (Default)
From: [personal profile] dennisgorelik
Так к математике принцип упрощения тоже применим.
Зачем в декларировать выход в виде 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-12 02:09 (UTC)
dennisgorelik: 2020-06-13 in my home office (Default)
From: [personal profile] dennisgorelik
> в этом избыточном пространстве происходят чудеса

А степень избыточности как выбиралась? Путем экспериментов с разной степенью избыточности и наблюдения за результатами?

Date: 2023-03-12 14:05 (UTC)
dennisgorelik: 2020-06-13 in my home office (Default)
From: [personal profile] dennisgorelik
Где находится правильное место и кто правильные люди для обсуждения вопросов оптимизации Neural Network architecture?

Date: 2023-03-14 02:37 (UTC)
dennisgorelik: 2020-06-13 in my home office (Default)
From: [personal profile] dennisgorelik
Спасибо. Я познакомлюсь с этими авторами.

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

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

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

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

Четырёхмерное ядро?

Date: 2023-03-12 14:32 (UTC)
dennisgorelik: 2020-06-13 in my home office (Default)
From: [personal profile] dennisgorelik
> Ядром называют второй операнд свёртки.

Если ядро свертки - это операция, то ядро свертки не несет в себе обрабатываемые данные, верно?
То есть у ядра свертки нет размерности -- оно не может быть ни 4D ни 3D ни 2D ни 1D (вектором) ни, даже 0D (просто скалярным числом).

Какой смысл тогда в утверждении "четырёхмерное ядро"?

Re: Четырёхмерное ядро?

Date: 2023-03-14 02:27 (UTC)
dennisgorelik: 2020-06-13 in my home office (Default)
From: [personal profile] dennisgorelik
> Второй операнд B и называется ядром свёртки. Это матрица соответствующей размерности.

"Второй операнд" - это часть первого операнда, выделенная по определенному алгоритму, верно?

Тогда какой смысл рассматривать "Второй операнд" как независимую матрицу?

Date: 2023-03-14 03:11 (UTC)
dennisgorelik: 2020-06-13 in my home office (Default)
From: [personal profile] dennisgorelik
> второй операнд - часть нейронной сети, натренированной на выполнение определённой задачи.

То есть второй операнд свертки - тоже самообучаемый, как и остальные части нейронной сети?

> веса, или weights.

Веса чего?
Того, как каждый пиксель из сворачиваемой группы - трансформируется в сигнал на следующем шаге?

Date: 2023-03-14 03:40 (UTC)
dennisgorelik: 2020-06-13 in my home office (Default)
From: [personal profile] dennisgorelik
> Почитайте книжки для начала, чтобы у вас базовое понимание образовалось.

Базовое понимание чего именно?
Как работают Neural Networks специализирующиеся на image recognition?

> А то от моих ответов никакой пользы.

Это не так.

> "тоже самообучаемый" - в нейронной сети нет ничего _само_обучаемого. Её кто-то обучил.

В machine learning, обычно, это работает так:
Кто-то (инженер/программист) создал само-обучающуюся систему.
Что позволило этой самообучающейся системе обучиться.

Или вы имеете ввиду какое-то другое обучение?