КАК РАБОТАЕТ LLM ТРАНСФОРМЕР
05.04.2026
Попытки понять процессы обучения или работы нейросетей часто прекращаются вследствие дисбаланса между человеческим воображением и неравномерностью математического трассирования данных в программных фреймворках, которые управляют этими процессами.
Мы тоже пытались немного упростить для вас познание методики работы нейросетевых программ, которые некоторые называют искусственным интеллектом.
В данной статье мы без формул попытались разобрать общие принципы обучения и работы трансформера LLM на уровне GPT-3.
Итак, с чего мы начинаем?
Мы начинаем с разделения текстов на корпуса. Ссылки на программы, которые это делают, можно найти тут. Пока это не имеет большого значения для теории.
Далее создаем токенизатором словарь токенов, где каждому токену даем ID от 0 и до последнего, например, 50 257. Эти ID - это числа неизменные и заменяют нам слова в математике. Они с нами во всех процессах обучения и работы LLM.
Далее создаем таблицу уникальных векторов позиций (адресов токенов в предложении), например, 128 тыс строк (по величине контекстного окна ввода запроса) по 12 тыс чисел в каждом. Для нашего запроса они будут нумероваться от 0, 1, 2, 3…128 тыс для каждого входного токена. То есть 128 001 токен не попадает в модель. Если разговор длинный, модель может забыть его начало в связи с такими ограничениями (сейчас решается разными способами внимания).
Векторы позиций формируются из чисел, созданных алгоритмами синусоид для уникальности. Векторы позиций являются неизменными цифровыми подписями позиции токена в предложении. Числа позиционных векторов поэлементно (1 число вектора токена + 1 число позиционного вектора) добавляются к 128 тыс векторов токенов, которые попадают в окно запроса. Векторы позиций важны в основном для порядка слов в предложениях, поскольку позволяют определить порядок слов, расстояние между словами и т.д. В современных трансформерах позиции определяются без таблиц уникальных векторов - углом вращения точек - чисел каждого вектора попарно. Индексы “p” позиции токена по порядку (0, 1, 2, …) и индексы “i” позиции числа в векторе токена проходят через формулу с синусами и косинусами (как и позиционные векторы) и претерпевают небольшие изменения - шум для семантики и важные маркеры для позиций токенов.
Далее создаем таблицу эмбедингов: векторов наших ID токенов по 12 288 весов (параметров модели - для 96 голов (про головы - ниже) по 128 чисел - большая таблица 50 000 x 12 288) для каждого токена. Числа каждой группы (по 128) обрабатываются матрицами конкретной головы модели после ее обучения, которая отвечает за определенную область слов (грамматика, связи между членами предложения, связи конкретного члена предложения и т.д.). Сначала числа в эмбедингах рандомные, как и веса в матрицах (про матрицы - ниже), однако потом они группируются под матрицы конкретных голов.
При обучении в модель мы подаем ей ID токены в виде векторов одновременно в такой последовательности, как они звучат в предложениях нашего языка. И именно эта часто повторяющаяся для модели четкая последовательность ID играет важную роль в формировании связей между токенами, которые заключаются в сходстве чисел в их векторах (12 тыс). Например, вектор слова ID 456 “дом” [0.5,… 0.8] будет похож на вектор ID 217 слова “здание” [0.54,...0.79]. Когда мы вводим слово в чат запроса, токенизатор ищет его в словаре и выдает ID его токенов.
Например, предложение "кот и пес" - это таблица из трех строк 30 [0.9...0.76], 450 [0.22...0.15] и 21 [0.4...0.14]. Сначала модель не знает, что эти числа токенов тесно связаны, однако с каждой очередной подачей этого порядка токенов, модель проводит их числа в таком же порядке через специальные математические формулы, которые позволяют выявить числовую взаимозависимость, в нашем примере, между первым, вторым и третьим токеном именно в таком их порядке. Если мы переставим токены местами, результаты вычислений будут другие, и структура взаимозависимостей каждого из трех токенов с двумя другими, и даже с самим собой, будет другой. Это динамические веса внимания, которые создаются при обработке токенов в их заданной последовательности путем постоянного сравнения векторов токенов между собой.
Устойчивая взаимозависимость результатов математических вычислений обучения модели формирует числа, которые мы называем постоянными матричными весами. Динамические числа весов внимания одного близкого в последовательности токена к другому являются наибольшими в векторе токена. То есть токен “кот” имеет наибольшее число веса внимания к слову “пес” среди других токенов, а токен "пес" - к токену “кот”. Но только при такой последовательности подачи токенов, как предложение "кот и пес".
Именно эргономика (подбор пути наименьшего сопротивления) вычислений при задействовании этих динамических весов проявляет нужный нам порядок токенов, как наиболее устойчивый, и модель выполняет его, извлекая токены из словаря именно в таком порядке. Когда модель генерирует текст, она с помощью постоянных весов и динамических весов внимания ищет такой токен, который при объединении с предыдущими создаст наиболее устойчивую и логичную структуру согласно с миллиардами вариантов связей (постоянных матричных весов), которые модель выучила.
После 12 или 96 умножений (слоев) на матрице начальные числа предложения "кот и пес" преобразуются в такой финальный набор чисел, который при наложении на общий словарь токенов выдаст наибольшее значение (максимальную активацию) напротив индекса конкретного ID токена (например, слова "кот").
Теперь рассмотрим головы, в которых по три матрицы весов: матрица запроса Q отвечает на вопрос “Какое слово я ищу”, матрица ключа K отвечает на вопрос “Кто я такой” (например - “здание”), и матрица значения V отвечает на вопрос "Какую информацию я передаю, если я подхожу запросу?". Эти матрицы весов - это столбцы векторов весов уже обученной модели. Количество векторов-строк в столбце всегда равно количеству чисел вектора наших токенов. Головы смотрят только на числа векторов, которые создаются именно для них. Это группы чисел в векторе (в основном 128) и они умножаются на матрицы соответствующих голов.
Вектор каждого токена слова умножаем на все векторы трех матриц в каждой голове. Голова учится связывать слова, как члены предложения. Для каждой такой связи (например: действие-кто действует - Петр косит, или пунктуация, или порядок слов) существует своя голова.
Мы умножаем каждое число вектора токена (их у нас 12 тыс.) на каждое число вектора-строки в матрице. Если вектор матрицы имеет 128 чисел в строке (на одну голову), мы получаем 128 новых чисел. Каждое полученное число каждой строки мы добавляем позиционно-поэлементно к другим строкам из наших 12 тыс. строк. То есть 1 число первой строки к первым числам всех 12 287 строк. Каждый столбец из 12 тыс. чисел в матрице является набором весов обученной модели (фильтром). Наибольшие результаты проходят, меньшие — исчезают, потому что превращаются программой в 0. Каждая строка из 12 тыс. — это признак.
Из результатов сложения чисел во всех 128 столбцах мы создаём новый вектор из 128 чисел. Это скалярные произведения. Количество чисел в таком векторе зависит от архитектуры модели: это может быть 256, 512, 768 или даже больше в больших моделях. Но принцип неизменен — это один массив чисел, который является результатом всей математики матричных умножений.
Умножив векторы токенов слова на 3 матрицы, получаем 3 вектора Q, K и V для каждого токена слова, то есть устанавливаем соответствие векторов токенов слова определённым векторам в матрице.
Во время обучения веса в этой последней матрице подбираются как цифровые фильтры — они математически распознают специфические узоры чисел в финальном векторе. Через скалярное произведение матрица словаря токенов выявляет максимальное сходство между результатом вычислений и конкретным ID слова, что позволяет модели точно указать на следующий токен.
То есть мы подали последовательность A и B — формулы с весами выдали вектор V, матрица словаря отреагировала на V и выдала ID токена C. Если модель ошиблась, мы меняем веса (числа в матрицах), чтобы в следующий раз при таком же V выбрался правильный ID. Это и есть обучение.
Теперь этот вектор нужно перевести обратно в ID токена через проекцию на словарь.
В модели есть последняя матрица весов. Её размер: [128 (наш новый вектор) на количество токенов в словаре (у нас 50 тыс.)]. То есть новые векторы каждой головы из 128 чисел собираются в один большой вектор на 12 288 чисел, который умножается на эту огромную таблицу — сравнивается (через скалярное произведение) с каждой строкой этой матрицы. Каждая строка этой матрицы отвечает за конкретный ID из словаря.
Например, если финальный вектор по своему составу чисел похож на строку № 450 в этой матрице, то на выходе получится большое число. Если не похож — получится маленькое или отрицательное число.
После этого умножения мы получаем массив длиной во весь словарь (50 000 чисел). Напротив ID 10 — число 0.1, напротив ID 450 — число 12.5 (это самое большое число), напротив ID 2100 — число -2.3. Модель берёт токен ID 450 и выдаёт его как следующее слово.
Если статья содержит неточности или ошибки, вы можете написать нам или оставить комментарий под статьёй. Мы будем вам за это благодарны, как и те, кто только учится работе с нейросетями. О обучении моделей с трассировкой данных у нас есть таблицы на главной странице сайта.
На сайте Arxiv опубликована интересная статья о физической интерпретации внимания в трансформерах. В статье внимание рассматривается как система, аналогичная термодинамическому равновесию (стабильним параметрам системы). В физической интерпритации токены - это возможные состояния системы, веса внимания - это вероятности, а их распределение соответствует распределению частиц по энергиям в статистической физике.
Проходите SAID тест, чтобы натренироваться отличать фейковые нейрогенерации от настоящих фото и видео.
said-корреспондент🌐
Вы можете создать отдельную тему на форуме в сообществе.
Комментарии