Обретение памяти

В Deepmind придумали гибрид нейросети и машины Тюринга

Исследователи Google Deepmind представили систему искусственного интеллекта нового типа, так называемый дифференцируемый нейронный компьютер, DNC. Система сочетает обучаемость нейросетей с дедуктивными способностями традиционного ИИ. Ее описание опубликовано в журнале Nature, новой работе посвящена редакционная статья в этом же выпуске журнала, краткий пересказ работы можно прочитать в блоге Deepmind.

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

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

Относительно недавно появился более сложный тип нейросетей, в котором этот недостаток был устранен — так называемые рекуррентные нейросети. В них не только хранится информация о состоянии обученности (матрица весов нейронов), но и информация о предыдущем состоянии самих нейронов. В результате на ответ такой нейросети влияют уже не только входные данные и матрица весов, но и ее ближайшая история. Простейшая нейросеть такого типа может, например, «умно» предсказывать следующий символ в тексте: обучив нейросеть на данных словаря, можно будет на символ «l» получить ответ «l» в том случае, если предыдущими символами были «h», «e» и «l», но уже другой ответ — «o», если предыдущими были «h», «e», «l» и снова «l» (получится слово «hello», см. врез).

Рекуррентные нейросети очень хорошо показали себя при генерации музыки или текста «в стиле» некоторого автора, на корпусе которого проходило обучение, в системах машинного перевода* и, недавно, в системах перевода текста в речь и так далее (например, здесь).

Формально говоря, даже простейшие рекуррентные нейросети являются Тюринг-полными, однако их важный недостаток заключается в неявном характере использования памяти. Если в машине Тюринга память и вычислитель разделены (что позволяет по-разному менять их архитектуру), то в рекуррентных нейросетях, даже в самых совершенных из них (LSTM), размерность и характер обращения с памятью определяется архитектурой самой нейросети.

Чтобы исправить этот врожденный порок LSTM-сетей, ученые из DeepMind (все они вошли в коллектив авторов новой статьи) недавно предложили архитектуру так называемой нейронной машины Тюринга (Neural Turing Machines). В ней вычислитель и память разделены, как в обычных машинах Тьюринга, но при этом система сохраняет свойства дифференцируемой функции, а значит, ее можно обучать на примерах (с помощью метода обратного распространения ошибки), а не программировать в явном виде. Новая система, дифференцируемый нейронный компьютер, или DNC, базируется на той же архитектуре, однако в нем общение вычислителя с памятью организовано существенно более гибким образом: в ней реализуются концепции не только запоминания, но и контекстного узнавания и забывания (сравнению двух систем посвящен отдельный раздел новой статьи).

Упрощенно, работу DNC можно представить следующим образом. Система состоит из вычислителя, в роли которой может быть практически любая рекуррентная нейросеть, и памяти. У вычислителя есть специальные модули для обращения к памяти, а над памятью есть особая «надстройка» в виде матрицы, хранящей историю ее использования (подробнее ниже). Память представляет собой матрицу размерности N×M, где строки Ni являются основными ячейками, куда записываются данные (в виде векторов размерности M).

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

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

Во-вторых, внимание к разным частям памяти может определяться историей ее использования. Эта история хранится в матрице размерности N×N, где каждой ячейке N(i,j) соответствует близкий к 1 балл, если после записи в строку i следовала запись в строку j (или ноль, если нет). В такой «матрице метапамяти» заключается одно из принципиальных отличий новой системы DNC от старой NTM. Она позволяет системе последовательно «вспоминать» блоки данных, если они часто встречаются в контексте друг друга.

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

Полученную систему ученые испытали в нескольких тестовых задачах. Первой из них стал недавно разработанный исследователями из Facebook стандартизированный тест на понимание текста — bAbI. В нем системе ИИ дают небольшой текст, где действуют какие-то герои, а затем нужно ответить на вопрос по тексту («Джон пошел в сад, Мери взяла бутылку молока, Джон вернулся в дом. Вопрос: Где Джон?»). 

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

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

После обучения на миллионе примеров компьютер DNC научился отвечать на вопросы по схеме метро с точность в 98,8 процентов, при этом система на базе LSTM почти совсем не справилась с задачей — она давала только 37 процентов правильных ответов (цифры приведены для самой простой задачи вроде «где я окажусь, если проеду столько-то станций по такой-то линии, пересяду там-то и проеду еще столько-то станций». Задача о кратчайшем расстоянии между двумя станциями оказалось более сложной, но с ней DNC тоже справилась). 

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

График скорости решения задачи SHRDLU системой DNC (зеленые) и LSTM (синие).

Третьим тестом стал немного упрощенный «классический» тест SHRDLU, в котором нужно передвигать некие виртуальные предметы по вируальному пространству в соответствии с определенно заданным финальным результатом, который нужно получить в конце. Система DNC снова получала описание текущего состояния виртуального пространства в виде формализованных предложений, затем таким же образом перед ней ставили задачу и она отвечала последовательным текстом о том, как надо двигать предметы. Как и в остальных тестах, DNC показала себя существенно эффективнее систем LSTM, что хорошо видно из графиков скорости обучения.

***

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

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

Именно здесь авторам статьи пригодились готовые алгоритмы по решению задач на графе — как раз для получения миллионов правильных пар вопросов и ответов. Нет сомнения, что простота создания обучающей выборки определила характер тестов, которыми проверяли новую систему. Однако важно помнить, что сама архитектура DNC с простотой этих тестов никак не связана. Ведь даже самые примитивные реккурентные нейросети могут не только переводить тексты и описывать изображения, но и писать альбомы за Егора Летова или генерировать неотличимые от Шопена этюды (на слух автора, конечно). Что уж говорить о таких продвинутых, действительно «умных» системах, как DNC.

Александр Ершов