Ещё в первой половине прошлого века ученые пытались математически описать работу человеческого мозга, чтобы воспроизвести ее с помощью машин.
Опираясь на теоретические работы по искусственным нейронным сетям и кибернетике, нейрофизиолог Фрэнк Розенблатт предложил схему устройства, которое моделирует процесс человеческого восприятия. Он назвал его перцептроном. Учёные считали перцептрон ключом к интеллекту. Они предполагали, что с его помощью смогут решать множество задач. От распознавания изображений, до предсказания погоды. Нужно всего лишь сконструировать достаточно большую сеть из ячеек памяти. Но на практике возможности перцептронов оставались ограниченными, и интерес к теме постепенно угас.
В середине 80-ых годов произошел новый прорыв. Учёные описали, как можно усовершенствовать перцептрон, сделать его более точным и менее громоздким. С тех пор нейронные сети развиваются как на уровне точности и скорости алгоритмов, так и на уровне мощности устройств, которые их используют.
Все нейронные сети на фундаментальном уровне организованы схожим образом: как набор нейронов и связей между ними. Нейрон — это функция, которая принимает много данных на входе и возвращает определенное значение на выходе. А связи — это каналы, по которым эти значения передаются. У каждой связи есть вес, который показывает, насколько она важна для расчётов. Нейросеть состоит из нескольких слоев нейронов. Когда нейроны одного слоя выполнили свои вычисления, они передают значения следующему слою, тот — следующему и так далее. Для чего нужны разные слои?
Давайте представим, что мы разрабатываем нейросеть, которая распознает рукописные числа от 0 до 9. Каждое число можно разделить на серию элементов: окружностей, крючков, линий. Каждый элемент можно разложить на ещё более мелкие детали, например, крючок состоит из небольших уголков. Тогда первые слои нейросети будут распознавать мельчайшие детали, следующие на их основе — более крупные элементы, следующие — попытаются сложить из них число.
Похожим образом может работать распознавание голоса. Речь раскладывается на отдельные элементы, в которых одни слои пытаются угадать конкретные буквосочетания, другие — сложить из них слова, третьи — составить осмысленное предложение. Проблема в том, что в одном слое могут быть тысячи нейронов, а самих слоёв — десятки и сотни. Это значит, что счет связей может идти на сотни тысяч или миллионы. Только представьте, каково это — настроить вручную миллион связей.
Но делать этого не приходится: спасают методы глубинного обучения. Нейросети дают большое количество обучающих материалов — например, миллион изображений рукописных чисел с указанием, что это за число. Нейросеть их изучает и сама составляет связи между слоями. Затем ей дают новое изображение и она угадывает, что на нём за число.
Чтобы машина сама обучалась принимать решения, используют метод обратного распространения ошибки. Это работает так: изначально функции в нейронах и веса связей между ними настроены случайным образом. Алгоритм принимает на вход какое-то значение и возвращает что-то на выходе. Затем считает, насколько сильно ошибся и прокручивает вычисления по слоям в обратную сторону, немного корректируя функции в нейронах и связи между ними. И повторяет это, пока ошибка не станет минимальной.
У нейронных сетей около двадцати видов архитектур, перцептрон — только одна из них. Давайте посмотрим, как устроены некоторые другие.
Когда мы рассказывали о распознавании чисел, мы разобрались, что алгоритм будет рассматривать изображение по частям и искать на них характерные детали — уголки и черточки. Потом сложит их в более крупные элементы и уже затем будет угадывать число. Операция по поиску массивов таких деталек называется сверткой, а нейросеть, которая это делает — сверточной.
Ещё есть рекуррентные сети. Они отличаются тем, что алгоритм запоминает информацию от предыдущих вычислений. Это нужно, например, при написании текста: чтобы придумать, какое слово подставить следующим, машине нужно помнить, какие слова стояли до этого. Так она сможет выбрать наиболее подходящий вариант. То же самое для воспроизведения речи: алгоритм помнит, какой звук был до текущего и понимает, как его лучше произнести, например, более мягко или растянуто. В итоге речь звучит естественно.
Нейронные сети могут создавать убедительные тексты. Например, самая продвинутая языковая модель – GPT-3 – сама написала для журнала Guardian полноценную статью, почему не стоит бояться искусственного интеллекта. Эту же модель использовали для того, чтобы создать игру Ai Dungeon, которая успешно воссоздает атмосферу текстовых приключенческих игр вроде “Подземелья и драконы”. Система помнит контекст и может генерировать сценарии в нескольких жанрах.
Получается, машины могут не только распознавать что-то, но и самостоятельно создавать. Один из инструментов, которые для этого используют — генеративно-состязательные сети. Это алгоритм, который состоит из двух сетей. Первая генерирует новые образы: картинки, видео, звуки или алгоритмы. Её называют генератором. А вторая сеть пытается классифицировать объекты и понять, какие из них настоящие, а какие были созданы генератором. Её называют дискриминатором. В итоге генератор и дискриминатор тренируют друг друга. Первый создаёт всё более искусные подделки, а второй всё более точно их определяет. В итоге получается сеть может создавать объекты, которые очень сложно отличить от реальных, например, фотореалистичные изображения людей.
У нейросетей широкая область применения, мы постоянно сталкиваемся с ними. В камере мобильного телефона они распознают лица друзей, когда мы делаем фотографии. В некоторых мессенджерах — расшифровывают аудиосообщения в текст. Они могут играть в компьютерные игры, управлять роботами и дронами. Алгоритмы могут писать рассказы, картины и музыку. Если загрузить в нейросеть большое количество аудиозаписей с выступлений конкретного человека, она научится разговаривать его голосом или подражать его мимике.
У нейросетей есть и ограничения. Во-первых, для их обучения нужны большие объёмы данных, в противном случае у них будет низкая точность. Во-вторых, они работают только с теми данными, на которых их обучили. То есть, если нейросеть умеет опознавать цифры, а вы покажете ей букву, в качестве ответа она всё равно выдаст какую-то цифру. В-третьих, есть проблема, связанная со склонностью нейросетей к переобучению. Это значит, что алгоритм не столько улавливает закономерности, сколько просто запоминает ответы. В итоге он хорошо работает на обучающих данных, а на боевых часто ошибается.
Тем не менее перспективы дальнейшего развития нейросетей позитивные. Их уже активно внедряют в банковской сфере. Например, в Сбере они занимаются распознаванием документов, проверяют контрагентов, принимают решения о выдаче кредитов. Они полезны и с нефинансовыми продуктами. Например, оживляют семейство виртуальных ассистентов “Салют” и генерируют виртуальные среды для проведения съемок.