Поспешу вас разочаровать. Ничего страшного сегодня не будет. Страшное будет завтра.:) И оно будет в цифрах и буквах , а не в апокалиптических картинках и не в откровениях "прародителя SkyNet" Джеймса Кэмерона. А сегодня мы лишь сделаем краткий обзор того, какие бывают нейросетки и какие задачи они решают. В предыдущих главах мы с вами выяснили, как работает один нейрон, и как несколько. Сегодня мы пойдем дальше и узнаем, как строятся простейшие многослойные нейросети и откуда берутся аналогии в наших любимых фильмах.
Коль скоро принцип работы одного нейрона неизменен, вся "магия" нейросеток сводится к связям между нейронами и весам этих связей. Сегодня подробно обсудим первые. И как мы увидим, именно их структура и определяет то, на что наша сеть будет способна. Когда говорят о структуре связей между нейронами обычно используют термин "топология сети". Строго говоря, это не совсем верно. Топология - это раздел математики, вольно выражаясь, обобщающий геометрию. Как я люблю шутить - "школьная геометрия различает все, афинная геометрия игнорирует углы и расстояния, а топология не отличает вилку от ложки." Но когда говорят о "топологии нейросетей" обычно имеют в виду именно структуру связей между нейронами. Так какие же они бывают?
Нейронная сеть такого типа называется полносвязной. Это означает, что каждый нейрон предыдущего слоя связан со всеми нейронами следующего. И связи эти имеют веса Wnm, где n - номер "передающего сигнал" нейрона в предыдущем слое нейросети, m - номер "принимающего сигнал" нейрона в следующем слое. Как говорят математики, эти веса формируют в каждом слое матрицу размером N(число нейронов в предыдущем слое) * M(число нейронов в последующем). Сразу оговорюсь, что под матрицей мы в данном случае подразумеваем просто набор чисел, а вовсе не сценарий фильма о победившем искусственном интеллекте :)
Наверно, можно сказать что, такие полносвязные нейронные сетки являются самыми популярными в мире искусственного интеллекта. Если у нас нет каких-то изначальных предположений о структуре задачи, которую мы пытаемся решить, то, как правило полносвязная сеть служит лучшим первым приближением. Ну и если вспомнить, о том что хз - самый частый ответ в мире ИИ, вторым по популярности будет "бери полносвязную -не ошибешься!". Однако, нейронов в слоях нашей нейросетки может быть очень много (вплоть до сотен миллионов). И обсчитать каждый из них получается довольно дорого. Поэтому специалисты в области ИИ пытаются ограничить число нейронов и связей между ними. Они постоянно задаются вопросом - "а так можно?". И, к счастью, ту нам на помощь приходят знания о структуре х решаемых задач. Давайте посмотрим как это происходит.
Обратите внимание, что на картинке выше, уже далеко не все нейроны первого слоя связаны с нейронами второго. И в последующих слоях ситуация та же самая. Такой подход часто применяется в компьютерном зрении, в частности, в задачах распознавания лиц (как здесь). И связан с тем, что, как правило, изменения на изображении происходят довольно плавно, а значит нам нет нужды анализировать каждый входной пиксель нашей картинки. Это легло в основу так называемых сверточных сетей, которые мы с вами в дальнейшем подробно обсудим. Но концепция сильной локальной связи простирается далеко за пределы обработки изображений. Другой пример дает обработка текста. Мы интуитивно понимаем, что слова в одном приложении сильно связаны друг с другом по смыслу. А вот слова из разных предложений уже гораздо слабее. И это дает нам возможность значительно сократить число весов в процессе конструирования нейронной сети.
Ну хорошо, скажете вы, мы сумели свести полносвязную сеть к разреженной. А как еще можно? Можно ли сделать вот так?
Это картинка одного из наших примеров, только здесь добавлена прямая связь от входного нейрона не в следующий слой, а в тот что за ним. Теоретически, так можно. Но так стараются не делать. Ибо как уже говорилось, при конструировании нейросетей стараются минимизировать число связей между нейронами. А этот случай, выражаясь языком юристов создает "опасный прецедент". Ибо слоев в нейросети может быть много. А нейронов в каждом из них - еще больше. Так что же нам все эти связи анализировать? В нашем случае проще применить некий трюк - а именно, добавить "прозрачный"( c единственным весом равным 1) нейрон в в первый внутренний слой.
Хмм, - скажете вы. Так мы что же теперь имеем две связи (входящую и выходящую для нашего прозрачного нейрона)? Да, отвечу я. Мы немного увеличили размер наших матриц весов. Но за счет этого предотвратили формирование в нашей задаче тензора весов для каждого слоя. А это поверьте мне гораздо хуже. Настолько, что я даже готов предложить для следующего постапокалиптического фильма название "Тензор" :) Ну а если серьезно, с преимуществами такого подхода мы разберемся, когда будем заниматься обучением нейронных сетей.
Ну хорошо, согласимся, что "пробрасывать" данные сквозь слои нейросети "вперед" - не лучшая практика. А что если "назад"? Может быть вот так (чтобы нейрон подавал сигнал на вход сам себе)?
Или вот так (когда он подает сигнал на вход нейронам предыдущих слоев)?
Ответ -да, может. Это называется рекуррентной нейронной сетью. И они довольно часто встречаются в задачах распознавания речи и анализа текста. Смеетесь? - Напрасно, я вам с самого начала говорил что развитие искусственного интеллекта никогда не шло прямыми путями :)
Но хватит, пожалуй, на сегодня картинок. Давайте сделаем один очень важный вывод. Все, что есть в искусственном интеллекте - это только стрелочки и числа. Стрелочки - связи между нейронами. А числа - веса этих связей. И все, больше там ничего нет. Ну, точнее, все остальное носит сугубо вспомогательный характер.
И, тем не менее, эти стрелочки и числа способны сформировать целый мир. От которого захватывает дух, не только у авторов научной фантастики, но и у простых математиков, вроде меня. Поэтому напоследок приведу историю, которую уже публиковал у себя в телеграмм -канале.
Есть у меня один товарищ, зовут его Михаил. Очень талантливый физик, но как бы это сказать... Материалист чуть больше, чем оно того стоит. И вот недавно обсуждали мы с ним (за рюмкой чая) проблемы искусственного интеллекта.
- А я вот думаю, Валер, что никакого искусственного интеллекта нет. Это просто аппроксимация (приближение) неких математических функций, на большом объёме данных...
- Хмм..., знаешь, Миш, ответил я после некоторой паузы. Мне кажется, все зависит от нашего восприятия. Если ты видишь в этом только аппроксимацию функций, то ты и получишь аппроксимацию функций. А если ты веришь в чудо (как OpenAI или Демис Хассабис), то, возможно, когда-то ты его дождёшься...
Но о "чудесах" ИИ будет чуть позже. В следующий раз мы с вами разберем его "ужасы". Мнимые и реальные.
Оставайтесь со мной.