Шрифт:
Интервал:
Закладка:
Обладая некоторой толикой фантазии, можно провести аналогию между векторными представлениями слов или их последовательностей с картами активации нейронов в человеческом мозге. Нейрофизиологические ассоциации нередко посещали исследователей в области глубокого обучения. Важным плодом этих бионических исканий стало появление такого важного механизма в нейросетевых моделях, как «внимание» [attention].
Концепция внимания — одна из идей, оказавших существенное влияние на развитие глубокого обучения во второй половине 2010-х гг. Несмотря на то что этот механизм в настоящее время используется в самых разных задачах, изначально он был разработан в контексте нейросетевого машинного перевода, основанного на seq2seq-моделях.
Модели seq2seq обычно основаны на архитектуре «кодировщик — декодер» [encoder-decoder], в которой часть модели, называемая кодировщиком, обработав входную последовательность, формирует вектор контекста [context vector] (также называемый иногда вектором мысли [thought vector]), имеющий фиксированную длину. Ожидается, что это представление будет своеобразной выжимкой, обобщением для всей входной последовательности. Затем другая часть модели, называемая декодером, получив на вход вектор контекста, начинает генерировать выходную последовательность. Распространён приём использования рекуррентных сетей в качестве кодировщика и декодера, что позволяет модели работать с последовательностями переменной длины. При этом источник потенциальной проблемы заключается в том, что размер вектора контекста — фиксированный, и если он окажется недостаточным, то при работе с длинными последовательностями часть информации будет теряться. Напротив, при слишком большом векторе контекста число параметров модели может оказаться избыточным и она будет склонна к переобучению. К счастью, разброс предложений естественного языка по длине не так уж велик, что делает идею с рекуррентными кодировщиком и декодером жизнеспособной. В 2013 г. свет увидела статья двух исследователей из Оксфорда — Нала Калчбреннера и Фила Блансома — под названием «Рекуррентные непрерывные модели перевода» (Recurrent Continuous Translation Models)[2153]. В ней впервые в задаче машинного перевода была использована архитектура «кодировщик — декодер», однако в качестве кодировщика использовалась свёрточная нейронная сеть над векторами представлений слов, которые, в свою очередь, были продуктами модели RNNLM. Полностью рекуррентный кодировщик был представлен в работе 2014 г., выполненной группой аспирантов под руководством Бенджио. В том же году на ежегодной конференции NIPS (Conference on Neural Information Processing Systems, Конференция по нейросетевым системам обработки информации) команда исследователей из Google, в составе уже знакомого нам Ильи Суцкевера, Ориола Виньялса и Куока Ле, представила систему машинного перевода, основанную на модели seq2seq, в которой роли кодировщика и декодера выполняли упомянутые ранее сети с долгой краткосрочной памятью (LSTM-сети)[2154].
Очевидным недостатком моделей, использующих вектор контекста фиксированной длины, является их неспособность запоминать более длинные последовательности. Часто модель «забывает» ранние части последовательности по мере её обработки. Именно для решения этой проблемы было предложено использовать механизм внимания.
Процессы, основанные на внимании, были неплохо изучены в рамках нейробиологии, в том числе вычислительной. Наиболее глубоко изученным аспектом является зрительное внимание: многие живые существа сосредотачиваются на определённых частях своих визуальных полей восприятия, чтобы среагировать на стимул должным образом. Принцип внимания в моделях машинного обучения сводится к тому, чтобы выбрать из большого набора входных данных лишь те, которые действительно необходимы для вычисления ответа модели.
В классическом варианте модели «кодировщик — декодер» в качестве вектора контекста используется внутреннее состояние кодировщика, возникшее после обработки завершающего элемента последовательности. Представим себе, что наша модель переводит с английского на русский фразу better late than never [лучше поздно, чем никогда]. Кодировщик, представляющий собой LSTM-сеть, последовательно получает на вход векторы, соответствующие словам better, late, than, never. Возникшее внутреннее состояние кодировщика передаётся как стартовое состояние в декодер. После этого на первом шаге выдачи декодер должен выдать на выход слово «лучше», однако информация о нём в полученном состоянии уже отчасти «забыта» LSTM-сетью. Именно поэтому Суцкевер и его коллеги обнаружили, что точность перевода увеличивается, если слова входной последовательности будут подаваться в кодировщик в обратном порядке: never, than, late, better. Исследователи тестировали свою систему для пары «английский — французский», и в такой родственной паре порядок следования слов в предложении нередко был практически одинаковым. Очевидно, что точность перевода можно было бы повысить ещё больше, если бы для первого слова перевода («лучше») наш декодер использовал состояние кодировщика, возникшее после подачи в него слова better, для второго слова перевода («поздно») — состояние, возникшее после подачи в кодировщик слов better и late, и так далее. Для этого нам нужно использовать на входе декодера все состояния кодировщика, возникавшие в процессе обработки последовательности, а также некоторый механизм, который позволил бы определить, в какой степени эти состояния важны для выбора правильного слова в текущем контексте. Именно такой механизм получил название «механизм внимания».
Человек может с лёгкостью понять принципы отображения фрагментов входной последовательности во фрагменты выходной последовательности. Нашей же модели для этого потребуется отдельная нейронная сеть, которая должна будет «постичь» эти принципы в процессе обучения. На вход этой сети (называемой «сетью внимания») мы будем подавать все состояния кодировщика, а также текущее состояние декодера, а на выходе будем получать набор весов для каждого из состояний кодировщика. Этот набор весов обычно нормализуется при помощи функции softmax и носит название «баллы выравнивания» [alignment scores]. Каждый вес будет соответствовать степени «внимания», которую декодер должен «уделить» соответствующему состоянию кодировщика. Состояния кодировщика умножаются на соответствующие им веса, а затем суммируются. Полученный вектор путём конкатенации соединяется с выходом декодера на предыдущем шаге декодирования и подаётся на вход декодера, который в результате меняет своё внутреннее состояние и производит очередной элемент выходной последовательности. После чего вновь рассчитываются баллы выравнивания и так далее. Операция продолжается до тех пор, пока декодер не выдаст элемент, обозначающий конец последовательности. Этот механизм получил название «внимание Багданау» или «внимание Богданова» (Bahdanau attention), поскольку впервые был описан в статье «Нейросетевой машинный перевод путём совместного обучения выравниванию и переводу» (Neural Machine Translation by Jointly Learning to Align and Translate)[2155] за авторством Богданова, Чо и Бенджио, препринт которой впервые был представлен общественности в сентябре 2014 г. Так что годом рождения механизма внимания следует признать 2014-й,