Видео проигрыватель загружается.Воспроизвести видеоВоспроизвестиБез звукаТекущее время 0:00/Продолжительность 3:57Загрузка: 0.00%0:00Тип потока ОНЛАЙНSeek to live, currently behind liveОНЛАЙНОставшееся время -3:57 1xСкорость воспроизведения2x1.75x1.5x1.25x1x, выбрано0.75x0.5xГлавыГлавыОписанияОтключить описания, выбраноСубтитрынастройки субтитров, откроется диалог настройки субтитровСубтитры выкл., выбраноЗвуковая дорожкаPicture-in-PictureПолноэкранный режимThis is a modal window.Начало диалоговго окна. Кнопка Escape закроет или отменит окноТекстColorБелыйЧерныйКрасныйЗеленыйСинийЖелтыйПурпурныйГолубойTransparencyПрозрачностьПолупрозрачныйФонColorЧерныйБелыйКрасныйЗеленыйСинийЖелтыйПурпурныйГолубойTransparencyПрозрачностьПолупрозрачныйПрозрачныйОкноColorЧерныйБелыйКрасныйЗеленыйСинийЖелтыйПурпурныйГолубойTransparencyПрозрачныйПолупрозрачныйПрозрачностьРазмер шрифта50%75%100%125%150%175%200%300%400%Стиль края текстаНичегоПоднятыйПониженныйОдинаковыйТеньШрифтПропорциональный без засечекМоноширинный без засечекПропорциональный с засечкамиМоноширинный с засечкамиСлучайныйПисьменныйМалые прописныеСбросить сбросить все найстройки по умолчаниюГотовоЗакрыть модальное окноКонец диалогового окна.
Внутреннее внимание с несколькими головами[1] — это ключевая идея трансформера, но он состоит не только из этих блоков. Он состоит из нескольких слоёв следующего вида: сначала используется внимание для учёта глобального контекста, затем — признаки каждого токена независимо преобразовываются с помощью двухслойной нейросети. Ко всем токенам сеть применяется с одними и теми же параметрами. По смыслу это похоже на одномерные свёртки с размером ядра "1". Ещё тут есть связи в обход нелинейностей, как в ResNet для классификации изображений — это ускоряет процесс обучения за счёт лучшего протекания градиентов. Ну, и таких слоёв ставится несколько, один поверх другого. Эти слои не меняют размерность данных. Наверное, вы уже догадываетесь, что здесь что-то не так. Рекуррентки обрабатывают текст слева направо, свёртки сравнивают каждое слово со словами слева и справа, а механизм внимания вообще ничего не знает про позиции слов в тексте: он не знает, какое слово рядом с каким стоит. Это же важно... Особенно это важно для таких языков как английский, да и для всех остальных тоже. Сам по себе, механизм внимания безразличен к позиции. Но нам важно учитывать и относительное расположение слов. Ну так давайте, запихнём эту информацию прямо в признаки! За это отвечает так называемое позиционное кодирование.[2] Код позиции — это вектор такого же размера что и эмбеддинг токена и чтобы получить признаки токена мы просто складываем эмбеддинг токена embedding позиции. В принципе, коды позиций можно хранить в таблице эмбеддингов — так же, как и эмбеддинги токенов. Но в ряде случаев это неудобно — например, если мы обучались на примерах размера не более 10, то у нас просто нет в этой таблице эмбеддингов вектора для одиннадцатой позиции и тексты такой длины мы уже не можем обрабатывать. Ну... и не проблема, давайте тогда просто сгенерируем какой-нибудь периодический сигнал. Авторы, например, предлагают использовать синусоиды и косинусоиды разных частот — это чем-то напоминает базис Фурье. На практике эти два подхода — обучаемые коды и периодически сигнал — работают примерно одинаково, но сигнал гораздо удобнее использовать. Вот так выглядит общая архитектура трансформера, как её нарисовали авторы. Они изначально решали задачу машинного перевода, то есть генерации предложения по предложению на другом языке. Поэтому их архитектура состоит из энкодера (мы его уже рассматривали) и декодера. Декодер отличается тем, что в нём используются маски. А ещё, в него подаются выходы энкодера. Но, в остальном, это практически одна и та же нейросеть (но параметры, конечно же, у них разные). И в энкодере, и в декодере, используется много слоёв вот такого типа — в оригинальной статье по 6, а потом стали делать ещё больше — по 12, по 24... Такая архитектура позволяет решать задачи, связанные с анализом последовательностей (не только с текстами), часто — лучше, чем это получается делать с помощью рекурренток, и, при этом, можно тратить меньше времени на обучение.
[1] Attention and its Different Forms (https://towardsdatascience.com/attention-and-its-different-forms-7fc3674d14dc)
[2] Transformer Architecture: The Positional Encoding (https://kazemnejad.com/blog/transformer_architecture_positional_encoding/)

К сожалению, у нас пока нет статистики ответов на данный вопрос, но мы работаем над этим.