![Search icon](https://hackernoon.imgix.net/search-new.png?w=19&h=19)
В 2017 году группа исследователей (из Google и Университета Торонто) представила новый способ обработки задач обработки естественного языка (NLP). Их революционная статья « Внимание — это все, что вам нужно » представила модель Transformer, архитектуру, которая с тех пор стала основой многих современных систем искусственного интеллекта. Производительность, масштабируемость и универсальность модели привели к ее широкому распространению, сформировав основу современных моделей, таких как BERT (представления двунаправленного кодировщика) и GPT (генеративные предварительно обученные преобразователи).
До модели Transformer большинство моделей ИИ, обрабатывающих язык, в значительной степени полагались на тип нейронной сети, называемой рекуррентной нейронной сетью (RNN) или ее улучшенной версией, сетью краткосрочной памяти (LSTM). В частности, такие проблемы, как моделирование языка и машинный перевод (также называемый последовательной трансдукцией). Эти модели обрабатывали слова последовательно, одно за другим, слева направо (или наоборот). Хотя этот подход имел смысл, поскольку слова в предложении часто зависят от предыдущих слов, у него были некоторые существенные недостатки:
Ключевая идея: внимание к архитектуре
Основная идея модели Transformer — это то, что называется «вниманием». Проще говоря, внимание помогает модели сосредоточиться на определенных частях предложения при попытке понять значение/контекст слова. Рассмотрим предложение «Машина, которая была припаркована в гараже, синяя». Когда вы думаете о слове «синий», вы естественным образом сосредотачиваетесь на слове «машина» ранее в предложении, потому что оно говорит вам, что такое синий цвет. Модели машинного перевода столкнулись бы с трудностями при определении того, относится ли «синий» к машине или гаражу. Вот что делает внутреннее внимание — оно помогает модели сосредоточиться на соответствующих словах, независимо от того, где они находятся в предложении.
Обратите внимание, что внимание не было новой концепцией и уже использовалось в тандеме с RNN. Transformer был первой моделью трансдукции, которая опиралась исключительно на внимание, тем самым устраняя необходимость в нейронных сетях. Это дало следующие преимущества:
Как видите, новая модель не только устранила все недостатки нейронных сетей, но и фактически улучшила производительность машинного перевода!
Поскольку исходную статью может быть немного сложно понять, ниже приводится более простое объяснение архитектуры модели, описанной в статье.
Стеки кодировщика и декодера : Transformer состоит из стека кодировщика (слева) и стека декодера (справа). Стек кодировщика преобразует входную последовательность (например, предложение) в набор непрерывных представлений, в то время как стек декодера преобразует эти представления в выходную последовательность (например, перевод). Для каждого стека, снизу вверх, ниже приведены основные компоненты модели, поясненные на примере.
Обработка входного предложения в кодере
Входные данные : Текст, который вы хотите перевести. Например: «Машина, припаркованная в гараже, синяя».
Вводное вложение : преобразует слова в числовые представления фиксированной длины (векторы), называемые вложениями. Эти вложения фиксируют семантическое значение слов таким образом, что модель может их понять. Из нашего примера:
«The» -> [0,9, -0,4, 0,2, ...]
"автомобиль" -> [0,5, 0,1, -0,7, ...]
"что" -> [-0,8, 0,2, 0,8, ...]
и то же самое для каждого слова в предложении выше.
Позиционное кодирование : поскольку модель обрабатывает входящие вложения, которые не имеют никакого порядка, ей нужен способ понять порядок слов в предложении. Позиционное кодирование добавляет эту информацию о положении каждого слова в последовательности к его вложению.
«The» в позиции 1 может быть скорректирован до [0,9 + P1, -0,4 + P1, 0,2 + P1, ...], где P1 представляет позиционное кодирование для первой позиции, тем самым генерируя новое встраивание, уникальное для позиции P1.
Механизм самовнимания : как было описано ранее, это позволяет модели фокусироваться на разных словах в предложении в зависимости от контекста. Для каждого слова механизм самовнимания вычисляет оценку, которая показывает, насколько много внимания следует уделять другим словам при кодировании текущего слова.
Для слова «машина» внутреннее внимание может определить, что слова «припаркованный», «гараж» и «синий» особенно важны для понимания его контекста.
Многоголовое внимание : новая часть модели трансформатора. Многоголовое внимание — это просто несколько слоев/операций внутреннего внимания, работающих параллельно и соединенных линейно.
Например, одна голова может быть сосредоточена на главном субъекте («автомобиль») и его свойствах («синий»), в то время как другая голова может быть сосредоточена на придаточном предложении («который был припаркован в гараже»).
Модуль внимания нескольких голов дает модели возможность понимать, что «синий» цвет более актуален для автомобиля, чем для гаража.
Нейронные сети прямого распространения : после слоя внутреннего внимания выходные данные передаются через нейронную сеть прямого распространения, которая применяется к каждой позиции отдельно и идентично (опять же, может работать параллельно!). Это состоит из двух линейных преобразований с активацией ReLU между ними.
Add & Norm : Остаточные соединения (add) используются для добавления входа слоя к его выходу, который затем нормализуется (norm). Это помогает в обучении глубоких сетей, предотвращая исчезновение или взрыв градиентов.
Генерация перевода в декодере
В NLP принято обозначать начало маркера начала последовательности специальным символом <SOS>, а конец последовательности — <EOS>. Декодер берет обработанный ввод от кодера и генерирует французский перевод "La voiture qui était garée dans le garage est bleue". Вот как работает эта часть:
Входные данные для декодера : декодер начинает с закодированного представления английского предложения из кодера. Если вы заметили, декодер также принимает свои собственные выходные данные в качестве входных данных. Поскольку у него не будет входных данных для начального слова, мы вставляем токен <SOS> в начало (следовательно, смещенный вправо) и удаляем последнее слово. Эта смещенная последовательность и есть то, что подается в декодер.
Маскированное внутреннее внимание : в декодере механизм маскированного внутреннего внимания гарантирует, что каждое слово в выходной последовательности может обращать внимание только на слова, находящиеся перед ним. Это не позволяет модели заглядывать вперед и гарантирует, что она генерирует перевод по одному слову за раз слева направо.
Например, когда декодер собирается сгенерировать слово «La» (первое слово во французском языке), он знает только контекст из <SOS>, а не будущие слова, например «Voiture».
Нейронные сети прямого распространения : декодер применяет еще одну нейронную сеть прямого распространения для дальнейшей обработки этой информации, совершенствуя перевод шаг за шагом.
В декодере, после обработки входного предложения через несколько слоев маскированного внутреннего внимания, внимания кодировщика-декодировщика и сетей прямой связи, мы получаем последовательность непрерывных представлений (вектор плавающих чисел) для каждой позиции в целевом предложении (в нашем случае французском). Эти представления необходимо преобразовать в реальные слова. Здесь в игру вступает последний линейный и softmax-слой.
Декодер по сути делает следующее:
Объединяя эти шаги, Transformer может понимать всю структуру предложения и его значение более эффективно, чем предыдущие модели. Механизм внутреннего внимания и параллельная обработка позволяют Transformer эффективно улавливать нюансы и структуру как исходного, так и целевого языков, что делает его высокоэффективным в таких задачах, как машинный перевод.