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-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, обычно, это работает так:
Кто-то (инженер/программист) создал само-обучающуюся систему.
Что позволило этой самообучающейся системе обучиться.

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