Трансформер
Трансформер (transformer) - это нейросетевая модель, призванная более эффективно решать задачи many-to-many (seq2seq) по преобразованию одной последовательности в другую. Последовательностями могут выступать
-
текст как последовательность слов,
-
видео как последовательности кадров,
-
звук как последовательность частот звуковых волн.
Примерами таких задач могут быть
-
система ответов на вопросы (вопрос-входная последовательность, ответ-выходная)
-
распознавание речи (входная последовательность - звук в виде спектрограммы, выходная - распознанная речь в виде текста)
-
прогнозирование временных рядов (входная последовательность-начало ряда, выходная - его продолжение)
-
музыкальная композиция (входная последовательность-текст песни, выходная-последовательность ноты).
В частности, модель ChatGPT расшифровывается как Chat Generative Pretrained Transformer и построена на базе трансформерной архитектуры.
Отдельные элементы трансформера, такие как блок самовнимания (self-attention), используются и в других постановках, таких как one-to-one (классификация, генерация изображений), one-to-many (описание текстом, что показано на изображении), many-to-one (классификация текста), что позволяет говорить о других видах трансформера.
Например, использование самовнимания на изображениях называется визуальным трансформером (visual transformer). Поскольку трансформер работает над последовательностями, изображения в нём разбиваются на последовательность фрагментов, после чего идёт работа с каждым фрагментом как с элементом "последовательности".
Здесь же мы рассмотрим обработку классических последовательностей, заданных в явном виде, например, последовательность слов в тексте.
Текст можно обрабатывать не только как последовательность слов, но и как последовательность других элементарных объектов, называемых токенами, таких как отдельные символы или n-граммы символов либо слов.
В демонстрационной many-to-many задачи будем рассматривать задачу машинного перевода (machine translation), состоящую в автоматическом переводе текста с одного языка на другой. Тем более, именно для этой задачи трансформер и был впервые предложен.
Ранее мы уже изучили, что для лучшей запоминаемости входной последовательности лучше использовать не стандартную many-to-many архитектуру, а дополненную механизмом внимания (attention). Но там на этапе генерации всё ещё используется обученная рекуррентая сеть, которой приходится запоминать весь уже сгенерированный контекст в скрытом состоянии. Поскольку он представляется вектором фиксированного размера, то это всё ещё приводит к потере информации о ранее сгенерированном контексте. Эту проблему можно решить повторным применением механизма внимания к уже сгенерированным токенам, что и предложено в модели трансформера (transformer) [1], в котором полностью отказались от рекуррентности в кодировщике и декодировщике, заменим работу с историей блоками внимания.
Собственно, поэтому статья [1] и называется - Attention is all you need, и является одной из самых цитируемых работ глубокого обучения, поскольку она принципиально изменила подход к обработке последовательностей.
Предложенная модель трансформера сумела существенно повысить качество машинного перевода и стала повсеместно применяться для обработки и генерации последовательностей, вытесняя рекуррентные сети во всех случаях, кроме обработки коротких последовательностей и ситуаций, когда модель должна использовать мало памяти (трансформер в этом смысле более требователен).
Поскольку трансформер основан исключительно на легко параллелизуемом механизме внимания безо всякого использования рекуррентности, это позволяет быстрее его обучать на видеокарте с достаточным объёмом памяти.
Архитектура трансформера
Схема модели трансформера приведена ниже [1]:
Трансформер состоит из 2-х блоков - кодировщика (encoder), расположенного на схеме слева, и декодировщика (decoder), расположенного справа. Кодировщик и декодировщик выделены прозрачными прямоугольниками.