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

Тенденции

В 2017 году я заметил две основные тенденции:

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

Эта статья в основном о первом, о втором тренде см. Последовательную статью. Он также имеет ускорение, которое в любом случае кажется неизбежным в наши дни.

Внимание - все, что вам нужно

Эта уже известная статья ознаменовала второе пришествие сетей прямого распространения к НЛП. Это работа Google и некоторых известных исследователей, таких как Якоб Ушкорейт и Лукаш Кайзер. Идея, лежащая в основе архитектуры Transformer, описанная в статье, проста и гениальна: давайте забудем о повторяемости и прочем и просто попытаемся использовать внимание для выполнения работы. И эта идея действительно сработала!

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

Следовательно, архитектура Transformer является прямой без какой-либо повторения. Вместо этого для выполнения всей работы они используют внимание.

Давайте сначала освежим стандартный подход Богданау к вниманию:

Идея внимания состоит в том, что нам нужно сосредоточить внимание на некотором значимом вводе в кодировщике, чтобы лучше декодировать. В простейшем случае релевантность определяется как подобие конкретного входа текущему выходу. Это сходство, в свою очередь, можно определить как сумму некоторых входных данных с весами, где веса суммируются до 1, а наибольший вес соответствует наиболее релевантным входным данным.

На рисунке мы могли видеть уже классический подход Дмитрия Богданова: у нас есть один вход - скрытые состояния кодировщика (h) и некоторый коэффициент для суммирования этих скрытых состояний (а). Эти коэффициенты не заданы заранее, они генерируются из некоторых других входных данных, отличных от скрытых состояний кодировщика.

Напротив, авторы рассматриваемой статьи предложили так называемое самовнимание на входных данных. Термин «я» в названии относится к идее о том, что внимание уделяется данным, по которым оно вычисляется, в отличие от стандартного подхода, при котором используются некоторые дополнительные входные данные для привлечения внимания к заданным входным данным.

Кроме того, это самовнимание называется Multi-Head, поскольку оно выполняет одну и ту же операцию несколько раз параллельно. Эту функцию можно сравнить со сверточными фильтрами, если вы ищете аналог, то есть каждая головка фокусируется на разных местах ввода. Другая главная особенность статьи - использование трех входов (вместо двух в стандартном подходе). Как вы можете видеть на рисунке, сначала мы вычисляем «вспомогательное внимание» для Q (запрос) и K (ключ), а затем объединяем это с V (значение) из входных данных. Эта особенность отсылает нас к понятию памяти, которым на самом деле является внимание.

Помимо основной особенности этой архитектуры, есть две второстепенные, но важные особенности:

  • позиционное кодирование,
  • замаскированное внимание к декодеру.

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

Скрытое внимание - простая, но важная особенность: опять же, поскольку в сети нет понятия последовательности, нам нужно каким-то образом отфильтровать предложения сети для будущих слов, которые фактически недоступны при декодировании. Итак, как вы могли заметить на картинке внимания, есть место для маски, которая, образно говоря, вычеркивает слова, которые занимают место в будущем, от текущего.

Все эти функции позволили этой архитектуре не только работать, но даже улучшить состояние машинного перевода.

Параллельный декодер для нейронного машинного перевода

Последняя особенность не удовлетворила авторов этой статьи, написанной группой Ричарда Сохера из Salesforce Research. Таким образом, это замаскированное внимание к декодеру было недостаточно для них с точки зрения ускорения, полученного от параллельного кодировщика, и они решили сделать следующий шаг: Почему мы не можем сделать параллельный декодер, если у нас уже есть параллельный кодировщик? ? Это всего лишь мои предположения, но держу пари, что у авторов возник аналогичный вопрос. И они нашли способ решить проблему.

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

Как видите, некоторые слова могут относиться к более чем одному слову, а некоторые, кажется, не относятся ни к какому конкретному слову. Таким образом, коэффициент рождаемости просто делит эту матрицу на части, каждая из которых относится к определенному слову исходного языка.

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

К сожалению, давая такой прирост скорости (в некоторых случаях до 8x), неавторегрессивный декодер берет взамен несколько баллов BLEU. Так что есть возможности для улучшения!

В следующей части мы обсудим другие важные работы, в первую очередь, с учетом неконтролируемых подходов.