Архитектура смыслов: как работают большие языковые модели

Курс объясняет путь трансформации текста в математические структуры и обратно. Вы узнаете, как статистическое предсказание слов превращается в осмысленный диалог через механизмы внимания и обучения.

1. От слов к числам: векторные представления и семантическое пространство

От слов к числам: векторные представления и семантическое пространство

Как объяснить компьютеру разницу между кошкой и собакой? Процессоры не понимают ни шерсти, ни лая, ни букв — они умеют только складывать и умножать числа. Главный парадокс искусственного интеллекта заключается в том, что вся красота и сложность человеческого языка должна быть сведена к математическим операциям. Чтобы нейросеть «поняла» текст, нам нужно превратить слова в числа так, чтобы при этом не потерять их смысл.

Наивный подход: словарь как массив нулей

Самый простой способ оцифровать язык — составить словарь всех известных слов и присвоить каждому уникальный номер. Допустим, в нашем словаре слов. Тогда каждое слово можно представить как длинный список (вектор) из ста тысяч элементов, где все значения — нули, и только в одной позиции стоит единица.

Этот метод называется One-hot encoding (унитарное кодирование).

Например:

  • «Абрикос» =
  • «Автомобиль» =
  • «Яблоко» =
  • В этих формулах означает позицию конкретного слова в словаре, а — отсутствие всех остальных слов.

    С технической точки зрения мы перевели слова в числа, но для нейросети этот подход катастрофически неэффективен.

    Во-первых, это требует огромных вычислительных ресурсов: векторы получаются гигантскими и почти полностью состоят из пустоты (нулей). Во-вторых, и это главное, такие векторы не содержат смысла.

    В математике векторы One-hot encoding ортогональны друг другу. Это значит, что расстояние между векторами «яблоко» и «абрикос» точно такое же, как между «яблоко» и «автомобиль». Компьютер не видит, что первые два слова — это фрукты, а третье — машина. Для него это просто три независимые точки, равноудаленные друг от друга.

    Эмбеддинги: сжатие смыслов

    Современные языковые модели используют совершенно другой подход — эмбеддинги (embeddings, или плотные векторные представления).

    Вместо того чтобы выделять каждому слову свою личную размерность в массиве из элементов, мы описываем каждое слово набором из нескольких сотен или тысяч чисел (обычно от до в современных моделях, таких как GPT-3). Каждое число в этом векторе — это координата слова на определенной «смысловой оси».

    Представьте, что мы вручную оцениваем слова по трем воображаемым шкалам от до : «Королевственность», «Женственность» и «Съедобность».

    | Слово | Королевственность | Женственность | Съедобность | | :--- | :--- | :--- | :--- | | Король | | | | | Королева | | | | | Яблоко | | | |

    Здесь числа , и так далее — это координаты, отражающие выраженность конкретного признака от (полное отсутствие) до (максимальная выраженность).

    Теперь слова — это точки в трехмерном пространстве. И в этом пространстве «Король» и «Королева» находятся очень близко друг к другу (у них похожие координаты), а «Яблоко» лежит совершенно в другой стороне.

    > Эмбеддинг — это перевод слова в вектор фиксированной длины, где геометрическое положение вектора отражает смысл слова.

    В реальных LLM (Large Language Models) эти оси никто не задает вручную. Нейросеть в процессе обучения сама формирует многомерное семантическое пространство. Мы не знаем, что именно означает координата №142 в векторе модели, но математически она может отвечать за абстрактные концепции: множественное число, сарказм, принадлежность к IT-терминологии или эмоциональную окраску.

    Математика смыслов: алгебра над словами

    Когда слова становятся координатами в многомерном пространстве, смысл подчиняется законам геометрии. Близость двух слов можно измерить через угол между их векторами: чем острее угол, тем ближе смысл.

    Но самое поразительное свойство качественного семантического пространства — это возможность применять к смыслам обычную арифметику.

    Самый знаменитый пример в области обработки естественного языка (NLP) выглядит так:

    Как это работает? Здесь (от англ. vector) обозначает векторное представление соответствующего слова в семантическом пространстве.

  • Мы берем координаты слова «Король» ().
  • Вычитаем из них вектор «Мужчина» () — тем самым мы удаляем из концепции короля мужской пол, оставляя чистую абстракцию «монарх».
  • Прибавляем вектор «Женщина» () — добавляем женский пол к абстракции «монарх».
  • Полученные координаты в многомерном пространстве оказываются ближе всего к вектору слова «Королева» ().
  • Точно так же работают другие семантические сдвиги (где — вектор соответствующего слова):

  • (отношение «столица — страна»).
  • (грамматические формы).
  • Что дальше?

    Перевод слов в эмбеддинги — это фундамент. Мы научили машину понимать, что слова имеют вес, координаты и смысловые связи. Теперь весь словарь языка представляет собой гигантскую звездную карту, где синонимы образуют созвездия, а антонимы разнесены по разным галактикам.

    Однако язык — это не просто набор изолированных слов. Это поток, где каждое следующее слово зависит от предыдущих. То, как нейросеть использует эти координаты, чтобы угадывать продолжение фразы, мы разберем на следующем этапе.

    2. Вероятностная природа языка: как модель предсказывает следующее слово

    Вероятностная природа языка: как модель предсказывает следующее слово

    Начните набирать в смартфоне фразу «Я помню чудное…», и клавиатура тут же предложит слово «мгновенье». Телефон не читал Пушкина и не понимает поэзии. Он просто знает, что в огромном массиве русских текстов после этой последовательности слов с подавляющей вероятностью следует именно это слово. Вся магия современных больших языковых моделей (LLM), способных писать код, сочинять эссе и вести философские беседы, сводится к этому же базовому механизму, доведённому до абсолюта: предсказанию следующего элемента.

    В предыдущей главе мы выяснили, что нейросеть «видит» слова не как текст, а как точки в многомерном семантическом пространстве — эмбеддинги. Теперь мы разберёмся, как модель использует эти векторы смыслов, чтобы генерировать связную речь.

    От слов к токенам

    Прежде чем говорить о предсказании, нужно уточнить одну техническую деталь. LLM оперируют не целыми словами, а токенами — фрагментами слов.

    Словарь всех возможных слов любого языка бесконечен (постоянно появляются неологизмы, опечатки, сленг). Если заставить модель предсказывать целые слова, её словарь раздуется до невычислимых размеров. Поэтому текст дробится на кусочки. Например, слово «невероятный» может быть разбито на токены не, вероят, ный. Короткие и частые слова (как «кот» или «и») обычно становятся одним токеном.

    > Инсайт: Токенизация позволяет модели с ограниченным словарем (обычно от 50 000 до 100 000 токенов) собирать абсолютно любые, даже несуществующие слова, как из кубиков Lego.

    Как вычисляется вероятность: от логитов к Softmax

    Представьте, что мы подали в модель фразу-контекст: «Кот сидит на». Модель пропускает эмбеддинги этих слов через свои внутренние слои (архитектуру которых мы разберём позже) и на выходе выдаёт набор сырых чисел для каждого токена из своего словаря. Эти сырые оценки называются логитами (logits).

    Логиты могут быть любыми числами: , , . Чем выше число, тем сильнее модель «верит», что именно этот токен должен быть следующим. Но с сырыми числами неудобно работать. Как понять, — это много или мало?

    Чтобы превратить логиты в понятные вероятности (от 0 до 1, где сумма всех вероятностей равна 1), используется классическая математическая функция Softmax:

    Где: * — итоговая вероятность -го токена. * — сырой логит этого токена. * — основание натурального логарифма. * — общий размер словаря токенов.

    Возведение в степень делает важную вещь: оно резко усиливает разницу между большими и маленькими логитами. Если логит слова «коврике» равен , а слова «столе» равен , после Softmax вероятность «коврике» будет значительно выше, подавляя конкурентов.

    В итоге для фразы «Кот сидит на» модель формирует распределение вероятностей по всему словарю:

  • «коврике» —
  • «столе» —
  • «дереве» —
  • ...
  • «синхрофазотроне» —
  • !Портрет Клода Шеннона

    Идея о том, что язык можно смоделировать математически через вероятности переходов от символа к символу, не нова. Её заложил ещё Клод Шеннон, создатель теории информации. Разница лишь в том, что модели Шеннона смотрели на статистику 2-3 предыдущих букв, а современные LLM учитывают контекст из десятков тысяч токенов и опираются на их семантические векторы.

    Авторегрессия: цикл генерации

    Получив распределение вероятностей, модель выбирает следующий токен (например, «коврике»). Что происходит дальше?

    Модель берет этот новый токен, приклеивает его к исходному контексту, и повторяет весь процесс заново для новой фразы: «Кот сидит на коврике». Теперь она предсказывает следующий токен (например, «и»).

    Этот пошаговый процесс называется авторегрессией. Модель потребляет собственные предсказания в качестве входных данных для будущих шагов. Именно поэтому генерация текста в ChatGPT происходит на глазах, слово за словом, а не выдаётся мгновенно целым абзацем.

    Проблема жадного декодирования и Температура

    Как именно модель выбирает слово из предложенного списка вероятностей?

    Самый очевидный подход — всегда брать токен с максимальной вероятностью (Жадное декодирование, Greedy decoding). Но у этого метода есть фатальный недостаток: текст получается сухим, предсказуемым и часто зацикливается (например: «Я пошел в магазин и купил хлеб и купил хлеб и купил хлеб...»). Человеческая речь вариативна. Иногда мы используем неожиданные слова.

    Чтобы добавить модели «креативности», в процесс выбора вмешивается параметр Температура (Temperature). В формулу Softmax добавляется делитель :

    Меняя значение , мы управляем формой распределения вероятностей до того, как модель бросит «многогранный кубик», чтобы выбрать слово.

    | Значение Температуры | Эффект на распределение | Результат генерации | | :--- | :--- | :--- | | Низкая (, например ) | Увеличивает разрыв между лидером и остальными. Лидер забирает почти вероятности. | Текст консервативный, точный, логичный. Идеально для написания кода или извлечения фактов. | | Нейтральная () | Базовое распределение Softmax без изменений. | Баланс между предсказуемостью и разнообразием. | | Высокая (, например ) | Сглаживает вероятности. Маловероятные слова получают шанс быть выбранными. | Текст креативный, неожиданный. При слишком высоких значениях превращается в бессмысленный бред. |

    !Виджет: влияние температуры на выбор токена

    Границы простой статистики

    Итак, мы поняли базовый цикл: модель переводит слова в векторы, прогоняет их через свои слои, получает логиты, превращает их в вероятности с помощью Softmax (с учетом Температуры) и выбирает один токен. Затем цикл повторяется.

    Но здесь возникает парадокс. Если модель просто предсказывает следующее слово на основе статистики, как она умудряется не терять нить рассуждения на протяжении страниц текста? Как она понимает, что слово «он» в 50-м предложении относится к главному герою, упомянутому в 1-м предложении?

    Простой математики векторов и вероятностей для этого недостаточно. Модели нужен механизм, который позволит ей «оглядываться» на весь прошлый контекст и понимать, какие слова сейчас важны, а какие — нет. Этот революционный механизм называется Attention (Внимание), и именно он совершил прорыв в искусственном интеллекте, о чём мы поговорим в следующей главе.

    3. Механизм внимания (Attention): как нейросеть находит связи между словами в контексте

    Механизм внимания (Attention): как нейросеть находит связи между словами в контексте

    Прочитайте предложение: «Животное не перешло улицу, потому что оно было слишком уставшим». К чему относится слово «оно» — к животному или к улице? Для человека ответ очевиден. Но если мы заменим одно слово: «Животное не перешло улицу, потому что она была слишком широкой», фокус мгновенно смещается. Местоимение одно и то же, но его смысл полностью определяется окружением. Как математическая модель может уловить эту невидимую смысловую нить?

    В первой главе мы выяснили, что нейросеть превращает слова в эмбеддинги — векторы с фиксированными координатами в семантическом пространстве. Но в этом кроется фундаментальная проблема: в статичном словаре эмбеддингов вектор слова «замок» всегда одинаков, независимо от того, идет ли речь о дверном замке или о средневековой крепости.

    Чтобы предсказывать язык, модели нужен механизм, который заставит слова «смотреть» друг на друга и на лету менять свои координаты в зависимости от контекста. Этот механизм называется Self-Attention (СамоВнимание).

    От статичного словаря к динамическому контексту

    Представьте, что каждое слово в предложении — это человек на вечеринке. Сначала каждый приходит со своим базовым багажом знаний (статичным эмбеддингом). Но как только вечеринка начинается, люди начинают общаться. Слово «оно» оглядывается по сторонам и спрашивает: «Кто здесь существительное в среднем роде, способное испытывать усталость?». Слово «животное» откликается, и они обмениваются информацией.

    После этого взаимодействия вектор слова «оно» перестает быть просто абстрактным местоимением. Он впитывает в себя часть смысла слова «животное».

    > Self-Attention — это процесс, при котором каждый токен в последовательности пересчитывает свое векторное представление, смешивая его с векторами других токенов пропорционально их смысловой связи.

    Чтобы организовать этот обмен математически точно, архитектура использует элегантный подход, заимствованный из систем управления базами данных: Запрос, Ключ и Значение.

    Механизм QKV: Запрос, Ключ и Значение

    Когда токен проходит через слой внимания, его исходный эмбеддинг умножается на специальные матрицы весов (которые модель выучила заранее), порождая три новых вектора. У каждого из них — своя строгая роль.

  • Query (Запрос, ) — это то, что слово ищет в других словах.
  • Key (Ключ, ) — это «вывеска» или тег слова, описывающий, чем оно является для других.
  • Value (Значение, ) — это фактическое смысловое содержимое слова, которое оно отдаст, если к нему обратятся.
  • !Схема взаимодействия Query, Key и Value

    Вернемся к нашему примеру. Токен «оно» формирует вектор Запроса (), который математически кодирует потребность: «ищу существительное, одушевленное, средний род». Остальные слова в предложении выставляют свои Ключи (). Токен «улицу» выставляет Ключ «существительное, неодушевленное, женский род». Токен «животное» выставляет Ключ «существительное, одушевленное, средний род».

    !Какую роль играет токен при поиске зависимостей?

    Математика внимания: как вычисляется связь

    Как нейросеть понимает, что Запрос «оно» совпадает с Ключом «животное»? Через геометрию семантического пространства, с которой мы уже знакомы.

    Модель берет вектор Запроса текущего слова и по очереди сравнивает его с векторами Ключей всех остальных слов с помощью скалярного произведения:

    В этой формуле — вектор Запроса ищущего слова, а — вектор Ключа проверяемого слова. Если векторы указывают в одном направлении (характеристики совпадают), скалярное произведение дает большое положительное число. Если они ортогональны или противоположны — число будет близким к нулю или отрицательным.

    Полученные оценки () — это сырые числа, логиты. Как мы помним из прошлой главы, с сырыми числами работать неудобно. Поэтому модель пропускает их через функцию Softmax, превращая в проценты (веса внимания), сумма которых равна 1 (или 100%).

    Теперь у слова «оно» есть распределение внимания: 85% на «животное», 10% на «уставшим», 5% на остальные слова.

    Финальный шаг: слово «оно» берет векторы Значений () всех слов, умножает их на полученные проценты и складывает вместе:

    Вектор — это смысловое содержимое -го слова. Токен «оно» буквально втягивает в себя 85% смысла токена «животное». Теперь его обновленный вектор содержит точный контекст.

    !Тепловая карта весов внимания

    Многоголовое внимание (Multi-Head Attention)

    В языке слова связаны множеством разных способов. Одно и то же слово одновременно участвует в грамматических связях (кто совершает действие?), семантических (какая эмоциональная окраска?) и логических (где это происходит?).

    Одного набора Q, K и V недостаточно, чтобы уловить все нюансы. Если фокус настроен на поиск подлежащего, модель может упустить, что слово связано еще и с прилагательным.

    Поэтому механизм внимания делают многоголовым. Модель создает не одну, а, например, 12 или 96 независимых «голов» внимания для каждого слова. Каждая голова имеет свои собственные матрицы для вычисления Q, K и V:

  • Первая голова может специализироваться на поиске связей «глагол-существительное».
  • Вторая голова может отслеживать эмоциональный тон.
  • Третья — связывать местоимения с их объектами.
  • В конце результаты работы всех голов склеиваются вместе. Так обновленный вектор слова получает объемное, многогранное понимание своей роли в тексте.

    Именно этот обогащенный контекстом вектор отправится дальше по слоям нейросети. И когда он дойдет до самого конца, механизм авторегрессии, опираясь на то, что «оно» — это уставшее животное, присвоит наивысший логит слову «остановилось», а не слову «заасфальтирована».

    4. Архитектура Transformer: объединение блоков внимания в единую вычислительную систему

    Архитектура Transformer: объединение блоков внимания в единую вычислительную систему

    В 2017 году группа исследователей из Google опубликовала статью с провокационным названием «Attention Is All You Need» (Внимания достаточно). До этого момента нейросети читали текст так же, как люди: последовательно, слово за словом. Это делало их медленными и заставляло «забывать» начало длинного предложения к тому моменту, когда они доходили до конца. Трансформер изменил правила игры: он считывает весь текст целиком, за одну миллисекунду.

    Но если модель видит все слова одновременно, возникает фундаментальная проблема: как она понимает, в каком порядке они стоят?

    Координаты в тексте: Позиционное кодирование

    Механизм Multi-Head Attention, который мы разобрали ранее, блестяще находит связи между словами. Но математически это просто взвешенная сумма векторов. Для механизма внимания предложения «Кот съел мышь» и «Мышь съела кота» выглядят абсолютно одинаково — это просто набор из трех токенов, которые обмениваются контекстом.

    Чтобы вернуть словам порядок, создатели Трансформера придумали позиционное кодирование (Positional Encoding).

    Идея изящна: вместо того чтобы менять саму архитектуру сети, мы добавляем информацию о позиции прямо в вектор слова (эмбеддинг) еще до того, как он попадет в механизм внимания.

    Где: * — итоговый вектор, который отправится в нейросеть. * — семантический эмбеддинг токена (смысл слова из словаря). * — вектор позиционного кодирования (уникальный математический «штамп времени», зависящий от порядкового номера слова в тексте).

    Вектор генерируется с помощью комбинации синусов и косинусов разных частот. Это позволяет модели не просто знать абсолютный номер слова (слово №5), но и легко вычислять относительные расстояния (слово №5 находится на расстоянии двух шагов от слова №7). Теперь, когда векторы попадают в механизм внимания, они несут в себе не только смысл, но и свои точные координаты в предложении.

    !Зачем нужно позиционное кодирование

    Анатомия строительного блока

    Итак, у нас есть векторы, обогащенные позицией. Они попадают в механизм Multi-Head Attention, обмениваются контекстом и на выходе мы получаем новые векторы. Что дальше?

    Одного механизма внимания недостаточно для создания полноценного искусственного интеллекта. Внимание лишь собирает информацию из контекста. Эту информацию нужно обработать: применить логику, извлечь факты, трансформировать смысл. Для этого вокруг механизма внимания выстраивается инфраструктура, образующая единый блок Трансформера.

    !Анатомия одного блока Трансформера

    Помимо самого внимания, в блоке есть три критически важных компонента:

    1. Feed-Forward Neural Network (FFNN)

    После того как токены пообщались друг с другом через внимание, каждый токен индивидуально проходит через классическую полносвязную нейросеть (FFNN). Если Attention — это групповое обсуждение, где эксперты обмениваются записками, то FFNN — это момент, когда каждый эксперт возвращается за свой стол, осмысливает полученные записки и делает собственные выводы. Именно в слоях FFNN большие языковые модели хранят большую часть своих фактических знаний.

    2. Residual Connections (Остаточные связи)

    Когда нейросеть становится очень глубокой, сигнал при прохождении через множество математических операций может исказиться или затухнуть (проблема исчезающего градиента). Остаточные связи решают это элегантно: они создают «шоссе», идущее в обход сложных вычислений.

    Где: * — результат работы части блока. * — исходный вектор, пришедший на вход (тот самый сигнал, идущий по «шоссе» в обход). * — результат сложных вычислений (например, механизма внимания или FFNN). * — функция нормализации.

    Мы буквально берем исходный вектор и прибавляем к нему то новое, что вычислил слой. Если слой ошибся или не нашел ничего полезного, исходный смысл слова не потеряется.

    3. Layer Normalization (Нормализация слоя)

    Сложение сотен многомерных векторов может привести к тому, что числа станут слишком большими или слишком маленькими, что дестабилизирует работу сети. Нормализация слоя математически «причесывает» векторы после каждого этапа, возвращая их значения в оптимальный масштаб со средним значением около нуля. Это делает работу сети стабильной.

    Глубина понимания: Стекинг слоев

    Один блок Трансформера способен уловить лишь базовые связи. Настоящая магия LLM кроется в масштабе. В современных моделях (таких как GPT-4 или Claude) блоки Трансформера ставятся друг на друга, образуя «башню» из десятков слоев (например, в GPT-3 их 96).

    Вектор каждого токена проходит сквозь эту башню снизу вверх. С каждым новым слоем его смысл становится все более глубоким и абстрактным:

  • Нижние слои (1-10): Фокусируются на синтаксисе и грамматике. Понимают, где подлежащее, а где сказуемое, связывают предлоги с существительными.
  • Средние слои: Разрешают многозначность и извлекают факты. Понимают, что «коса» в контексте реки — это песчаная отмель, а не прическа или инструмент.
  • Верхние слои: Оперируют высокоуровневой логикой, тоном текста, общим смыслом абзаца и сложными инструкциями пользователя.
  • К моменту, когда вектор достигает вершины последнего блока, он уже не просто представляет исходное слово. Он представляет всю концепцию текста, сфокусированную вокруг этого слова.

    !Эволюция смысла: прохождение токена через слои Трансформера

    Замыкая круг

    Пройдя через все блоки Трансформера, обогащенный вектор последнего токена в последовательности готов выполнить свою главную задачу.

    Как мы помним из второй главы, модель должна предсказать следующее слово. Для этого финальный вектор умножается на матрицу всего словаря модели. В результате мы получаем те самые логиты (logits) — сырые оценки для каждого возможного следующего слова. Затем функция Softmax превращает их в вероятности, и модель выдает нам следующий токен.

    Новый токен добавляется к тексту, и весь этот колоссальный процесс — позиционное кодирование, прохождение через десятки слоев внимания и FFNN — повторяется заново.

    Архитектура Трансформера дала исследователям идеальный «движок». Он отлично распараллеливается на видеокартах и способен усваивать бесконечно сложные паттерны. Но пустой Трансформер — это просто калькулятор. Чтобы он обрел способность писать стихи и писать код, в него нужно загрузить знания всего человечества.