Фундамент: архитектура Transformer, механизмы Attention и токенизация
Фундамент: архитектура Transformer, механизмы Attention и токенизация
Как нейросеть понимает, что в предложении «Я подошел к банку, чтобы снять деньги» речь идет о финансовой организации, а во фразе «Я сидел на берегу, глядя на песчаную банку» — о мели? Машина не читает слова и не имеет жизненного опыта. Все, что у нее есть — это числа и математические операции. Современная революция больших языковых моделей (LLM) базируется на одном элегантном архитектурном решении, которое позволило алгоритмам математически вычислять контекст. Это решение — архитектура Transformer.
Чтобы успешно разрабатывать RAG-системы и тюнить модели, нужно понимать весь путь: от того, как текст превращается в цифры, до того, как эти цифры обмениваются смыслами.
Токенизация: как текст становится числами
Нейросеть не может принять на вход строку текста. Ей нужен массив чисел. Первым шагом текст разбивается на фрагменты — токены.
Исторически существовало два крайних подхода:
- Пословная токенизация. Каждое слово — это токен. Проблема: словарь становится гигантским (миллионы слов с учетом падежей и опечаток), а неизвестные слова модель не понимает вообще.
- Посимвольная токенизация. Каждый символ (буква) — токен. Словарь крошечный (около 100 символов), но последовательности становятся слишком длинными, а отдельная буква не несет смысловой нагрузки.
Индустриальным стандартом стал компромисс — сабворд-токенизация (Subword Tokenization), в частности алгоритм BPE (Byte Pair Encoding).
Алгоритм BPE начинает с отдельных символов и итеративно объединяет самые частые пары в новые токены. В результате частые слова (например, «мама», «the», «работа») становятся одним токеном, а редкие или новые слова разбиваются на смысловые части. Например, слово «нейробиология» может разбиться на токены нейро, биолог и ия.
После разбиения каждый токен заменяется на свой уникальный ID из словаря (например, нейро = 4501, биолог = 892, ия = 112).
Эмбеддинги: от ID к пространству смыслов
Сам по себе ID токена (например, 4501) ничего не значит для нейросети. Число 4501 не больше и не «лучше», чем 892. Чтобы модель могла работать со смыслами, каждый ID заменяется на эмбеддинг (Embedding) — плотный вектор из чисел с плавающей точкой (например, размерностью 4096).
В этом многомерном пространстве векторы похожих по смыслу токенов находятся рядом. Вектор токена «король» минус вектор токена «мужчина» плюс вектор токена «женщина» окажется очень близко к вектору токена «королева».
Эмбеддинг — это координаты смысла слова в многомерном математическом пространстве.
Но здесь возникает проблема. В базовом словаре эмбеддингов у токена «банк» всегда один и тот же вектор, независимо от контекста. Модель получает на вход набор изолированных смыслов. Чтобы понять предложение, токенам нужно «посмотреть» друг на друга и скорректировать свои значения.
Self-Attention: механизм внимания
Сердце архитектуры Transformer — механизм Self-Attention (внимание на самого себя). Он позволяет каждому токену в последовательности вычислить свою связь со всеми остальными токенами и обновить свой вектор с учетом этого контекста.
Представьте, что вы ищете видео на YouTube. Вы вводите поисковый запрос (Query). Платформа сравнивает его с тегами и названиями всех видео в базе (Keys). Если запрос и тег совпадают, платформа показывает вам само видео (Value).
Механизм Attention работает точно так же, но внутри одного предложения. Каждый токен одновременно выступает в трех ролях, для чего его исходный эмбеддинг умножается на три разные матрицы весов, создавая три новых вектора:
- Query (Q) — запрос: «какой контекст мне нужен, чтобы уточнить свой смысл?»
- Key (K) — ключ: «какой смысл я содержу, на что во мне можно обратить внимание?»
- Value (V) — значение: «вот моя фактическая смысловая нагрузка, которую я передам, если на меня обратят внимание».
Математика Attention
Процесс вычисления внимания описывается одной из самых важных формул в современном машинном обучении:
Разберем каждый элемент:
- — матрицы запросов, ключей и значений для всех токенов последовательности.
- — скалярное произведение (dot product) матриц запросов и ключей. Оно вычисляет «оценку совпадения» (score) между каждым словом-запросом и каждым словом-ключом. Чем больше число, тем сильнее связь.
- — корень из размерности вектора ключа. Это масштабирующий фактор. При умножении больших векторов значения могут стать огромными, что сломает градиенты при обучении. Деление на этот корень стабилизирует процесс.
- — функция, которая превращает сырые оценки в вероятности (от 0 до 1), сумма которых равна 1. Это веса внимания.
- Умножение на — финальный шаг. Мы берем значения всех токенов и смешиваем их пропорционально полученным весам внимания.
В результате токен «банк» в финансовом контексте получит 80% своего нового значения от слова «деньги», 15% от «снять» и лишь 5% оставит от своего исходного смысла. Его вектор изменится — теперь это контекстуализированный эмбеддинг.
Multi-Head Attention: многомерный взгляд
Слова связаны между собой по-разному. Одно слово может зависеть от другого грамматически (подлежащее и сказуемое), семантически (прилагательное описывает существительное) или логически (причина и следствие).
Если использовать только один набор матриц , модель усреднит все эти разные типы связей в одну кашу. Чтобы избежать этого, Transformer использует Multi-Head Attention (многоголовое внимание).
Вместо одного вычисления внимания, модель параллельно запускает несколько (например, 32 «головы» в модели Llama 2). Каждая голова имеет свои собственные матрицы весов и учится обращать внимание на разные аспекты языка. Одна голова может следить за местоимениями, другая — за рифмой, третья — за фактологическими связями. Результаты всех голов затем склеиваются (конкатенируются) и пропускаются через линейный слой.
Позиционное кодирование (Positional Encoding)
В отличие от старых рекуррентных сетей (RNN), которые читали текст слово за словом, Transformer обрабатывает все токены одновременно (параллельно). Это дает колоссальную скорость, но порождает критическую проблему: матричные умножения в Self-Attention не знают порядка слов. Для формулы фразы «собака кусает человека» и «человек кусает собаку» математически идентичны.
Чтобы вернуть информацию о порядке, к изначальным эмбеддингам токенов добавляется Positional Encoding — специальные векторы, которые содержат информацию о позиции токена в последовательности. Модель получает на вход сумму: смысл слова + его место в предложении.
Блок Трансформера: собираем воедино
Одного слоя внимания недостаточно для глубокого понимания текста. Архитектура LLM состоит из десятков слоев (блоков Трансформера), поставленных друг на друга.
Каждый блок включает в себя:
- Multi-Head Attention — токены обмениваются информацией и собирают контекст.
- Add & Norm — остаточное соединение (Residual Connection), которое прибавляет вход слоя к его выходу, и нормализация. Это помогает избежать затухания градиентов при обучении глубоких сетей.
- Feed-Forward Network (FFN) — классическая полносвязная нейросеть, которая применяется к каждому токену индивидуально. Если Attention — это сбор информации от соседей, то FFN — это осмысление этой информации внутри самого токена.
- Снова Add & Norm.
Пройдя через десятки таких слоев, исходные разрозненные токены превращаются в сложнейшие математические репрезентации, содержащие глубокий семантический, грамматический и фактологический контекст всего текста. Именно этот фундамент позволяет современным моделям генерировать связный текст, отвечать на вопросы и становиться основой для мощных RAG-систем.