Архитектура трансформер: механизм внимания простыми словами
Основы3 минРедакция Innovialabs
Коротко
Трансформер обрабатывает весь текст сразу и для каждого слова через механизм внимания решает, на какие другие слова опираться; это быстрее обучается и лучше держит контекст, чем RNN.
Коротко о главном
Трансформер — архитектура нейросети, на которой построены современные языковые модели. Её ключевая идея — механизм внимания (attention): при обработке каждого слова модель смотрит на все остальные слова текста и решает, какие из них важны прямо сейчас.
Пример: «Кошка не запрыгнула на стол, потому что она устала». Чтобы понять, что «она» — это кошка, а не стол, модель должна связать эти слова. Внимание делает такую связь напрямую, сколько бы слов ни было между ними.
Как работает self-attention
Текст сначала режется на токены (слова или их части), каждый превращается в вектор — набор чисел, описывающий смысл. Затем для каждого токена вычисляются три вектора:
- Query (запрос) — «что я ищу?»
- Key (ключ) — «что я могу предложить?»
- Value (значение) — «какую информацию я передам».
Аналогия с библиотекой: вы приходите с запросом, сравниваете его с ярлыками на полках (ключами) и забираете содержимое (значения) тех полок, что подошли лучше всего — смешивая их по степени совпадения.
"она" --query--> сравнение с key каждого слова
Кошка не запрыгнула на стол ... устала
вес внимания: высокий низк. низкий низк. средн. средний
результат: новое представление "она" = смесь value с этими весами
Таких «голов внимания» несколько, и каждая учится замечать своё: одна — грамматические связи, другая — смысловые и так далее. Это называется multi-head attention. Слоёв внимания много, они идут один за другим, и понимание текста становится глубже от слоя к слою.
Поскольку внимание само по себе не знает порядка слов, к векторам добавляется позиционная информация — сведения о том, где стоит токен.
Энкодер и декодер
Исходный трансформер состоял из двух частей:
| Часть | Что делает | Примеры использования |
|---|---|---|
| Энкодер | Читает весь текст и строит его понимание; каждое слово видит все остальные | Классификация, поиск, эмбеддинги |
| Декодер | Генерирует текст по одному токену; видит только предыдущие токены | Чат-боты, генерация текста и кода |
| Энкодер + декодер | Понимает вход и генерирует выход | Машинный перевод, суммаризация |
Большинство популярных чат-моделей — это только декодер: они раз за разом предсказывают следующий токен, опираясь на всё, что уже написано.
Почему трансформеры вытеснили RNN
RNN (рекуррентные сети) читали текст по одному слову, передавая «память» от шага к шагу. У этого были проблемы:
- Медленное обучение. Шаги шли строго последовательно, их нельзя было эффективно распараллелить на GPU.
- Короткая память. Информация из начала длинного текста постепенно терялась.
Трансформер обрабатывает все токены параллельно и связывает любые два слова напрямую через внимание. Это позволило обучать модели на огромных объёмах данных и лучше удерживать дальний контекст.
Цена — внимание сравнивает каждый токен с каждым, поэтому затраты быстро растут с длиной текста. Поэтому у моделей есть ограничение контекстного окна, а исследователи ищут более экономные варианты внимания.
Что это даёт на практике
- Понятно, почему у модели есть лимит контекста и почему длинные запросы дороже.
- Понятно, почему модель «помнит» только то, что есть в текущем контексте: собственной памяти между запросами у неё нет.
- Для поиска по документам часто используют модели-энкодеры (эмбеддинги), а для ответов — декодеры. Так устроен RAG.