Как обучить нейросеть понимать смысл текста программы?

17 октября 2014 на сайте электронных препринтов arXiv.org была опубликована статья с описанием результатов обучения нейронной сети пониманию текстов программ. Мы попросили прокомментировать это исследование специалиста по машинному обучению, кандидата физико-математических наук Дмитрия Ветрова. В своей недавней статье Learning to Execute, одним из авторов которой является Илья Сутскевер — соавтор революционной статьи об успешном применении сверточных нейронных сетей к задаче классификации изображений, опубликованной в 2013 году, — сотрудники корпорации Google исследовали вопрос, насколько современные нейронные сети в состоянии понимать текст программы, написанной на некотором, весьма упрощенном языке программирования. Сам выбор исследования весьма характерен. Google, сманивший к себе значительную часть ведущих мировых специалистов по глубинному обучению нейросетей, явно пытается нащупать границы области применимости методов глубинного обучения по большим объемам данных. Нейронные сети успешно, если не сказать блестяще, показали себя в ряде задач, традиционно считавшихся трудными для алгоритмов машинного обучения (понимание изображений, распознавание речи, обработка текстов), приблизившись по возможностям к человеческому мозгу. Все эти задачи связаны с анализом плохо формализуемой информации, в которой человек традиционно ориентируется лучше компьютера. Возникает естественное желание проверить, а насколько нейронные сети способы решать задачи из противоположного спектра и понимать четкие формальные инструкции программного кода. На первый взгляд такая задача кажется даже более сложной для нейронной сети, и вот почему.

В традиционных задачах машинного обучения предполагается, что небольшие изменения входных данных должны приводить к небольшим изменениям прогноза (так называемая гипотеза компактности). Именно это предположение лежит в основе современных моделей обучения и их способности обобщить результаты обучения с известной обучающей выборки объектов на произвольные данные, которые в каком-то смысле близки к объектам обучающей выборки. Текст программы, как и положено формальному описанию алгоритма на синтетическом языке программирования, содержит минимальную избыточность, поэтому небольшие изменения в нем, например изменение знака «плюс» на знак «минус», будут приводить к сильным изменениям выхода программы. Стоит также отметить, что с точки зрения нейронной сети текст программы — это просто набор символов, не имеющих априори никакого смысла. Тем интереснее посмотреть, можно ли научить достаточно гибкую нейросеть пониманию смысла программы при подаче достаточно большой обучающей выборки. Авторы статьи использовали один из видов так называемых рекуррентных нейросетей с Long-Short Term Memory. Эта архитектура хорошо зарекомендовала себя при анализе и генерации текстов на естественных языках. Она представляет собой двуслойную динамическую нейросеть с блоком памяти (внутренним набором переменных, значения которых влияют на поведение сети в конкретный момент времени). Такая нейронная сеть просматривает текст программы символ за символом, анализируя не только текущий наблюдаемый символ, но и принимая во внимание выходы нейронов с разных слоев в предыдущий момент времени (короткая память), а также значения переменных в блоке памяти (длинная память). Целью обучения является минимизация ошибки между результатом исполнения кода программы и выходом нейронной сети, просмотревшей текст программы.

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

Результаты экспериментов, приведенные в статье, позволяют сделать вывод, что в ряде случаев нейронные сети действительно научились выдавать тот же ответ, что и настоящая программа. Тем не менее стоит отметить, что сколько-нибудь надежные результаты достигнуты на простейших текстах программ с минимальной длиной и сложностью. Качество быстро падает при незначительном усложнении/удлинении текста программы.

Вряд ли достигнутые результаты можно считать успешным знаком того, что нейросети научились правильно опознавать и сопоставлять алгоритмические блоки. Скорее речь идет о выучивании отдельных паттернов текстов программ без понимания их смысла. Такой подход хорошо работает при обработке данных, обладающих значительной избыточностью, например изображений или текстов на естественном языке, но плохо применим для анализа формальных инструкций. Тем не менее в статье есть и ряд здравых идей. Во-первых, очередной раз продемонстрировано, что при неограниченном объеме обучающей информации (например, если у нас есть генератор для получения таковой) нейронные сети способны улавливать фантастически сложные скрытые закономерности в данных. Во-вторых, авторами предложен ряд эвристических процедур, которые позволяют улучшить качество обучения в условиях нетривиальных зависимостей, скрытых в данных, и возможности варьировать их сложность в ходе обучения — так называемая комбинированная процедура обучения. Этот важный вывод, без сомнения, поможет в дальнейших исследованиях в области глубинного обучения. В заключение стоит упомянуть еще одну нерадостную деталь. Данная статья представляет собой очередной типичный пример научных статей от Google. Ряд деталей реализации и планирования эксперимента в статье, как и во многих других статьях сотрудников этой корпорации, опущен. Описание нетривиальной математической модели занимает 12 строчек и одну формулу. Приходится с сожалением констатировать, что исследователи Google, пользуясь доступом к практически неограниченным вычислительным возможностям, не утруждают себя тем, чтобы описание их действительно очень интересных и нетривиальных исследований допускало воспроизводимость независимыми научными группами. Будет печально, если такой стиль написания серьезных научных работ станет доминирующим в области машинного обучения в ближайшие годы.

Полный текст статьи читайте на Postnauka.ru