В материалах на JavaRush мы уже затрагивали тему искусственного интеллекта (ИИ), машинного обучения и других технологий, так или иначе связанных с ИИ. В частности, мы уже говорили о том, как искусственный интеллект связан с программированием на Java, обсуждали мифы и страшилки об ИИ, как и в ряде статей упоминали ключевые технологии, которые применяют в данной сфере.
Поэтому мы решили, что сейчас — хорошее время, чтобы углубиться в сферу ИИ еще сильнее, и подробнее разобрать технологию, которая фактически лежит в основе современного ИИ и машинного обучения, — нейросети. А именно: как изначально зародилась сама концепция нейросетей и как эта технология трансформировалась в свое нынешнее состояние, чем искусственные нейросети отличаются от нейронов в мозге человека, действительно ли они умеют обучаться, и на что действительно способны сегодня.
Искусственные нейросети и мозг человека. Одно и то же?
Изначально компьютерные нейросети получили такое название потому, что принцип их устройства напоминает систему нейронов в человеческом мозге. Так, обычный мозг человека включает в себя более 100 млн мельчайших клеток, называемых нейронами. На самом деле, никто точно не знает, сколько реально может быть таких клеток в человеческом мозге — оценки варьируются от 50 до 500 млрд. Каждый нейрон состоит из тела клетки со множеством так называемых дендритов (входы клетки — передают информацию клетке) и одним аксоном (выход клетки — передает информацию от клетки). Нейроны настолько мелкие, что около сотни таких клеток можно разместить на площади в один квадратный миллиметр.
Внутри компьютера эквивалентом нейрона являются крошечные переключающие устройства, транзисторы. Новейшие современные микропроцессоры (однокристальные компьютеры) содержат более 30 млрд транзисторов. Даже первый микропроцессор Pentium, созданный около 20 лет назад, имел около 50 млн транзисторов, упакованных в интегральную микросхему площадью всего 25 мм.
По сути, говорят эксперты, на этом связь компьютерных процессоров с нейронами в мозге человека и заканчивается, ибо в остальном они сильно отличаются друг от друга и работают совершенно по-разному. Компьютерные транзисторы соединяются в относительно простые последовательные цепочки, каждая из которых может быть связана с двумя или тремя другими, тогда как нейроны в мозге плотно связаны сложными параллельными способами. Так, ученые подсчитали, что каждый нейрон может быть связан более чем с 10 тыс. своих соседей.
Что такое искусственная нейронная сеть?
Таким образом, наиболее существенное структурное отличие компьютеров от нейронов в мозге состоит в том, как они работают.
Базовая идея, лежащая в основе нейросетей, заключается в симулировании, или, если угодно, моделировании, в упрощенном виде работы множества взаимосвязанных нейронов мозга. Именно это позволяет нейросети делать то, что не подвластно обычным микропроцессорам, а именно — обучаться, распознавать паттерны и принимать решения по схожему с человеческим мозгом принципу.
Однако важно подчеркнуть, что на данный момент, нейросети представляют собой простую программную эмуляцию работы нейронов в мозге.
Обычная нейронная сеть содержит от нескольких десятков до сотен, тысяч или даже миллионов искусственных нейронов, называемых юнитами, расположенных в виде нескольких слоев. Часть данных юнитов, которые называются юнитами ввода, отвечает за получение из внешнего мира различных форм информации, которую нейросеть потом попытается изучить, запомнить и обработать другими способами. Другие юниты, называемые юнитами вывода и размещенные на противоположной стороне сети, отвечают за то, как сеть взаимодействует с данной информацией. Между этими двумя слоями располагаются другие юниты, которые занимаются вычислениями и составляют основную часть нейронной сети.
Большинство нейронных сетей взаимоподключены, то есть каждый юнит подключен к другим юнитам в слоях с обеих сторон. Связи между юнитами представлены числом, которое называют весом. Вес в нейросети может быть положительным (если один юнит активирует другой) либо отрицательным (если один юнит подавляет или ослабляет другой). Чем выше вес, тем больше влияние одного юнита на другой.
Простая нейросеть, созданная для решения простых задач, может включать в себя только три базовых слоя, как показано на картинке. Однако между слоями ввода и вывода может размещаться целый ряд различных слоев, выполняющих разные функции. Нейросети с более комплексными (чем на иллюстрации выше) структурами называются глубокими нейросетями (deep neural network) и обычно используются для решения сложных проблем.
В теории, использование глубокой структуры позволяет нейросети сопоставить любой тип входных данных с любым типом выходных данных, таким образом делая ее способной решать любые задачи. Однако для этого нейросети потребуется серьезное и продолжительное “обучение,” которое заключается в обработке миллионов и даже миллиардов примеров информации, с которой сети нужно работать.
Нейросети: немного истории
Ну что ж, с базовыми пояснениями о том, чем по сути являются нейросети, разобрались, теперь можно немного отступить о теории и поговорить об истории этой технологии и когда она вообще появилась.
Многих это может удивить, но нейронные сети появились в науке более чем 70 лет тому назад. Это понятие в 1944 году впервые предложили Уоррен МакКаллох (Warren McCullough) и Уолтер Питтс (Walter Pitts), два исследователя из Чикагского Университета, которые в 1952 году перебрались в Массачусетский технологический институт, где и основали первую группу по исследованиям когнитивных наук.
Нейронные сети фактически были основной областью исследований как в нейробиологии, так и в информатике вплоть до 1969 года. То есть, эта технология, лежащая в основе современных систем искусственного интеллекта, уже была, выражаясь современным языком, на хайпе больше целого десятилетия — примерно с середины пятидесятых до конца шестидесятых.
Считается, что “убийцей” этого хайпа стала книга авторства двух компьютерных ученых — Марвина Мински (Marvin Minsky) и Сеймура Паперта (Seymour Papert), — которые в своей работе раскрыли все ограничения нейронных сетей. Дело в том, что ранние нейронные сети имели только один или два обучаемых слоя. Мински и Паперт показали, что такие простые сети математически не способны моделировать сложные явления реального мира.
В результате, к нейронным сетям как технологии потерялся интерес на долгие годы — все семидесятые и первую половину восьмидесятых им уделяли объективно мало внимания. Интерес возобновился только в 1986-ом году, после публикации статьи, в которой была представлена концепция обратного распространения, практического метода обучения глубоких нейронных сетей. Благодаря обратному распространению, глубокие нейронные сети стали более удобными для вычислений, но все еще требовали для работы огромных вычислительных ресурсов. А результаты исследований в 1990-х и 2000-х годах часто показывали, что сложные нейронные сети не дают желаемого результата в плане эффективности.
В результате нейронные сети на какое-то время снова слетели с волны хайпа и вернулись только во втором десятилетии двухтысячных, во многом, благодаря возросшей вычислительной мощности графических чипов, которые позволяют глубинным нейросетям работать более эффективно, чем раньше.
Феномен такой цикличности в науке в целом хорошо объясняет Томасо Поггио (Tomaso Poggio), профессор Массачусетского технологического института: “Есть такое объяснение, что идеи в науке распространяются во многом так же, как это делают вирусы. Например, существует пять или шесть основных штаммов вируса гриппа, и каждый из них возвращается примерно раз в каждые 25 лет. Люди заражаются, у них вырабатывается иммунитет, в результате чего на протяжении следующих 25 лет они защищены от инфекции. А потом приходит новое поколение, которое снова инфицируется тем же штаммом вируса. В науке, люди влюбляются в идеи и работают над ними до изнеможения — так, что у них вырабатывается иммунитет в виде усталости от этой идеи. А потом идея возвращается уже с другим поколением ученых.”
Учитывая тот факт, что нейронные сети и технологии искусственного интеллекта — это по-прежнему достаточно новая и слаборазвитая технология, не исключено, что хайп вокруг нее скоро снова начнет ослабевать, только для того, чтобы вернуться опять, еще через парочку десятилетий.
Как нейронные сети обучаются?
Как правило, информация проходит через нейронную сеть двумя способами. Когда сеть только обучается или уже работает после обучения, шаблоны информации поступают в нее через юниты ввода, которые запускают слои скрытых юнитов, а те, в свою очередь, поступают в юниты вывода. Эта общая структура называется сетью прямого распространения.
Не все юниты работают одновременно. Каждый юнит получает входящие данные от юнитов слева и умножает их на вес соединений, по которым он проходит. Каждый блок суммирует все данные, которые он получает таким образом, и, в простейшем типе сети, если сумма превышает определенное пороговое значение, юнит активирует другие юниты, к которым он подключен (те, что расположены справа).
Одним из ключевых моментов, которые позволяют любой нейросети обучаться, является обратная связь. Так же, как ребенок нуждается в воспитании взрослого, который расскажет ему, что хорошо, а чем плохо, обратная связь и наставления нужны нейросетям. Они используют для обучения подход, который называется метод обратного распространения ошибки.
В рамках данного метода, сеть сравнивает выдаваемый ею результат с тем, который она должна выдавать, и использует разницу между этими двумя факторами для изменения веса соединений между юнитами в сети, в направлении от юнитов вывода, через промежуточные юниты к юнитам ввода — то есть, наоборот. Со временем обратное распространение ошибки заставляет сеть учиться, уменьшая разницу между фактическим и предполагаемым результатом до точки, где они точно совпадают.
Как нейросети работают и где используются?
Ну и напоследок, разберем пример того, как работает подобная нейросеть.
Получив достаточно примеров данных, на которых можно обучиться, нейросеть достигает точки, когда пользователь может загрузить в нее абсолютно новые данные, которые сеть никогда ранее не обрабатывала, и получить от нее нужный результат. Например, предположим, что вы обучаете вашу нейросеть находить оружие, когда оно появляется где-нибудь в пределах видимости камеры наблюдения. Вы обучаете сеть, демонстрируя ей сотни, тысячи и десятки тысяч изображений разного рода вооружения, например, пистолетов и винтовок. На каком-то этапе вы загружаете в сеть изображение нового типа оружия, которое раньше ей не демонстрировалось, например, ружье. В результате чего сеть успешно определяет этот объект как оружие по ряду базовых критериев, таких как общая форма, наличие ручки и приклада, наличие спускового курка и так далее. То есть, нейросеть определяет оружие на изображении на основе ряда “выученных” паттернов.
При этом, конечно это не значит, что нейросеть умеет просматривать новые данные, самостоятельно принимая решение, как это делают люди. Она получает всю информацию в виде бинарного кода, и каждый из юнитов ввода (информации в сеть) может быть всего лишь в двух положениях: включен или выключен. Соответственно, если вы, пользуясь тем же примером, обучаете нейросеть находить оружие, информация будет проходить через набор юнитов ввода, отвечающих на базовые “да/нет” вопросы. Например, такие: есть ли у объекта спусковой крючок?; имеется ли дуло?; сделан ли предмет из металла?; соответствует ли его форма форме пистолета? Соответственно, для ружья, ответ сети был бы: “да, да, да, нет” или “1110” в бинарном коде. Конечно, в реальной системе таких вопросов было бы значительно больше, но суть остается той же: нейросеть получает данные в виде бинарного кода, и с его помощью учится отличать нужную информацию от ненужной.
Теперь, зная базовый механизм работы нейросети, легко представить себе, как эта технология используется для решения самых разных задач уже сегодня. Например, классическим уже примером является использование нейросетей для предотвращения банковского мошенничества — когда система учится самостоятельно находить и мгновенно блокировать те переводы, которые по тем или иным причинам кажутся подозрительными. Или, например, использование нейросетей для базового автопилота автомобилей или самолетов: когда юниты ввода получают информацию от разных систем управления, а юниты вывода корректируют режим пилотирования в соответствие с заданным курсом.
Выводы
Теперь вы видите, что нейросеть — это сравнительно несложная, в целом, технология, которая действительно двигает компьютеры и компьютерные системы на шаг вперед, ближе к людям. С другой стороны, также очевидно, что нейросети все же и близко не стоят по сложности и эффективности с человеческим мозгом. Поэтому давайте будем благодарны тому, что мы все рождаемся с продвинутой нейронной сетью, которая встроена прямо нам в мозг, и будем пользоваться этим природным богатством почаще, например, для обучения и самосовершенствования.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ