Найти в Дзене
ИИ простыми словами

Топология. Как мы строим SkyNet

Поспешу вас разочаровать. Ничего страшного сегодня не будет. Страшное будет завтра.:) И оно будет в цифрах и буквах , а не в апокалиптических картинках и не в откровениях "прародителя SkyNet" Джеймса Кэмерона. А сегодня мы лишь сделаем краткий обзор того, какие бывают нейросетки и какие задачи они решают. В предыдущих главах мы с вами выяснили, как работает один нейрон, и как несколько. Сегодня мы пойдем дальше и узнаем, как строятся простейшие многослойные нейросети и откуда берутся аналогии в наших любимых фильмах.

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

Полносвязная (fully connected) нейронная сеть
Полносвязная (fully connected) нейронная сеть

Нейронная сеть такого типа называется полносвязной. Это означает, что каждый нейрон предыдущего слоя связан со всеми нейронами следующего. И связи эти имеют веса Wnm, где n - номер "передающего сигнал" нейрона в предыдущем слое нейросети, m - номер "принимающего сигнал" нейрона в следующем слое. Как говорят математики, эти веса формируют в каждом слое матрицу размером N(число нейронов в предыдущем слое) * M(число нейронов в последующем). Сразу оговорюсь, что под матрицей мы в данном случае подразумеваем просто набор чисел, а вовсе не сценарий фильма о победившем искусственном интеллекте :)

The Matrix (1999)
The Matrix (1999)

Наверно, можно сказать что, такие полносвязные нейронные сетки являются самыми популярными в мире искусственного интеллекта. Если у нас нет каких-то изначальных предположений о структуре задачи, которую мы пытаемся решить, то, как правило полносвязная сеть служит лучшим первым приближением. Ну и если вспомнить, о том что хз - самый частый ответ в мире ИИ, вторым по популярности будет "бери полносвязную -не ошибешься!". Однако, нейронов в слоях нашей нейросетки может быть очень много (вплоть до сотен миллионов). И обсчитать каждый из них получается довольно дорого. Поэтому специалисты в области ИИ пытаются ограничить число нейронов и связей между ними. Они постоянно задаются вопросом - "а так можно?". И, к счастью, ту нам на помощь приходят знания о структуре х решаемых задач. Давайте посмотрим как это происходит.

-4

Обратите внимание, что на картинке выше, уже далеко не все нейроны первого слоя связаны с нейронами второго. И в последующих слоях ситуация та же самая. Такой подход часто применяется в компьютерном зрении, в частности, в задачах распознавания лиц (как здесь). И связан с тем, что, как правило, изменения на изображении происходят довольно плавно, а значит нам нет нужды анализировать каждый входной пиксель нашей картинки. Это легло в основу так называемых сверточных сетей, которые мы с вами в дальнейшем подробно обсудим. Но концепция сильной локальной связи простирается далеко за пределы обработки изображений. Другой пример дает обработка текста. Мы интуитивно понимаем, что слова в одном приложении сильно связаны друг с другом по смыслу. А вот слова из разных предложений уже гораздо слабее. И это дает нам возможность значительно сократить число весов в процессе конструирования нейронной сети.

Ну хорошо, скажете вы, мы сумели свести полносвязную сеть к разреженной. А как еще можно? Можно ли сделать вот так?

-5

Это картинка одного из наших примеров, только здесь добавлена прямая связь от входного нейрона не в следующий слой, а в тот что за ним. Теоретически, так можно. Но так стараются не делать. Ибо как уже говорилось, при конструировании нейросетей стараются минимизировать число связей между нейронами. А этот случай, выражаясь языком юристов создает "опасный прецедент". Ибо слоев в нейросети может быть много. А нейронов в каждом из них - еще больше. Так что же нам все эти связи анализировать? В нашем случае проще применить некий трюк - а именно, добавить "прозрачный"( c единственным весом равным 1) нейрон в в первый внутренний слой.

-6

Хмм, - скажете вы. Так мы что же теперь имеем две связи (входящую и выходящую для нашего прозрачного нейрона)? Да, отвечу я. Мы немного увеличили размер наших матриц весов. Но за счет этого предотвратили формирование в нашей задаче тензора весов для каждого слоя. А это поверьте мне гораздо хуже. Настолько, что я даже готов предложить для следующего постапокалиптического фильма название "Тензор" :) Ну а если серьезно, с преимуществами такого подхода мы разберемся, когда будем заниматься обучением нейронных сетей.

Ну хорошо, согласимся, что "пробрасывать" данные сквозь слои нейросети "вперед" - не лучшая практика. А что если "назад"? Может быть вот так (чтобы нейрон подавал сигнал на вход сам себе)?

-7

Или вот так (когда он подает сигнал на вход нейронам предыдущих слоев)?

-8

Ответ -да, может. Это называется рекуррентной нейронной сетью. И они довольно часто встречаются в задачах распознавания речи и анализа текста. Смеетесь? - Напрасно, я вам с самого начала говорил что развитие искусственного интеллекта никогда не шло прямыми путями :)

Но хватит, пожалуй, на сегодня картинок. Давайте сделаем один очень важный вывод. Все, что есть в искусственном интеллекте - это только стрелочки и числа. Стрелочки - связи между нейронами. А числа - веса этих связей. И все, больше там ничего нет. Ну, точнее, все остальное носит сугубо вспомогательный характер.

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

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

- А я вот думаю, Валер, что никакого искусственного интеллекта нет. Это просто аппроксимация (приближение) неких математических функций, на большом объёме данных...

- Хмм..., знаешь, Миш, ответил я после некоторой паузы. Мне кажется, все зависит от нашего восприятия. Если ты видишь в этом только аппроксимацию функций, то ты и получишь аппроксимацию функций. А если ты веришь в чудо (как OpenAI или Демис Хассабис), то, возможно, когда-то ты его дождёшься...

Но о "чудесах" ИИ будет чуть позже. В следующий раз мы с вами разберем его "ужасы". Мнимые и реальные.

Оставайтесь со мной.