LINUX.ORG.RU

CNN-нейросеть: как работает forward feed? Поясните терминологию.

 


1

1

Хочется понять физический смысл того, что физически пошагово происходит, когда обученная CNN-нейросеть обрабатывает входные данные. Опишу своё понимание, просьба не что-то заново объяснять, а указать на неточности и на отдалённость моего описания от истины. Попутно будут вопросы (выделены жырным).

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

Вот нарисовал картинку: http://savepic.ru/15045931.png

Вход - 9 нейронов x1...x9, которые не нейроны, а скорее «сенсоры», хотя почему-то везде называются «нейроны входного слоя». Нейрон - это то, что делает какую-то операцию со входами, а тут на X1...x9 входов нет, они сами уже чисто «выход», выдают прямо значения пикселей картинки, значит это скорее как сенсоры в глазу, а не нейроны. x1...x9 — сенсоры. Меня сильно смущает понятие нейрона, я всегда начинаю думать - «суммирование каких взвешенных входов делают эти нейроны? Никаких? Почему это тогда нейроны?». Короче, сенсоры. Далее.

Наша входная обрабатываемая картинка пускай будет 32*32, канал - 1 (ч/б).

9 сенсоров смотрят на фрагмент 3*3 входной картинки, нейрон X10 таким образом выполняет свёртку и математически совокупность весов w1...w9 являются ядром свёртки, верно? Потому нейросеть называется свёрточной. В русской википедии про CNN-нейросети тынц совокупность весов w1...w9 называется матрица весов.

Сенсоры x1-x9 «подключены» к входной кратинке именно так: в единицу времени смотрят на её окрестность: значение каждого пикселя умножается на соответствующий W, получаем SUM(x * w). В англоязычных статьях-видосах эта операция называется Dot Product https://en.wikipedia.org/wiki/Dot_product или скаярное произведение по-нашему. Это и есть свёртка? Выход этой операции (свёртки): скаляр (число). Мы «свернули» 9 пикселей в один. Кстати, свёрткой могут называть как одну операцию над 9 пикселями так и целую результирующую картинку, состоящую из множества результатов свёртки над каждыми 9-пиксельными регионами, когда мы пробежим этим 9-пиксельным окном по всему входному изображению (читать далее).

У меня на картинке показан только 1 нейрон «скрытого слоя» - X10.

В куче статей и видосов сказано, что нейрончик X10 (который ядро свёртки) называется filter. почему такой термин? Почему не ядро свёртки?

Итак, физически происходит следующее (насколько это верно?): мы пробегаем нашим ядром свёртки (окном 3*3 - можно 5*5, тогда входных сенсоров будет 25) по входной картинке с шагом, например 1 (настраивается): то есть ставим наше «окно захвата» - «окно свёртки» 3*3 на все возможные позиции на картинке и снимаем для каждой такой позиции значение на выходе X10, рисуя для каждой отдельной позиции окна (3*3) пиксель на выходнуй картинке. У меня показано как стрелка из X10 тычет (записывает) пиксель выходной картинки для данного 3*3 окна. Смещая наше входное окно 3*3 на 1 пиксель вправо, получаем значение следующего справа пикселя выходной картинки. Вот GIF из википедии: https://upload.wikimedia.org/wikipedia/commons/thumb/4/4f/3D_Convolution_Anim...

Эта вторая картинка называется feature map?

Нейрон X10 (с его весами входов w1...w9), т.е. filter, т.е. ядро свёртки, бегающее по входной картинке, можно интерпретировать как «признак». Т.е. совокупность весов w1...w9 как-бы кодирует некую графическую микро-фичу, признак. Например кодирует маленькую наклонную линию (веса w1...w9 будут по какой-то диагонали большими, остальное будет 0, например). Выходная картинка (картинка, куда пишет X10) - это будет как «карта признаков», т.е. на какой позиции входной картинки этот признак (наклонная линия) встретился (результат свёртки будет иметь высокое значение выше нуля) или не встретился (ноль или ниже). Т.е. мы на выходе получаем такую карту, которая показывает где (в каком квадрате 3*3) эта наклонная линия есть на входном изображении.

И это всё только с 1 нейроном входного слоя X10. Одно-нейронный слой (такое вы видите впервые только на нашей картинке!), а уже сколько важного.

Эта недо-нейросеть уже имеет смысл: например если X10 кодировал наклонную линию «от нихнего левого до верхнего правого» (знак слеш) (т.е. маленькую фичу, которая вписывается в 3*3), то если мы нарисуем на входной картинке одну длинную такую диагональ, то на выходной нейросетевой картинке получим точки по этой диагонали - нейросеть нашла много раз этот признак вдоль нашей «большой» диагонали (по-сути диагональ составлена из множества маленьких). Если линия на входной картинке была жирная, то тогда имеет смысл сначала найти края (edges), потом уже натравливать нашу фичу. Но это другая история. Причём края может выделять та же самая нейросеть...

Если у нас появится второй нейрон скрытого слоя - X11, то он должен будет кодировать уже другую фичу (другой признак), например точку, пустоту, заливку, вертикальную линию и т.п. И этот нейрон X11 уже выделит другой признак. И сгенерит отдельную карту признаков.

Самый интересный вопрос

Теперь посмотрим на типичную схему нейросети, которая рисуется на каждом углу: https://i.stack.imgur.com/9jzpy.jpg

Три нейрона входного слоя. Они же три фильтра. Каждый из них описанным выше способом бегает по входной картинке и создаёт карту признаков (feature map). Получаются 3 независимых карты признаков. Далее стоит выходной нейрон, который берёт входы со всех 3 нейронов. Как он это делает? На входы последнего выходного нейрона подаются результаты работы фильтров (нейронов скрытого слоя) когда каждый из них КУДА смотрит? Обязательно в одну и ту же область картинки? Т.е. вспоминая про feature map (карта признаков, которых у нас тут три - каждая на выходе своего фильтра), входной нейрон берёт значения из разных карт признаков (ведь 3 синапса выходного нейрона подключены на РАЗНЫЕ нейроны скрытого слоя - значит смотрят на разные карты признаков)? Но из какой именно точки этих карт признаков? Из точки с одной и той же кооринатой? То есть выходной нейрон умеет видеть только информацию вида "в какой мере 3 признака (реализованные 3-мя фильтрами) присутствуют в одном и том же месте картинки"? Выходной нейрон никогда не «увидит» ситуации вида «признак 1 в центре, признак 2 в углу, признак 3 в другом углу»? Скажем, если бы мы захотели сделать свёртку свёртки, то есть иметь второй скрытый слой до выходного нейрона, то есть наложить ещё какой-то фильтр на карту фич первого фильтра, то я теряюсь как это можно показать на подобной примитивной схеме нейросети и используется ли это вообще где-либо и если да, то как изображается схематически?

Объява: вступлю в приватную переписку по сабжу: data.structures@yandex.ru



Последнее исправление: hlamotron (всего исправлений: 3)

вступлю в приватную переписку по сабжу: data.structures@yandex.ru

Лучше зарегайся на ods.ai (русскоязычное сообщество, около 5к человек). Помогают часто, но и смешать с говном могут тоже (как и ЛОР, собственно).

Solace ★★
()

Свёртка не скалярное произведение, хотя и похожа. Свёртки, ядра и т.д. описаны в любом базовом курсе DSP и обработки изображений, можно, например, Гонсалеса и Вудса почитать.

dn2010 ★★★★★
()
Ответ на: комментарий от dn2010

А чё тогда везде говорят, что это dot product? Да и разве умножить каждый пиксель на свой вес и всё сложить - это не скалярное произведение?

Короче, википедия не согласна с тобой, придётся всех википедчиков тебе зарезать ножом! https://en.wikipedia.org/wiki/Dot_product

hlamotron
() автор топика
Ответ на: комментарий от hlamotron

А чё тогда везде говорят, что это dot product?

Там получается sliding dot product.
Оно же - другая сторона медали от cross-correlation.



А книжку тебе он годную посоветовал, не брезгуй.

Solace ★★
()
Последнее исправление: Solace (всего исправлений: 3)
Ответ на: комментарий от hlamotron

А если не двигать

Вот определение свертки: https://wikimedia.org/api/rest_v1/media/math/render/svg/a85f42436daa9e0bc3586...

И как ты тут не будешь «двигать»?

Нельзя развёрнуто отвечать?

Не обижайся, ссылки тебе хорошие дали, а покурить самому всяко полезнее, чем в неудобном формате ЛОРа делать выкладки и объяснять на пальцах.

Solace ★★
()
Ответ на: комментарий от anonymous

У меня одного там какая-то фишинг ссылка на гугл докс?

Да, у тебя одного. Уважаемый неуловимый джо)

hlamotron
() автор топика
Ответ на: комментарий от Solace

Ну тогда видимо ты не в курсе чего-то. Хотя-бы жаргона, который видимо важен, раз везде используется. Кругом матрицу весов нейрона скрытого слоя (фильтра) называют «ядром свёртки» - например тут: https://ru.wikipedia.org/wiki/Свёрточная_нейронная_сеть

Т.е. кругом используется некий набор терминов, который для тебя неприемлем/неизвестен, ну тогда консультант по сабжу из тебя бесполезный, несмотря на твоё более строгое понимание всего этого матана.

hlamotron
() автор топика
Ответ на: комментарий от Solace

Нет, часть регистрации. На почту приходит инвайт. Ну и в целом следят за составом участников.

Сириус бизнус.

anonymous
()
Ответ на: комментарий от hlamotron

Хотя-бы жаргона, который видимо важен, раз везде используется. Кругом матрицу весов нейрона скрытого слоя (фильтра) называют «ядром свёртки»

kernel, да, если мы уж говорим в терминах, которые действительно используют. И используется это не только в CNN, есть такая хрень, как kernel trick. И на нем построено много всего.

Т.е. кругом используется некий набор терминов, который для тебя неприемлем/неизвестен

Вполне известен. Просто я действительно не понимаю, как ликбез о том, какие термины и откуда пришли, поможет тебе разобраться в достаточно простой математике нейросетей.

Solace ★★
()
Ответ на: комментарий от Solace

kernel, да,

А «ядро свёртки»? Википедия врёт?

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

hlamotron
() автор топика
Ответ на: комментарий от hlamotron

Почему тогда нейросеть называют свёрточной?

Потому что на каждом слое выполняется свертка. Потому что веса для всех нейронов в пределе одного слоя одинаковые

Т.е. кругом используется некий набор терминов, который для тебя неприемлем/неизвестен, ну тогда консультант по сабжу из тебя бесполезный, несмотря на твоё более строгое понимание всего этого матана.

Если ты не в состоянии самостоятельно прочитать и понять, что такое свертка, а что такое скалярное произведение, то лучше иди улицы подметать. И без тебя в нейросетях количество необразованных тупиц зашкаливает

Waterlaz ★★★★★
()
Ответ на: комментарий от hlamotron

В куче статей и видосов сказано, что нейрончик X10 (который ядро >свёртки) называется filter. почему такой термин? Почему не ядро >свёртки?

Filter/Mask/Kernel, называй как хочешь. Интуитивное объяснение простое: свертка позволяет извлекать features из изображения, выделяя, допустим, грани предметов.

http://setosa.io/ev/image-kernels/

Вот тут можешь поиграться.

Solace ★★
()
Ответ на: комментарий от Solace

Ну то есть свёртка есть. Почему ты так долго упирался? Например говорил что хрен знает почему свёрточные сети назвали свёрточными? Оказывается потому что они выполняют свёртку.

hlamotron
() автор топика
Ответ на: комментарий от Waterlaz

Если ты не в состоянии самостоятельно прочитать и понять, что такое свертка, а что такое скалярное произведение, то лучше иди улицы подметать. И без тебя в нейросетях количество необразованных тупиц зашкаливает

Чё-то у тебя с логикой жопа. Если человек бы мог сам прочитать и понять, он бы прочитал и понял. То есть ты УЖЕ наблюдаешь факт, как человек что-то не смог сам понять и рассуждаешь «если ты сам не смог понять». Алё, чувак, ты уже наблюдаешь тот факт, что я что-то не смог понять, чё за «если»? Я не смог понять, т.к. наверное не уделил этому достаточно времени или были другие причины, например я тупой - это не твоё дело. Твоё дело тут либо дать объяснение, которое поможет мне понять, либо пойти покурить, если нет желание уделять внимание таким дегенератам как я. Не надо меня посылать, послатья тебя тоже могу. Тебя никто не заставляет давать объяснение - можно просто пройти мимо. Ну либо я могу сделать вывод, подобно тебе, что ты что-то там не смог понять в вопросе и не смог ответить.

hlamotron
() автор топика
Ответ на: комментарий от hlamotron

Ну то есть свёртка есть.

Конечно, есть. Я тебе выше зря что ли ссылки на них кидал?

Почему ты так долго упирался? Например говорил что хрен знает >почему свёрточные сети назвали свёрточными?

Потому что происходящее напоминает мне синдром анонимуса. Та же манера обсуждать абсолютно несущественные детали.
В следующих постах, видимо, нам предстоит увидеть вопросы на тему огромной роли ReLU и того, почему же сеть не назвали в честь этой функции активации.

Solace ★★
()
Ответ на: комментарий от Solace

О существенности деталей судить явно спрашивающему. Что вам там предстоить увидеть - дело не сильно ваше, а дело ученика, который что-то не понял. Не хочешь быть учителем - чё ввязался в топик?

hlamotron
() автор топика
Ответ на: комментарий от hlamotron

О существенности деталей судить явно спрашивающему.

И тогда, в принципе, ты никогда не получишь правильный ответ, ибо банально не сможешь сформировать вопрос.

Что вам там предстоить увидеть - дело не сильно ваше, а дело ученика, который что-то не понял. Не хочешь быть учителем - чё ввязался в топик?

Чувак, тебе кинули ссылок. Худо-бедно тебе еще и объясняют. Я, допустим, тебе вообще не хамлю. В чем проблема?

Solace ★★
()
Ответ на: комментарий от Solace

И тогда, в принципе, ты никогда не получишь правильный ответ, ибо банально не сможешь сформировать вопрос.

Ты будешь сильно от этого страдать?

Чувак, тебе кинули ссылок. Худо-бедно тебе еще и объясняют. Я, допустим, тебе вообще не хамлю. В чем проблема?

Ссылок я могу сам нагуглить. Если я что-то спрашиваю, значит хочу получить ответ именно на то, что спросил.

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

hlamotron
() автор топика
Ответ на: комментарий от Solace

А зачем ты решил поделиться тем наблюдением, что ты не хамишь - ваще кабздец непонятно зачем нужная тут инфа. Нафиг мне знать, хамишь ты мне или нет? Я чо, пытаюсь насладиться культурной петербургъской словесностью? Цель тут вообще-то другая была, ответы на вопросы получить - с матом или без мата - это вторично, как умеешь. Не обязательно делиться таким со мной своими культурными загонами, хамишь ты мне там или нет - это на форум русскага языка плиз.

hlamotron
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.