К книге
Законы мышления: В поисках математической теории разума9 Сюжет закручивается.
32%
9 Сюжет закручивается.
11

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

Этот постоянный обмен идеями между психологией и компьютерными наукамии показывает, какие плоды мог принести новый подход к изучению разума, сформировавшийся в ходе когнитивной революции. Психологи извлекали пользу из строгих математических и компьютерных концепций, но взамен предлагали новые подходы, которые затем могли исследовать математики и специалисты по информатике. Различия в мотивации и методах оценки идей в этих областях также открывали новые возможности. Психологи стремились понять, как устроен человеческий разум, и в попытках ответить на этот вопрос имели роскошь исследовать идеи, которые не пользовались популярностью в компьютерных науках. Именно это и произошло с нейросетями. Как выразился Джим Андерсон: «В эти „темные века“ идеи просто ушли из поля зрения большой науки и технологий в те области, которые не попадали на передовицы газет».

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

Слой за слоем

Дэвид Румельхарт был человеком упорным. Он вырос в Южной Дакоте и в 1960 году окончил среднюю школу в крошечном городке Вессингтон-Спрингс (с населением 1488 человек). В его семье поощрялось умение глубоко задумываться над сложными задачами. Как описывал мне это Джей Макклелланд: «У них в семье была склонность по-настоящему сосредотачиваться на поиске решений — будь то розыгрыш наилучшей комбинации в джин-рамми или что угодно еще». Эта склонность помогла Румельхарту во время учебы в Университете Южной Дакоты, где он работал уборщиком в студенческом центре, который содержала его церковь, в обмен на бесплатное жилье. При этом каждый семестр он брал дополнительный курс, чтобы получить двойную специальность — по математике и психологии. Когда он получил несколько престижных стипендий для обучения в аспирантуре Стэнфорда, это стало настолько заметным событием, что сенатор от его штата, Джордж Макговерн, с гордостью доложил об этом в Сенате США.

Это упорство перенеслось и на его научную работу. Психолог Роберт Бьорк, известный своими исследованиями человеческого обучения и концепцией «желательных трудностей», был близким другом Румельхарта в аспирантуре. Он вспоминал, что сложные задачи буквально заряжали Румельхарта энергией: «Когда мы начинали над чем-то работать, он весь заводился, как актер перед выходом на сцену или спортсмен перед розыгрышем спорного мяча в центре площадки или приемом начального удара. Чем больше он работал и чем более загадочными казались вещи, тем более оживленным и взволнованным он становился. [...] Если что-то ставило Дэвида в тупик, он вел себя как собака с костью — он просто не мог перестать ее грызть».

Обучение нейронных сетей с несколькими слоями весов было как раз такой задачей, и он «грыз» ее несколько лет.

Добавление новых слоев в нейронную сеть было важно не только для моделирования психологических явлений, которые интересовали Румельхарта, — это также был простой способ обойти некоторые ограничения, которые Минский и Пейперт обнаружили у простых перцептронов. Напомним, что нейронную сеть можно представить как систему, которая преобразует одно пространство в другое. Если заменить терминологию Розенблатта (ассоциативные элементы и реагирующие элементы) современными терминами, то простой перцептрон осуществляет отображение из множества входных элементов в множество выходных элементов. Между ними мы можем ввести множество скрытых элементов (см. рисунок 9.1). Теперь отображение входов в выходы включает дополнительный шаг: веса от входных элементов к скрытым преобразуют входное пространство в новое пространство, а веса от скрытых к выходным элементам преобразуют его в выходное пространство. Формируя таким образом промежуточные представления, задачу, которую невозможно было решить с помощью однослойного перцептрона, можно разбить на шаги, для которых решение существует.

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

Рассмотрим, к примеру, исключающее «или». Как мы видели в главе 8, логические операторы вроде «и» (˄) и «или» (˅) могут быть представлены весами перцептрона, которые определяют линейно разделимые множества точек для истинных и ложных значений. Однако для «исключающего или» (⊕) это невозможно. Ниже снова приведены таблицы истинности для «и», «или» и «исключающего или»:

Глядя на таблицу, можно заметить, что исключающее «или» можно выразить в виде логической формулы с помощью ˄ и ˅: поскольку PQ истинно, когда истинно P ˅ Q, за исключением случаев, когда истинно P ˄ Q, мы можем записать PQ как (P ˅ Q) ˄ ¬(P ˄ Q), где ¬ означает «не». Это дает нам простой способ построить многослойную нейронную сеть, которая вычисляет PQ. Сначала мы находим веса для вычисления P ˅ Q и P ˄ Q на основе P и Q, возвращающие 1, когда эти формулы истинны, и 0, когда они ложны. Затем, на следующем слое, мы используем их в качестве входных сигналов для элемента, который вычисляет PQ, задавая положительный вес для P ˅ Q и больший по модулю отрицательный вес для P ˄ Q. Этот элемент будет получать входной сигнал больше 0 только тогда, когда P ˅ Q истинно, а P ˄ Q ложно. Если, подобно перцептронам Розенблатта, он порогово отсекает входной сигнал на уровне 0, то на выходе получится 1, когда PQ истинно, и 1, когда PQ ложно.

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

Румельхарт знал об ограничениях перцептронов с одним слоем весов и о том, что решение кроется в добавлении дополнительных слоев. Он прочитал книгу «Перцептроны», как только она вышла, и даже вел по ней занятия: «В некотором смысле именно Минский больше всех побудил меня прочитать о перцептроне».

И вот, когда в совместной работе с Макклелландом начали применяться многослойные нейронные сети, Румельхарт принялся размышлять над проблемой обучения. Но решить ее в одиночку ему было не под силу. На средства гранта Фонда Слоуна Румельхарт и его коллеги наняли группу молодых исследователей для изучения вопросов когнитивной науки. Одним из этих исследователей был британский эрудит Джефф Хинтон, который и восполнил некоторые недостающие фрагменты этой головоломки.

Вслед за градиентом

Если фамилия Хинтон кажется вам знакомой, то это потому, что мы уже встречались с прославленным семейством Хинтонов в главе 1. Джефф Хинтон — или, если полностью, Джеффри Эверест Хинтон — приходится праправнуком Джорджу Булю и Мэри Эверест Буль по линии их старшей дочери Мэри Эллен Буль и ее мужа Чарльза Говарда Хинтона. Его отец, Говард Эверест Хинтон, был энтомологом в Бристольском университете и убежденным сталинистом. Юного Джеффри отправили в британскую частную школу с сильным христианским уклоном, что резко контрастировало с домашней идеологией. В конечном счете он счел этот опыт полезным: «Думаю, это была отличная подготовка к научной деятельности, потому что я привык к мысли, что как минимум половина людей абсолютно неправы».

Затем Хинтон поступил в Кембриджский университет, где начал изучать физику и физиологию с намерением стать биофизиком. Но это занятие ему не подошло: «Я решил, что из меня никогда не выйдет хорошего физика, потому что уравнения оказались слишком сложными. Когда я видел несколько знаков интеграла рядом, мне казалось, что они ополчились против меня. Кроме того, меня по-прежнему интересовал поиск смысла жизни, поэтому я перевелся на философию». Хинтон изучал философию год, но и она не прижилась: «Философия мне не понравилась, потому что там невозможно понять, прав ты или нет. Очень досадно не иметь возможности понять, прав ли ты». Поэтому на третьем курсе он перевелся на психологию, но и тут его ждало разочарование: «Я ожидал, что у них найдутся модели работы разума, но их не было. Вместо того чтобы размышлять о том, как устроен разум, они занимались вещами вроде изучения крыс в лабиринтах».

Поэтому следующим логичным шагом для него стало плотницкое дело. Это тоже продлилось около года: «Через некоторое время я встретил настоящего плотника, и этот настоящий плотник был настолько искуснее меня, что я решил: проще быть ученым».

Вернувшись в Бристоль, Хинтон устроился ассистентом в исследовательский проект по изучению того, как дети осваивают язык, и постепенно в нем вновь проснулся интерес к науке. Друг-математик познакомил его с нейронными сетями. Сочетая в себе элементы математики, физиологии, психологии и даже философии, эта область казалась идеальным местом, способным объединить множество его интересов. Не хватало только плотницкого дела. Порасспросив знакомых, где можно поступить в аспирантуру по нейронным сетям, Хинтон отправился в Эдинбургский университет.

Одной из тем, которая интриговала Хинтона во время учебы в аспирантуре, было различие между обучением с учителем и обучением без учителя. Обучение с учителем — это то, чем занимается перцептрон: использование сигнала о правильных и неправильных ответах, чтобы научиться решать задачу. Обучение без учителя — это то, что делает правило Хебба: улавливание корреляций между происходящими в мире событиями без опоры на обучающий сигнал. Хинтон был убежден, что обучение без учителя играет огромную роль в работе человеческого мозга, и хотел разобраться в этом процессе.

Хинтон подал заявку на вакансии в Калифорнийском университете в Сан-Диего, открытые Румельхартом и его коллегами. Сначала его кандидатуру обошли вниманием, и он согласился на другую работу — в Мэрилендском университете. Но всего через несколько часов после того, как он позвонил, чтобы подтвердить свое согласие, ему сообщили, что его все-таки берут в Сан-Диего. Он ответил согласием и перезвонил в Мэриленд, чтобы отказаться от работы. Профессор из Мэриленда, предложивший ему это место, больше никогда с ним не разговаривал.

Калифорния стала для Хинтона откровением: «Она полностью отличалась от Англии тем, что здесь были очень открыты к новым идеям. Относились к ним гораздо менее критично, чем в Англии. Это было куда более плюралистическое общество в том смысле, что в Штатах люди допускали одновременное существование множества научных школ по какому-то вопросу. Знаете, если в MIT считали так, то в Беркли могли думать совершенно иначе. В Англии все было совсем не так. Англия была гораздо более тесным, закрытым сообществом, где существовало единственно верное мнение, а все остальное считалось чушью. Так что переезд в Калифорнию стал для меня настоящим освобождением».

Присутствие Хинтона подпитывало увлеченность Румельхарта нейронными сетями. Макклелланд и Хинтон организовали в Сан-Диего конференцию, которая собрала людей со схожими интересами. Румельхарт ушел в творческий отпуск в Стэнфорд, чтобы написать книгу о своей работе по символьному представлению семантической информации. Но у него ничего не выходило. Его мысли постоянно возвращались к нейронным сетям. «Я просто никак не мог делать ту работу, которую должен был делать».

Румельхарт предпочитал планировать свою исследовательскую работу, выделяя крупные блоки времени на определенную тему, — обычно он составлял пятилетние планы. Он решил посвятить следующие пять лет изучению нейронных сетей. Он собрал группу единомышленников — Хинтона, Макклелланда, а также Фрэнсиса Крика (лауреата Нобелевской премии за открытие структуры ДНК, который глубоко интересовался нейронауками) и группу аспирантов, ставших впоследствии самостоятельными и влиятельными исследователями. Следующие полгода они ежедневно встречались на несколько часов, погружаясь в детали и генерируя новые идеи.

Одна из этих идей принадлежала Хинтону: сделать шаг назад, отвлечься от размышлений о самих нейронах и проанализировать эти сети просто как математические системы. Макклелланд так описывал этот момент:

Я помню ту встречу, на которой Джефф сказал нам: «Послушайте, все думают о правилах обучения в нейронных сетях, фантазируя о том, что пре- и постсинаптический нейроны могли бы делать вместе, чтобы это привело к какому-то хорошему результату. Но так эту проблему не решить. Нужно понять, как взять градиент от того, чего именно вы хотите достичь, и пусть именно он подсказывает вам, как нужно изменить веса».

Хинтон предлагал настраивать веса нейронной сети с помощью классического алгоритма оптимизации, известного как градиентный спуск.

Если слово «градиент» вызывает у вас травмирующие воспоминания о занятиях по математическому анализу, не волнуйтесь — ключевые идеи можно понять и с минимальным знанием математики. Для любителей матанализа я изложил все леденящие душу подробности этого и следующего разделов в примечаниях в конце книги.

Предложение Хинтона было простым. Если у нас есть способ измерить, насколько хорошо нейронная сеть справляется с задачей, мы можем корректировать ее веса в том направлении, которое улучшает результат. Математически мы выражаем общую величину совершаемой нейросетью ошибки как функцию от весов сети. С изменением этих весов меняется и ошибка. На рисунке 9.2 показана гипотетическая зависимость между ошибкой и одним-единственным весом нейронной сети. Если мы хотим уменьшить ошибку, нам нужно знать, как изменение веса влияет на ее величину. Если увеличение веса увеличивает ошибку, значит, вес нужно уменьшить. Если уменьшение веса увеличивает ошибку, значит, его нужно увеличить.

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

Итак, как нам узнать, к какому эффекту — увеличению или уменьшению ошибки — приведет изменение веса? Эту информацию дает градиент функции, связывающей ошибку с весами. Градиент — это наклон функции в конкретной точке: если градиент отрицательный, то функция убывает, а если положительный — возрастает. Таким образом, чтобы понять, как именно нужно изменить веса в нашей нейронной сети, нам требуется знать лишь градиент функции ошибки.

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

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

ошибка = (целевое значениеr активацияr)2

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

Вслед за своей работой над моделями чтения Макклелланд и Румельхарт начали исследовать другие функции активации. В частности, они сосредоточились на сигмоидальной функции, которая сохраняет идею о том, что активация элемента является результатом применения порога к входному сигналу, но сглаживает этот процесс, чтобы значение не менялось скачком (см. рисунок 9.3). Однако они всё еще не знали, как заставить эти сети обучаться, пока не придумали одну простую уловку. По словам Румельхарта: «Мы делали вид, что они линейные, вычисляли производные так, словно они были линейными, а затем обучали их».

Рисунок 9.3. Функции активации, используемые в скрытых элементах многослойных перцептронов. Пороговая функция, показанная слева, использовалась Розенблаттом, но её невозможно продифференцировать. Румельхарт сосредоточился на сигмоидальной функции активации, изображенной в центре, которая представляет собой сглаженный порог и является дифференцируемой. В современных глубоких нейронных сетях часто используется функция активации, основанная на выпрямлении линейного сигнала (rectified linear unit, или ReLU), показанная справа, поскольку она помогает предотвратить слишком сильное уменьшение градиентов при наличии множества слоев весов.

Уловки Румельхарта оказалось достаточно, чтобы решить эту проблему. Применение градиентного спуска к ошибке сети для конкретного веса — скажем, веса3r — приводит к следующему правилу обучения:

изменение веса3r = скорость обучения × (целевое значениеr активацияr) × активация3

Это может показаться знакомым. Если вы вернетесь к главе 7, то увидите, что на самом деле оно в точности совпадает с правилом обучения перцептрона Розенблатта. Разница лишь в том, что Розенблатт рассматривал только ассоциативные элементы с дискретными значениями активации, в то время как Румельхарт и его коллеги думали о нейронных сетях, в которых активации выражались вещественными числами.

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

(Пере)открытие обратного распространения ошибки

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

Румельхарт перечитывал Розенблатта, который очень четко сформулировал проблему. Мы знаем, как обучать веса последнего слоя многослойного перцептрона — те, что связывают скрытые элементы с выходом. Мы можем просто использовать ошибки на выходе для настройки этих весов. Трудность заключается в том, чтобы понять, как обучать веса на следующем, более глубоком слое. Для этих весов неясно, что именно следует использовать в качестве меры ошибки. Какое значение должно служить целевым для элементов, находящихся внутри сети? Розенблатт предложил решение этой проблемы: «обратное распространение» ошибки от выходных элементов к скрытым. Он разработал для этого эвристическую процедуру, формируя сигнал ошибки для каждого скрытого элемента на основе ошибок связанных с ним выходных элементов. Эта процедура работала на некоторых простых задачах, но была капризной. Румельхарт относился к этому подходу довольно критически: «У него была идея посылать сигналы ошибок обратно через слои, но у него не было строго обоснованного способа сделать это».

Вооружившись новым инструментом градиентного спуска и имея впереди несколько часов полета, Румельхарт решил вернуться к идее обратного распространения ошибки. Он сразу же подумал о том, чтобы применить тот же подход, который использовал при повторном выводе правила обучения для однослойных перцептронов: «Что ж, мы просто притворимся, будто она линейная, разберемся, как обучить ее, словно она линейная, а затем добавим эти сигмоиды. Таким образом мы сможем создать работающую систему».

И снова предположение о линейности позволило легко решить эту задачу. Расписав всё и продифференцировав, Румельхарт вывел простое правило обучения. Например, обновление веса13 (который идет от входного элемента 1 к скрытому элементу 3) будет выглядеть так:

изменение веса13 = скорость обучения × (целевое значениеr активацияr) × вес3r × активация1

что поразительно похоже на правило обучения для весов выходного слоя. Единственное отличие состоит в том, что ошибка, используемая для корректировки веса от элемента 1 к элементу 3, взвешивается по силе связи между элементом 3 и откликом. Этот вес имеет естественную интерпретацию как вклад, который элемент 3 внес в ошибку.

Вывод Румельхарта дал удивительно простой ответ на вопрос о том, как сформировать сигнал ошибки для предыдущих слоев сети: ответственность каждого элемента за ошибку всей системы в точности соответствовала степени его влияния на отклик. Идея Розенблатта об обратном распространении ошибок была абсолютно верной — он упустил лишь то, что величина ошибки, которая должна передаваться обратно на каждый элемент, определялась силой веса связи между этим элементом и откликом. С помощью Лейбница и математического анализа Румельхарт вывел элегантное решение: прогнозы передавались по сети вперед на основе весов между элементами, а сигналы ошибок шли в обратном направлении по тем же самым весам.

Румельхарт был в восторге. Получив базовое понимание на примере линейного случая, он вернул нелинейности и написал программный код. Первой задачей, которую он попытался решить, была функция «исключающее ИЛИ» (XOR). Всё заработало! Однако, несмотря на этот успех, он не был особо впечатлен: алгоритму потребовалась тысяча итераций, чтобы усвоить эту закономерность. Он подумал про себя: «Да уж, это довольно скверно».

Когда самолет приземлился, Румельхарт рассказал Хинтону о своих результатах. Хинтон тоже не пришел в восторг: «Не было никакой гарантии, что ты найдешь глобальный оптимум. Поскольку ты неизбежно застрянешь в локальных минимумах, исследовать это не имело особого смысла». Эта чувствительность к локальным минимумам — решениям, которые довольно хороши, но не являются лучшими, — была следствием использования градиентного спуска. Движение по градиенту приведет вас к какому-то минимуму, но обычно к тому, который находится близко к вашей стартовой точке, а не к действительно хорошему. (Это можно увидеть на рисунке 9.2, где алгоритм мог застрять, если бы он стартовал близко к меньшей впадине справа). Хинтон считал, что лучше найти алгоритм, гарантирующий нахождение хорошего решения.

В итоге Румельхарт сделал последнее, чего можно было ожидать от человека, только что открывшего алгоритм, который возродит интерес к искусственным нейронным сетям и в конечном счете приведет к череде громких прорывов в области ИИ: он положил его под сукно.

На годы.

Весь 1982 год Румельхарт посвятил работе над усвоением языка и конкуренцией между нейронами. В 1983 году он едва не выступил с докладом об обратном распространении ошибки, но затем передумал. В 1984 году он переписал код для обратного распространения ошибки и поделился им с другими исследователями. А затем, в 1985 году, он получил сообщение от Хинтона: «Помнишь тот твой алгоритм? Похоже, он действительно работает».

За прошедшие годы Хинтон успел стать профессором Университета Карнеги — Меллона. Он работал над другим подходом к обучению нейронных сетей, но для сравнения запрограммировал и обратное распространение ошибки. И был потрясен тем, насколько хорошо оно сработало.

В течение следующих нескольких месяцев Румельхарт и Хинтон использовали обратное распространение ошибки для обучения нейронных сетей решать одну задачу за другой. Они привлекли в команду Рона Уильямса, постдока. И описали свои результаты в статье, опубликованной в журнале Nature.

Как оказалось, Румельхарт был не первым, кто открыл метод обратного распространения ошибок через систему уравнений для их оптимизации с помощью градиентного спуска. Этим человеком был Сеппо Линнайнмаа, описавший его в своей магистерской диссертации в Финляндии в 1970 году. Он даже не был первым, кто предложил использовать этот метод для обучения многослойных перцептронов. Это сделал Пол Вербос в 1981 году. Но статья Румельхарта, Хинтона и Уильямса стала первой, продемонстрировавшей, на что действительно способен этот алгоритм. В результате новое поколение исследователей зажглось потенциалом нейронных сетей — как в качестве способа понять человеческий разум, так и в качестве инструмента для создания систем ИИ.

Установление связей

Пятилетний план Румельхарта превратился в пятнадцатилетний. Он и Макклелланд объединили работы своих коллег по нейронным сетям в двухтомник под названием Параллельная распределенная обработка (или сокращенно PDP). Это название подчеркивало отличие их подхода: нейронные сети выполняли вычисления параллельно, по мере того как информация проходила через множество элементов на каждом слое сети. Представления, формируемые этими сетями, также были распределены по этим элементам, в отличие от семантической сети, где каждый элемент представлял собой одно конкретное понятие.

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

Этот теоретический базис получил название коннекционизм — термин, который использовал Розенблатт, заявляя о приверженности своего подхода «эмпирической, или „коннекционистской“, позиции». В свою очередь, Розенблатт вдохновлялся бихевиористской идеей Эдварда Торндайка о том, что обучение основано на формировании связей между стимулами и реакциями. Однако новый коннекционизм — с его многослойными перцептронами — предлагал более глубокий взгляд на обучение. Теперь связи между стимулами и реакциями опосредовались представлениями, которые система могла обнаруживать самостоятельно в процессе изучения статистической структуры своей среды.

В течение следующих десяти лет, вдохновленные книгами по PDP, ученые использовали нейронные сети для объяснения самых разных аспектов человеческого познания. Например, нейросети предлагали удивительно ясное объяснение того, что представляют собой категории и как люди могут им обучаться. Если объекты предъявлялись нейросети как набор признаков или положение в психологическом пространстве, сеть могла научиться формировать новое представление этих объектов, а затем автоматически определять границы между различными категориями. Внутренние представления, формируемые этими моделями, давали подсказки о том, как усвоение категорий может изменить то, как люди представляют эти объекты — например, заставляя уделять больше внимания одним признакам и меньше другим, — а ход градиентного спуска позволял прогнозировать динамику человеческого обучения во времени.

Нейросети отлично справлялись со многими явлениями, которые вызывали трудности у подхода, основанного на правилах и символах. Описанная Элеанор Рош структура «семейного сходства» категорий легко воспроизводится нейронными сетями, в которых признаки сочетаются непрерывным образом, определяя градуированную степень принадлежности к категории. Представление информации в виде отображения одного пространства на другое дает естественный способ справляться с вариативностью наблюдаемых признаков объектов и даже позволяет делать новые обобщения путем интерполяции между уже известными фрагментами информации (см. рис. 9.4).

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

Рисунок 9.4. Примеры вариативности признаков и интерполяции. Как показано слева, нейронная сеть с двумя входными и двумя выходными элементами и линейной функцией активации была обучена предсказывать «кошку» (точку в пространстве активации выходных элементов) при звуке «мяу» (точке в пространстве активации входных элементов) и «собаку» при звуке «гав». Графики в центре показывают, что звуки, не совпадающие в точности с «мяу» или «гав», тем не менее приводят к похожим предсказаниям. Справа мы видим, что звук, находящийся где-то посередине между «мяу» и «гав», дает предсказание где-то посередине между кошкой и собакой — возможно, это лиса?

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

Дэвид Румельхарт с энтузиазмом включился во все эти новые исследовательские направления. В 1987 году он перешел в Стэнфордский университет, где занимался нейросетевым моделированием самых разных процессов — от понимания текстов до локализации звука совами. К сожалению, завершение его пятнадцатилетнего плана совпало с завершением его научной карьеры. У Румельхарта диагностировали болезнь Пика — редкое нейродегенеративное расстройство, приводящее к деменции, и в 1998 году он ушел из Стэнфорда. Он скончался в 2011 году, но его влияние на когнитивную науку продолжает жить. Один из его бывших студентов, Боб Глушко, учредил Премию Дэвида Э. Румельхарта за вклад в теоретические основы человеческого познания. Эта ежегодная награда является одной из самых престижных в когнитивистике, и ее лауреатами стали многие исследователи, чьи истории описаны в этой книге.

Другой путь к ИИ

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

Область машинного обучения зародилась примерно в то же время, что и нейронные сети. Идея сделать упор на обучение как на подход к созданию ИИ на самом деле была предложена Аланом Тьюрингом еще в 1950 году:

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

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

По мере того как росло значение нейронных сетей, машинное обучение тесно переплеталось с когнитивистикой и нейробиологией. Двумя яркими проявлениями этого процесса в конце 1980-х годов стали создание Конференции по системам обработки нейронной информации (NeurIPS) и запуск списка рассылки Connectionists. Со временем NeurIPS превратилась в главную научную конференцию по машинному обучению, а список Connectionists до сих пор остается оживленным форумом для дискуссий и самопиара, даже в эпоху социальной сети, ранее известной как Твиттер. Мое любимое письмо в рассылке Connectionists было отправлено Джеффом Хинтоном 27 января 2014 года в ответ на заявление одного из участников о том, что человеческий мозг — никудышный ориентир для создания разумных машин, поскольку эволюция так и не смогла изобрести другие удачные инженерные решения, например колесо. Хинтон, всегда любивший идти наперекор общепринятому мнению, ответил: «Вообще-то эволюция изобрела колесо с разделением времени. Чтобы передвигаться по неровной почве, оно должно быть шести футов в диаметре и обладать очень мягкой подвеской. Сделать его не слишком тяжелым и громоздким можно за счет поочередного использования двух небольших сегментов обода, каждый из которых соединен с осью „спицами“ (работающими на сжатие, а не на растяжение), способными легко менять свою длину. Поочередная смена спиц не так энергоэффективна, как вращение колеса, зато решает проблему снабжения обода питательными веществами».

Взаимодействие между специалистами по машинному обучению и нейробиологами также привело к созданию новых типов архитектур нейронных сетей. Одной из наиболее влиятельных стала сверточная нейронная сеть, разработанная для более эффективного обучения на изображениях. Простейший способ построить нейросеть для распознавания содержимого картинки — связать каждый пиксель изображения с отдельным входным элементом, а каждую возможную метку класса — с выходным элементом, а затем обучить сеть подбирать веса связей, преобразующие пиксели в метки. Каждый входной элемент получает числовое значение, отражающее свойства конкретного пикселя (например, для черно-белого изображения — степень его яркости). Однако такой подход упускает важную особенность изображений объектов: если у вас есть снимок собаки и вы сдвинете собаку на один пиксель влево, это все равно будет снимок собаки. Но для нейронной сети это совершенно другое изображение, поскольку изменятся значения, полученные каждым входным элементом. Метка изображения объекта не должна меняться при перемещении объекта по кадру — выражаясь математическим языком, она инвариантна относительно сдвига объекта.

Сверточные нейронные сети обеспечивают инвариантность к сдвигу за счет особого способа соединения входных элементов сети со скрытыми. Первый слой скрытых элементов представляет собой набор простых паттернов, которые могут присутствовать на изображении. Эти паттерны выражаются в наборе весов, сопоставленных с квадратным фрагментом пикселей. Например, паттерн может определять наличие глаза или носа на конкретном участке пикселей. Для каждого паттерна и каждого фрагмента пикселей на изображении существует один скрытый элемент, поэтому, когда значения пикселей умножаются на веса для вычисления активации каждого скрытого элемента, эти скрытые элементы показывают, какие именно фрагменты содержат те или иные паттерны. Следующий слой скрытых элементов агрегирует эту информацию по разным участкам: его элементы указывают на то, насколько выражен тот или иной паттерн в более крупной области изображения. Следующий же слой ищет закономерности уже в активациях этих скрытых элементов. Повторение этого процесса позволяет сети постепенно переходить к распознаванию более крупных паттернов — например, взаимного расположения глаз и носа — причем так, что этот процесс не зависит от того, в каком именно месте изображения эти паттерны находятся.

Сверточные нейронные сети были частично вдохновлены открытиями в области нейробиологии. В 1950-х годах нейроанатомы Дэвид Хьюбел и Торстен Визель показали, что нейроны в зрительной коре кошки реагируют на простые паттерны в определенных областях поля зрения, тогда как более сложные паттерны распознаются на более широких участках нейронами, расположенными глубже в зрительной системе. Эта работа также вдохновила Фрэнка Розенблатта, который предложил соединять перцептроны с помощью «шаблонов», которые воспроизводились по всему изображению практически так же, как в сверточных нейронных сетях. Но у такой архитектуры было еще одно важное достоинство: вместо того чтобы каждый скрытый элемент имел уникальный вес связи с каждым входным элементом, эти веса были связанными (общими), так что одно и то же число определяло сразу множество весов. Это означало, что для обучения требовалось настраивать гораздо меньше числовых параметров, а значит, и данных нужно было не так много. Подобная повышенная эффективность позволила использовать машинное обучение для решения сложных практических задач. В конце 1980-х и начале 1990-х годов Ян Лекун и его коллеги из Bell Labs разработали сверточные нейронные сети для распознавания рукописных цифр, которые в итоге стали применяться для автоматизации чтения почтовых индексов на письмах и номеров на банковских чеках.

Рисунок 9.5: Объем электронных писем в килобайтах (то есть в тысячах символов), отправленных в список рассылки Connectionists с 1988 по 2023 год.

Несмотря на эти успехи, интерес к нейронным сетям в машинном обучении то возрастал, то угасал. Исследователи начали понимать, что эти методы работают отчасти потому, что представляют собой просто очень гибкие статистические модели, и стали изучать, как другие идеи из статистики могут улучшить машинное обучение. Другие ученые искали методы обучения с более прочным теоретическим обоснованием; они вернулись к однослойным перцептронам и пытались сделать их более выразительными, разрабатывая сложные способы расширения признаков, которые использовались на входе этих моделей. Будучи сторонниками точных количественных методов, организаторы конференции NeurIPS любили подсчитывать, какие слова лучше всего предсказывали принятие или отклонение научных статей на конференции. В начале 2000-х годов, когда я только начал посещать NeurIPS, слова «нейронная» и «сеть» часто входили в десятку главных признаков отклонения статьи. Этот отход от нейросетей нашел отражение и в объеме переписки в списке Connectionists, как показано на рисунке 9.5.

Небольшая группа преданных своему делу исследователей продолжала работать над нейросетями. Одним из них был Джефф Хинтон, который заинтересовался вопросом о том, как создавать более глубокие сети — сети с бóльшим количеством скрытых слоев. В принципе, алгоритм обратного распространения ошибки можно было использовать с любым количеством скрытых слоев. На практике же это работало не слишком хорошо: информация об ошибке затухала по мере ее передачи от слоя к слою в обратном направлении. Хинтон искал различные уловки, которые можно было бы использовать для обучения более глубоких нейросетей. Один из таких приемов заключался в возвращении к его аспирантскому интересу к обучению без учителя: сеть строилась по одному слою за раз, пытаясь обнаружить закономерности в активациях нижележащего слоя, а затем выходные данные сети окончательно настраивались с помощью обучения с учителем. Это сработало достаточно хорошо, чтобы продемонстрировать потенциал глубоких нейросетей, однако для окончательного решения проблемы требовались два серьезных прорыва.

Первый прорыв произошел благодаря увеличению объема данных. И, как ни удивительно, основу для этого прорыва заложил Джордж Миллер, которому во многом принадлежит заслуга в совершении революции в машинном обучении — точно так же, как ранее в когнитивистике. В 1979 году Миллер переехал в Принстон, где основал лабораторию когнитивных исследований. Одним из главных проектов лаборатории стало создание WordNet — масштабный труд по реконструкции части семантической структуры английского языка. WordNet представляет собой огромную семантическую сеть, содержащую более ста тысяч слов, связанных друг с другом такими отношениями, как совпадение значений (например, «plank» и «board»), отношение частного к общему (например, «dog» и «canine») или выделение части из целого (например, «foot» и «leg»).

В 2006 году Фей-Фей Ли размышляла над тем, как создать новый набор данных для развития компьютерного зрения. В то время как многие другие исследователи были сосредоточены на новых алгоритмах, она видела в данных способ двигать вперед всю область целиком. Ли приехала в США из Китая в возрасте пятнадцати лет; она училась в бакалавриате Принстона, а по выходным работала в химчистке своих родителей. Она изучала компьютерные науки и в итоге защитила докторскую диссертацию по компьютерному зрению в Калтехе. Оттуда она перешла на профессорскую должность в Иллинойсский университет в Урбане-Шампейне. Во время одного из визитов в Принстон она встретила Кристиану Феллбаум, лингвистку, которая была одним из партнеров Джорджа Миллера по созданию WordNet. Две части головоломки сошлись: Ли могла использовать структуру WordNet в качестве основы для своего набора изображений. Ли переехала в Принстон и в течение следующих нескольких лет вместе со своими аспирантами, включая Цзя Дэна и Ольгу Русаковскую (которые впоследствии и сами стали профессорами в Принстоне), работала над созданием колоссального набора данных, содержащего более четырнадцати миллионов изображений и двадцать одну тысячу категорий. Этот датасет открывал невероятные возможности и одновременно бросал серьезный вызов: он содержал гораздо больше данных, чем когда-либо использовалось для создания систем компьютерного зрения, но и требовал от такой системы научиться распознавать гораздо больше категорий изображений.

Второй прорыв произошел благодаря ускорению компьютеров. Если Розенблатт в свое время построил физический перцептрон, то теперь аппаратное обеспечение компьютеров общего назначения стало более быстрым, распространенным и простым в использовании, а значит, большинство исследований в области нейросетей проводилось без создания специализированных машин. Однако в 2006 году Рик Шелиски, бывший студент Хинтона, подсказал ему, что нейросети должны работать гораздо быстрее на специализированном оборудовании, разработанном для работы с графикой.

Архитектура цифровых компьютеров фон Неймана привела к созданию центрального процессора (CPU), который производит вычисления и интерпретирует символы. Компьютеры, которые имел в виду фон Нейман, не должны были выполнять ресурсоемкие задачи по формированию изображений для вывода на монитор, но по мере того, как графика становилась все более важной частью взаимодействия человека с компьютером, эта нагрузка была переложена на другую аппаратную часть — графический процессор (GPU). Долгое время GPU оставался менее известным родственником CPU: CPU выполнял всю «престижную» работу — обработку текстов, просмотр веб-страниц и сортировку электронной почты, в то время как GPU просто выводил результаты всего этого на экран. Однако для того, чтобы рассчитать, что и где именно отобразить на экране, GPU был оптимизирован под строго определенный набор вычислений: умножение и сложение числовых матриц. Расчет активации группы скрытых нейронов или обратное распространение их ошибок требовали абсолютно тех же самых вычислений.

В 2009 году Влад Мних, аспирант лаборатории Хинтона, написал программное обеспечение, которое позволяло легко запускать нейросети на GPU. Затем двое других студентов использовали это ПО для улучшения распознавания речи. Их нейросеть, благодаря множеству остроумных инженерных решений со стороны Google, была использована для кардинального улучшения распознавания речи на телефонах Android в 2012 году. Однако заставить несколько графических процессоров работать вместе было непросто, а добиться от них действительно эффективного запуска сверточных нейронных сетей представляло собой чрезвычайно сложную задачу программирования. В 2012 году Алекс Крижевский, еще один аспирант из лаборатории Хинтона, решил обе эти проблемы. Используя специально собранный компьютер с двумя топовыми игровыми видеокартами, установленный прямо у него в спальне, Крижевский обучил сверточную нейросеть с семью скрытыми слоями на подмножестве датасета ImageNet, состоящем из 1,2 миллиона изображений и тысячи категорий. На это ушло шесть дней.

Нейросеть Крижевского — названная в его честь AlexNet — камня на камне не оставила от всех остальных методов компьютерного зрения, применявшихся к ImageNet. Лучший результат, когда-либо достигнутый в классификации «top-5» (то есть когда для изображения предлагается пять вариантов подписей, и классификация считается верной, если правильным оказывается хотя бы один из них), составлял чуть более 25 процентов ошибок. У AlexNet показатель ошибок составил 17 процентов, а после нескольких дополнительных доработок снизился до 15,3 процента. Я знал нескольких исследователей в области компьютерного зрения, которые не поверили этим результатам и, чтобы убедиться, были вынуждены воспроизвести их самостоятельно. Когда эта работа была представлена на конференции NeurIPS, она собрала огромную толпу, состоявшую в равной степени из энтузиастов и скептиков.

AlexNet была обучена методом обратного распространения ошибки и обладала рядом дополнительных особенностей, которые позволили применить этот алгоритм к глубокой нейросети. Одной из таких особенностей была другая функция активации — линейный выпрямитель, или ReLU (см. рисунок 9.3), — которая помогала предотвратить затухание сигналов ошибки при их обратном прохождении через сеть. Помимо того колоссального влияния, которое она оказала на компьютерное зрение (исследователи в этой области проведут следующие десять лет, изучая различные варианты сверточных нейросетей), эта работа доказала, что подобным образом можно обучать и более глубокие нейронные сети. Интерес к нейросетям вспыхнул с новой силой (см. всплеск активности коннекционистов начиная с 2012 года на рисунке 9.5), и исследователи разработали новые мощные инструменты для поддержки разработки глубоких нейросетей, включая программное обеспечение, автоматически вычисляющее производные, необходимые для применения обратного распространения ошибки. Теперь исследование новых архитектур сводилось лишь к заданию конфигурации скрытых нейронов, весов и функций активации — программа сама понимала, как обучать веса.

AlexNet ознаменовала начало смены парадигмы в исследованиях искусственного интеллекта — как с точки зрения того, чем именно занимались люди, так и с точки зрения того, где они это делали. В течение следующих нескольких лет события развивались стремительно: Хинтон, Крижевский и третий автор статьи об AlexNet, Илья Суцкевер, были наняты компанией Google. Небольшая компания DeepMind использовала сверточные нейросети в качестве ключевого компонента демонстрационной системы ИИ, играющей в игры Atari на сверхчеловеческом уровне. Марк Цукерберг и Илон Маск лично приехали на NeurIPS и принялись обхаживать других специалистов по нейросетям. А потребность в данных и вычислительных мощностях только росла. Нейросети остаются технологией обучения отображениям на основе данных, и чем сложнее отображение, тем больше данных требуется. AlexNet показала, какую огромную роль могут сыграть большие объемы данных и вычислительных мощностей, и компании начали осознавать, что инвестиции в данные и вычисления напрямую влияют на решение сложнейших задач в области ИИ.

Эти новые модели имели важные последствия и для когнитивистики. Например, двое исследователей из моей лаборатории, Джош Петерсон и Джош Эбботт, показали, что представления изображений, формируемые в скрытых слоях сверточных нейросетей, можно использовать для моделирования человеческих суждений о сходстве. Затем эти представления можно использовать в качестве компонентов более сложных когнитивных моделей, применимых непосредственно к изображениям, а не к простым типам стимулов, которые использовали Брунер, Гуднау и Остин в 1950-х годах и авторы многих последующих исследований человеческого обучения. Но, как и в случае с подходом на основе правил и символов, одни из самых впечатляющих результатов нейросетей были получены в области языка — темы, к которой мы перейдем далее.

Предыдущая главаГлава 11 из 34Следующая глава