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