Distill: внимание и дополненные рекуррентные сети
Полный перевод статьи Криса Олы и Шана Картера (Distill, 2016): нейронная машина Тьюринга, интерфейсы внимания, адаптивное время вычислений и нейронный программист — четыре способа «дополнить» RNN, и все держатся на одном трюке, внимании.
Внимание и дополненные рекуррентные нейронные сети
Заголовок раздела «Внимание и дополненные рекуррентные нейронные сети»Рекуррентные нейронные сети (рекуррентная нейросетьрекуррентная нейросетьEN recurrent neural network (RNN)) — один из столпов глубокого обучения. Они позволяют нейросетям работать с последовательностями: текстом, звуком, видео. С их помощью можно свернуть последовательность в высокоуровневое понимание, разметить её и даже сгенерировать новую последовательность с нуля!
Рисунок: цепочка одинаковых блоков RNN; каждый получает очередной элемент входа и состояние предыдущего блока.
Базовая конструкция RNN плохо справляется с длинными последовательностями, но особый вариант — сети «долгой краткосрочной памяти» (LSTMLSTM (долгая краткосрочная память)EN long short-term memory (LSTM)RNN с ячейкой памяти c_t и тремя гейтами (Hochreiter, Schmidhuber, 1997). Ячейка обновляется сложением c_t = f·c_{t−1} + i·g — «остаточная связь во времени».; см. наш конспект эссе Олы о LSTM) — справляется и с ними. Такие модели оказались очень мощными: они добились замечательных результатов во многих задачах, включая перевод, распознавание речи и подписи к изображениям. В результате за последние несколько лет рекуррентные сети стали очень распространены.
Параллельно появляется всё больше попыток дополнить RNN новыми свойствами. Особенно интересными выглядят четыре направления:
- Нейронные машины Тьюринга (Neural Turing Machines) имеют внешнюю память, из которой можно читать и в которую можно писать.
- Интерфейсы внимания (Attentional Interfaces) позволяют RNN сосредоточиться на частях своего входа.
- Адаптивное время вычислений (Adaptive Computation Time) позволяет тратить на каждый шаг разный объём вычислений.
- Нейронные программисты (Neural Programmers) умеют вызывать функции и строят программы по ходу работы.
По отдельности каждая из этих техник — мощное расширение RNN, но по-настоящему поразительно то, что их можно комбинировать: похоже, это просто точки в более широком пространстве. Более того, все они работают благодаря одному и тому же базовому трюку — так называемому вниманию (механизм вниманиямеханизм вниманияEN attention).
Мы предполагаем, что эти «дополненные RNN» сыграют важную роль в расширении возможностей глубокого обучения в ближайшие годы.
Нейронные машины Тьюринга
Заголовок раздела «Нейронные машины Тьюринга»Нейронные машины Тьюринга (NTM; Graves и др., 2014) соединяют RNN с внешним банком памяти. Поскольку векторы — естественный язык нейросетей, память представляет собой массив векторов.
Рисунок: RNN сверху, под ней — ряд ячеек памяти, каждая ячейка хранит вектор; на каждом шаге сеть читает из памяти и пишет в неё.
Но как работают чтение и запись? Сложность в том, что мы хотим сделать их дифференцируемыми. В частности, нужно, чтобы они были дифференцируемы по адресу, откуда мы читаем или куда пишем, — тогда сеть сможет научиться, где читать и где писать. Это непросто, потому что адреса памяти, кажется, по самой своей природе дискретны. NTM находят очень изящное решение: на каждом шаге они читают и пишут везде, просто в разной степени.
Для примера сосредоточимся на чтении. Вместо того чтобы указать одну ячейку, RNN выдаёт «распределение внимания»: оно описывает, насколько нам важна каждая позиция памяти. Тогда результат чтения — взвешенная сумма.
Рисунок: над ячейками памяти — столбики разной высоты (веса внимания ); результат чтения — сумма векторов памяти с этими весами.
Точно так же мы пишем везде сразу, в разной степени. Снова распределение внимания говорит, сколько мы пишем в каждую ячейку. Новое значение ячейки делается выпуклой комбинацией старого содержимого и записываемого значения, а положение между ними определяет вес внимания.
Рисунок: запись. Для каждой ячейки , где — записываемое значение, — вес внимания этой ячейки.
Прим. пер.: «выпуклая комбинация» здесь значит смесь двух векторов с неотрицательными весами, дающими в сумме 1. Если вес ячейки , то в ней окажется на 90 % новое значение и на 10 % старое; если , ячейка не изменится.
Но как NTM решают, на какие позиции памяти направить внимание? Они используют сочетание двух методов: внимание по содержимому (content-based attention) и внимание по положению (location-based attention). Внимание по содержимому позволяет NTM искать в памяти и сосредотачиваться на местах, которые совпадают с тем, что сеть ищет. Внимание по положению даёт относительное перемещение по памяти, и NTM может ходить по ней циклом.
Рисунок (подробная схема адресации): RNN выдаёт вектор-запрос; его сходство с каждой ячейкой даёт распределение внимания по содержимому; затем оно интерполируется с распределением прошлого шага; затем «свёртка сдвига» передвигает фокус на соседние позиции; последний шаг «заостряет» распределение. Итог — веса, с которыми сеть читает или пишет.
Умение читать и писать позволяет NTM выполнять многие простые алгоритмы, прежде недоступные нейросетям. Например, они могут научиться записать длинную последовательность в память, а затем пройти по ней циклом, повторяя её снова и снова. Пока они это делают, можно смотреть, где они читают и пишут, и лучше понять, что происходит:
Рисунок: две «тепловые карты» — места записи и места чтения NTM по шагам времени. При записи фокус идёт по диагонали (ячейка за ячейкой), при чтении та же диагональ повторяется несколько раз. Рисунок основан на эксперименте Repeat Copy («повторное копирование») из статьи о NTM.
Ещё они могут научиться изображать таблицу поиска (lookup table) или даже сортировать числа (хотя немного жульничают)! С другой стороны, многие базовые вещи им всё ещё не даются: например, сложение и умножение чисел.
После оригинальной статьи о NTM вышло немало интересных работ в похожем направлении. Нейронный GPU (Neural GPU; Kaiser и Sutskever, 2015) преодолевает неспособность NTM складывать и умножать числа. Заремба и Суцкевер (2015) обучают NTM обучением с подкреплением (обучение с подкреплениемобучение с подкреплениемEN reinforcement learning (RL)) вместо дифференцируемых чтения и записи оригинала. Нейронные машины с произвольным доступом (Neural Random Access Machines; Kurach и др., 2015) работают на указателях. Несколько статей исследуют дифференцируемые структуры данных — стеки и очереди (Grefenstette и др., 2015; Joulin и Mikolov, 2015). А сети памяти (memory networks; Weston и др., 2014; Kumar и др., 2015) — ещё один подход к похожим задачам.
В каком-то объективном смысле многие задачи, которые решают эти модели, — например, научиться складывать числа, — вовсе не трудные. Традиционное сообщество синтеза программ расправилось бы с ними на раз. Но нейросети умеют многое другое, и модели вроде нейронной машины Тьюринга, похоже, сняли очень глубокое ограничение на их возможности.
У этих моделей есть ряд открытых реализаций. Нейронная машина Тьюринга: Тэхун Ким (TensorFlow), Шон Тан (Theano), Fumin (Go), Кай Шэн Тай (Torch) и Snips (Lasagne). Код к статье о Neural GPU открыт и лежит в репозитории TensorFlow Models. Открытые реализации сетей памяти: Facebook (Torch/Matlab), YerevaNN (Theano) и Тэхун Ким (TensorFlow).
Прим. пер.: все перечисленные реализации написаны для фреймворков 2015–2016 годов и сегодня, скорее всего, не запустятся без доработки. Для учёбы достаточно понять идею.
Интерфейсы внимания
Заголовок раздела «Интерфейсы внимания»Когда я перевожу предложение, я обращаю особое внимание на слово, которое перевожу прямо сейчас. Когда я расшифровываю аудиозапись, я внимательно слушаю фрагмент, который в этот момент записываю. А если вы попросите меня описать комнату, в которой я сижу, я буду поглядывать на предметы, которые описываю.
Нейросети могут вести себя так же с помощью внимания: сосредотачиваясь на части информации, которую им дали. Например, одна RNN может «смотреть» на выход другой RNN. На каждом шаге времени она фокусируется на разных позициях другой сети.
Рисунок: две RNN — нижняя обрабатывает вход, верхняя на каждом шаге «смотрит» на все состояния нижней; линии разной толщины показывают, на что приходится внимание.
Мы хотим, чтобы внимание было дифференцируемым — тогда можно научиться, куда смотреть. Для этого используем тот же трюк, что и нейронные машины Тьюринга: смотрим везде, просто в разной степени.
Рисунок: веса внимания над состояниями нижней сети; верхняя получает их взвешенную сумму.
Распределение внимания обычно получают с помощью внимания по содержимому. Сеть, которая «смотрит», порождает запрос (query) — описание того, на чём она хочет сосредоточиться. Каждый элемент скалярно умножается на запрос, что даёт оценку (score): насколько элемент подходит под запрос. Оценки подаются в softmax, и получается распределение внимания.
Рисунок: запрос ; для каждого состояния считается ; softmax превращает эти числа в веса; итог — .
flowchart LR Q["Запрос q от RNN-декодера"] --> S["Оценки: q·h₁, q·h₂, …, q·hₙ"] H["Состояния h₁…hₙ RNN-кодировщика"] --> S S --> SM["softmax → веса a₁…aₙ (сумма = 1)"] SM --> C["Взвешенная сумма Σ aᵢ·hᵢ"] H --> C C --> OUT["Вектор контекста для текущего шага"]
Одно из применений внимания между RNN — перевод (Bahdanau и др., 2014). Традиционная модель sequence-to-sequence (seq2seqseq2seq (последовательность в последовательность)EN sequence-to-sequence (seq2seq)Схема «энкодер читает вход, декодер генерирует выход» (Sutskever и др.; Cho и др., 2014). Без внимания всё входное предложение сжимается в один вектор контекста.) вынуждена сжать весь вход в один вектор, а потом развернуть его обратно. Внимание избавляет от этого: RNN, которая читает вход, передаёт информацию о каждом увиденном слове, а RNN, которая порождает выход, сосредотачивается на словах по мере того, как они становятся важны.
Рисунок (интерактивный): перевод с английского на французский. Наведя мышку на слово перевода, видно, на какие слова оригинала смотрела сеть: чаще всего на соответствующее слово, но при перестановке слов (например, прилагательное после существительного во французском) — на другое место. Рисунок основан на статье Bahdanau и др.
Такое внимание между RNN применяется и во многих других задачах. Его можно использовать в распознавании речи (Chan и др., 2015): одна RNN обрабатывает звук, а другая пробегает по нему, сосредотачиваясь на нужных фрагментах, пока порождает расшифровку.
Рисунок (интерактивный): спектрограмма фразы и текст расшифровки; при наведении на букву подсвечивается участок звука, на который смотрела сеть. Рисунок основан на статье Chan и др.
Другие применения такого внимания — синтаксический разбор текста (Vinyals и др., 2015), где модель поглядывает на слова, пока строит дерево разбора, и моделирование диалога (Vinyals и Le, 2015), где модель может сосредоточиться на предыдущих репликах разговора, пока порождает ответ.
Внимание можно использовать и на стыке свёрточной сети (свёрточная нейросетьсвёрточная нейросетьEN convolutional neural network (CNN)) и RNN. Тогда RNN на каждом шаге может смотреть на разные места изображения. Популярное применение — подписи к изображениям. Сначала свёрточная сеть обрабатывает картинку и извлекает высокоуровневые признаки. Затем работает RNN, которая порождает описание. Порождая каждое слово описания, RNN сосредотачивается на том, как свёрточная сеть интерпретировала соответствующие части изображения. Это можно явно визуализировать:
Рисунок из статьи Xu и др. (2015) «Show, Attend and Tell»: фотографии с подписями вроде «A woman is throwing a frisbee in a park» («Женщина бросает фрисби в парке»); для подчёркнутого слова светлым выделена область картинки, на которую смотрела сеть (для «frisbee» — сама тарелка).
В более общем виде интерфейсы внимания можно использовать всякий раз, когда нужно взаимодействовать с нейросетью, у выхода которой есть повторяющаяся структура.
Интерфейсы внимания оказались чрезвычайно универсальной и мощной техникой и распространяются всё шире.
Прим. пер.: через год, в 2017 году, статья «Attention Is All You Need» убрала из этой схемы саму рекуррентность: внимание стало главным строительным блоком (урок 4.5.1).
Адаптивное время вычислений
Заголовок раздела «Адаптивное время вычислений»Обычные RNN выполняют одинаковый объём вычислений на каждом шаге времени. Это кажется неестественным. Ведь когда что-то сложно, надо думать дольше? Кроме того, это ограничивает RNN числом операций для списка длины .
Адаптивное время вычислений (Adaptive Computation Time, ACT; Graves, 2016) — способ дать RNN разный объём вычислений на каждом шаге. Общая идея проста: позволить RNN делать несколько шагов вычислений на каждый шаг времени.
Рисунок: на каждый элемент входа RNN делает не один, а несколько внутренних шагов (их число разное), и выход — взвешенная сумма результатов этих шагов.
Чтобы сеть могла научиться, сколько шагов делать, мы хотим, чтобы число шагов было дифференцируемым. Добиваемся этого тем же трюком, что и раньше: вместо того чтобы решать, сколько дискретных шагов выполнить, у нас есть распределение внимания по числу шагов. Выход — взвешенная комбинация выходов каждого шага.
Есть ещё несколько деталей, которые мы опустили на прошлой схеме. Вот полная схема одного шага времени с тремя шагами вычислений.
Рисунок: подробная схема ACT — состояния трёх внутренних шагов, «нейроны остановки», полоса бюджета сверху, итоговая взвешенная сумма.
Выглядит сложновато, так что разберём по шагам. На высоком уровне мы по-прежнему запускаем RNN и выдаём взвешенную комбинацию состояний.
Вес каждого шага определяет «нейрон остановки» (halting neuron). Это сигмоидный нейрон, который смотрит на состояние RNN и выдаёт вес остановки — его можно считать вероятностью того, что на этом шаге надо остановиться.
Общий бюджет весов остановки равен 1, и мы отслеживаем его по верхней полосе. Когда остаток становится меньше эпсилон, мы останавливаемся.
Когда мы остановились, у нас может остаться часть бюджета, потому что останавливаемся мы, когда остаток меньше эпсилон. Что с ним делать? Формально он причитается будущим шагам, но их мы считать не хотим, поэтому отдаём остаток последнему шагу.
Прим. пер.: числовой пример. Пусть , и нейрон остановки на трёх шагах выдал , и . После первого шага остаток бюджета , после второго . На третьем шаге нейрон просит , но осталось только : бюджет исчерпан, мы останавливаемся, и третий шаг получает остаток . Итоговые веса шагов: , , — в сумме ровно 1, и выход равен .
При обучении моделей с адаптивным временем вычислений в функцию потерь добавляют слагаемое «цена размышления» (ponder cost). Оно штрафует модель за объём использованных вычислений. Чем больше это слагаемое, тем охотнее модель пожертвует качеством ради меньшего времени вычислений.
Адаптивное время вычислений — совсем новая идея, но мы считаем, что она вместе с похожими идеями станет очень важной.
Прим. пер.: так и вышло, хотя в другой форме: рассуждающие LLM тратят на трудные задачи больше токенов «размышления», и с этим борются штрафами за длину и бюджетом размышлений (урок 6.4.4).
Пока, похоже, единственная открытая реализация адаптивного времени вычислений — Марка Ноймана (TensorFlow).
Нейронный программист
Заголовок раздела «Нейронный программист»Нейросети отлично справляются со многими задачами, но им трудно даются некоторые базовые вещи вроде арифметики, тривиальной для обычных способов вычислений. Было бы здорово как-то соединить нейросети с обычным программированием и получить лучшее от обоих миров.
Нейронный программист (Neural Programmer; Neelakantan и др., 2015) — один из подходов к этому. Он учится создавать программы, чтобы решить задачу. Более того, он учится порождать такие программы, не нуждаясь в примерах правильных программ. Он сам открывает, как строить программы, как средство для достижения цели — решения задачи.
Настоящая модель из статьи отвечает на вопросы о таблицах, порождая SQL-подобные программы-запросы к таблице. Но там много деталей, которые всё усложняют, поэтому начнём с воображаемой модели попроще: ей дают арифметическое выражение, и она порождает программу для его вычисления.
Порождаемая программа — последовательность операций. Каждая операция работает с выходами предыдущих операций. Например, операция может быть такой: «сложить выход операции двумя шагами раньше и выход операции шагом раньше». Это больше похоже на конвейер Unix (pipe), чем на программу, где переменным присваивают значения и читают их.
Рисунок: цепочка операций, каждая берёт результаты предыдущих.
Программу порождает по одной операции RNN-контроллер. На каждом шаге он выдаёт распределение вероятностей того, какой должна быть следующая операция. Например, на первом шаге мы почти уверены, что нужно сложение, на втором сомневаемся между умножением и делением, и так далее…
Рисунок: на каждом шаге — столбики вероятностей операций (сложить, вычесть, умножить, разделить).
Получившееся распределение по операциям теперь можно вычислить. Вместо того чтобы выполнять на каждом шаге одну операцию, применяем обычный трюк внимания: выполняем все операции и усредняем их выходы с весами — вероятностями того, что мы выполнили эту операцию.
Прим. пер.: пример. Пусть на шаге надо применить операцию к числам 6 и 3, а контроллер дал вероятности: сложить , вычесть , умножить . Выход шага . Это «мягкая» смесь операций; по мере обучения вероятности становятся почти 0 или 1, и смесь превращается в одну выбранную операцию.
Пока мы умеем брать производные через операции, выход программы дифференцируем по вероятностям. Тогда можно задать функцию потерь и обучить нейросеть порождать программы, дающие правильный ответ. Так нейронный программист учится порождать программы без примеров хороших программ. Единственный сигнал учителя — ответ, который программа должна выдать.
Такова суть нейронного программиста, но версия из статьи отвечает на вопросы о таблицах, а не вычисляет арифметические выражения. Там есть ещё несколько остроумных приёмов.
- Несколько типов. Многие операции нейронного программиста работают не со скалярными числами, а с другими типами. Некоторые операции выдают выбранные столбцы или выбранные ячейки таблицы. Объединяются только выходы одного типа.
- Ссылки на вход. Нейронному программисту нужно отвечать на вопросы вроде «Сколько городов с населением больше 1 000 000?» по таблице городов со столбцом населения. Для этого некоторые операции позволяют сети ссылаться на константы из вопроса или на названия столбцов. Ссылка делается вниманием, в стиле сетей-указателей (pointer networks; Vinyals и др., 2015).
Нейронный программист — не единственный способ заставить нейросеть порождать программы. Ещё один прекрасный подход — нейронный программист-интерпретатор (Neural Programmer-Interpreter; Reed и de Freitas, 2015). Он решает ряд очень интересных задач, но требует обучения на примерах правильных программ.
Мы считаем, что вся эта область — наведение мостов между традиционным программированием и нейросетями — чрезвычайно важна. Нейронный программист явно не окончательное решение, но из него можно извлечь много важных уроков.
Прим. пер.: сегодня эту роль играет вызов инструментов (вызов инструментоввызов инструментовEN tool calling / function calling): LLM порождает вызов функции или код, а внешний интерпретатор его выполняет (урок 8.3.2).
Более новая версия нейронного программиста для ответов на вопросы открыта авторами и доступна как модель TensorFlow. Есть также реализация нейронного программиста-интерпретатора от Кэна Мориситы (Keras).
Общая картина
Заголовок раздела «Общая картина»Человек с листом бумаги в каком-то смысле гораздо умнее человека без него. Человек с математической нотацией может решать задачи, которые иначе бы не решил. Доступ к компьютерам позволяет нам совершать невероятные вещи, которые иначе были бы далеко за пределами наших сил.
Вообще, похоже, что многие интересные формы интеллекта — это взаимодействие творческой эвристической интуиции людей с более чёткими и строгими средами (media), такими как язык или уравнения. Иногда среда существует физически: хранит для нас информацию, не даёт ошибаться или берёт на себя тяжёлые вычисления. В других случаях среда — модель в нашей голове, которой мы оперируем. Так или иначе, это кажется чем-то глубоко фундаментальным для интеллекта.
Недавние результаты машинного обучения начали приобретать этот оттенок: интуиция нейросетей соединяется с чем-то ещё. Один подход можно назвать «эвристическим поиском». Например, у AlphaGo (Silver и др., 2016) есть модель того, как устроена игра го, и она исследует, как может развиваться партия, руководствуясь интуицией нейросети. Похожим образом DeepMath (Alemi и др., 2016) использует нейросети как интуицию для преобразования математических выражений. «Дополненные RNN», о которых шла речь в этой статье, — другой подход: мы подключаем RNN к сконструированным средам, чтобы расширить их общие возможности.
Взаимодействие со средой естественно состоит из последовательности: сделать действие, посмотреть на результат, сделать ещё действия. Это порождает серьёзную проблему: как научиться, какие действия выбирать? Звучит как задача обучения с подкреплением, и такой путь, конечно, возможен. Но литература по обучению с подкреплением атакует самую трудную версию этой задачи, и её решения сложно применять. Замечательное свойство внимания в том, что оно даёт более простой выход: частично выполнить все действия в разной степени. Это работает, потому что мы можем спроектировать среду — например, память NTM — так, чтобы она допускала дробные действия и была дифференцируемой. Обучение с подкреплением заставляет пройти один путь и пытаться учиться на нём. Внимание на развилке идёт во все стороны сразу, а потом сливает пути обратно.
Главная слабость внимания в том, что на каждом шаге нужно выполнить каждое «действие». Из-за этого вычислительная стоимость растёт линейно, когда мы, например, увеличиваем объём памяти нейронной машины Тьюринга. Можно представить разреженное внимание — тогда трогать придётся только часть памяти. Но и это непросто: например, если вы хотите, чтобы внимание зависело от содержимого памяти, наивная реализация всё равно заставит посмотреть на каждую ячейку. Мы видели первые попытки решить эту проблему (например, Andrychowicz и Kurach, 2016), но, похоже, работы впереди ещё много. Если бы удалось по-настоящему заставить работать внимание за сублинейное время, это было бы очень мощно!
Прим. пер.: эта проблема — центральная тема ступени 5: внимание трансформера стоит по длине контекста, и разреженное внимание (разреженное вниманиеразреженное вниманиеEN sparse attention, урок 5.5.2) решает её почти так, как здесь описано.
Дополненные рекуррентные нейронные сети и лежащая в их основе техника внимания невероятно увлекательны. Нам не терпится увидеть, что будет дальше!
Благодарности
Заголовок раздела «Благодарности»Спасибо Майтре Рагху, Дарио Амодеи, Кассандре Ся, Люку Вилнису, Анне Голди, Джесси Энгелю, Дэну Мане, Наташе Жак, Эмме Пирсон и Яну Гудфеллоу за отзывы и поддержку. Мы также очень благодарны нашей команде, Google Brain, за огромную поддержку проекта.
Упомянутые работы
Заголовок раздела «Упомянутые работы»| Работа | Авторы, год | О чём |
|---|---|---|
| Neural Turing Machines | Graves, Wayne, Danihelka, 2014 | память, адресуемая вниманием |
| Neural GPUs Learn Algorithms | Kaiser, Sutskever, 2015 | сеть, которая учится складывать и умножать |
| Reinforcement Learning Neural Turing Machines | Zaremba, Sutskever, 2015 | NTM с обучением через RL |
| Neural Random-Access Machines | Kurach, Andrychowicz, Sutskever, 2015 | память на указателях |
| Learning to Transduce with Unbounded Memory; Inferring Algorithmic Patterns with Stack-Augmented RNNs | Grefenstette и др., 2015; Joulin, Mikolov, 2015 | дифференцируемые стеки и очереди |
| Memory Networks; Ask Me Anything | Weston и др., 2014; Kumar и др., 2015 | сети памяти |
| Neural Machine Translation by Jointly Learning to Align and Translate | Bahdanau, Cho, Bengio, 2014 | внимание в переводе |
| Listen, Attend and Spell | Chan и др., 2015 | внимание в распознавании речи |
| Grammar as a Foreign Language | Vinyals и др., 2015 | внимание в синтаксическом разборе |
| A Neural Conversational Model | Vinyals, Le, 2015 | внимание в диалоге |
| Show, Attend and Tell | Xu и др., 2015 | внимание в подписях к картинкам |
| Adaptive Computation Time for Recurrent Neural Networks | Graves, 2016 | адаптивное время вычислений |
| Neural Programmer | Neelakantan, Le, Sutskever, 2015 | порождение программ без примеров |
| Pointer Networks | Vinyals, Fortunato, Jaitly, 2015 | внимание как указатель на вход |
| Neural Programmer-Interpreters | Reed, de Freitas, 2015 | программы с обучением на примерах |
| Mastering the game of Go… | Silver и др., 2016 | AlphaGo |
| DeepMath | Alemi и др., 2016 | нейросети в доказательстве теорем |
| Learning Efficient Algorithms with Hierarchical Attentive Memory | Andrychowicz, Kurach, 2016 | внимание за сублинейное время |
Словарик
Заголовок раздела «Словарик»| EN | RU |
|---|---|
| augmented RNN | дополненная RNN |
| attention distribution | распределение внимания |
| content-based / location-based attention | внимание по содержимому / по положению |
| query, score | запрос, оценка |
| attentional interface | интерфейс внимания |
| sequence-to-sequence | «последовательность в последовательность» (seq2seq) |
| adaptive computation time | адаптивное время вычислений |
| halting neuron, ponder cost | нейрон остановки, цена размышления |
| neural programmer | нейронный программист |
| pointer network | сеть-указатель |
| differentiable | дифференцируемый |
| convex combination | выпуклая комбинация |
| sparse attention | разреженное внимание |
Оригинал: Olah & Carter, «Attention and Augmented Recurrent Neural Networks», Distill, 2016, distill.pub/2016/augmented-rnns, CC BY 4.0. Перевод распространяется на тех же условиях.