Мы недавно видели, как многому могут научиться нейронные сети, но последний пример очень странный. Google удалось научить нейронную сеть быть компьютером, просто показывая ей программы и результаты, которые они дают.
Команда Google по искусственному интеллекту дала нам повод подумать. Большинство нейронных сетей относятся к типу с прямой связью, и для них характерно наличие соединений между уровнями, которые продвигают данные к выходу. То есть нет обратных связей и, следовательно, нет обратной связи. Без обратной связи нейронные сети не имеют «памяти» и всегда дают один и тот же результат, когда представлены с одним и тем же входом — они являются машинами для обучения функциям.
Сети, которые имеют обратные соединения, называются рекуррентными нейронными сетями (RNN), и в прошлом они считались более мощными, но трудными для обучения.
Были изобретены некоторые типы RNN, которые выполняют определенные задачи и их легче тренировать. В качестве примера можно привести странно названную Long-Short Term Memory (LSTM), которая действует как стробируемый элемент памяти. Однако LSTM недостаточно хорошо понимают роли, которые они могут играть в сочетании с другими сетевыми компонентами и правилами обучения.
В качестве эксперимента по исследованию LSTM Войцех Заремба и Илья Суцкевер решили посмотреть, насколько хорошо LSTM может научиться выполнять программу Python. Конечно, им пришлось ограничить тип программы, чтобы LSTM могла работать. Используемые программы можно оценивать за линейное время и использовать сложение, вычитание, умножение, присвоение переменных, операторы if и циклы for, но не удвоение циклов for. Каждая программа заканчивается печатью, которая выводит одно число.
Сложность программ характеризовалась двумя числами: их длиной, т. Е. Количеством символов, используемых в числовых значениях; и вложение глубины дерева синтаксического анализа.
Типичные программы
Ввод: j = 8584 для x в диапазоне (8): j + = 920 b = (1500 + j) print ((b + 7567)) Цель: 25011
и
Ввод: i = 8827 c = (i-5347) print ((c + 8704) if 2641 <8500 else 5308) Цель: 1218
Нейронной сети дается программам по одному символу за раз и выводит по одному символу за раз. Используемый LSTM имеет 400 единиц на слой.
Сначала сети было трудно обучить, и, чтобы попытаться упростить задачу, было опробовано обучение по учебной программе. Это основано на наблюдении, что биологические ученики делают это быстрее, если им предлагают простые примеры, а затем возрастает сложность. Идея состоит в том, что легче справляться со сложными случаями, когда вы знаете, как работают простые. Однако в случае обучения выполнению программ простое обучение по учебной программе было на самом деле хуже, чем случайное представление.
Лучше всего сработала смешанная стратегия градуированных упражнений с некоторыми сложными проблемами. Предлагаемая причина этого заключается в том, что при изучении простых случаев LSTM использует всю свою емкость памяти, хотя в этом нет необходимости. Когда представлены более сложные примеры, изменение структуры, необходимое для их приспособления, слишком велико. Комбинированный подход позволяет сети изучать простые случаи, сохраняя при этом стресс, показывая более сложные случаи.
Что удивительно, так это то, что после демонстрации обучающего набора сеть могла выдать результат программы, которую она никогда не видела. Вы представляете его с текстом программы, и он выводит то, что программа будет при запуске.
Конечно, точность снижалась по мере увеличения длины и вложенности - факт, что он смог выделить структуру из символа путем представления символа в достаточной степени, чтобы предсказать результат невидимой программы, достаточно примечателен.
Исследователи признают, что не знают, как сеть справляется с этим. Вы можете подумать, что это всего лишь вопрос памяти. Сеть может просто хранить входы и выходы, и когда она снова увидит вход, будет выдавать тот же результат. Простая память не учитывает наблюдаемое обобщение. Сеть предсказывала результаты для программ, которые не были показаны. Это способность к обобщению, которая предполагает, что некоторая часть структуры программы, обозначенная ее текстом, используется для прогнозирования результата.
Что особенно странно, так это то, что они сообщают об "интересных" ошибках, например, о том, что они отключились на одну. Они предполагают, что сеть может изучать приблизительные алгоритмы для таких вещей, как сложение. Вместо того, чтобы изучать сложение по цифрам с полным переносом, возможно, изучение таблицы сложения только для пар цифр и ее использование для сложения многозначных чисел без переноса дало бы хорошую, но не идеальную точность.
Я не думаю, что нейронная сеть станет основой вашего следующего ЦП, но изучение способов извлечения алгоритмической информации из текста - хороший способ изучить, как сети могут «понимать».