Инжиниринг искусственного интеллекта

- -
- 100%
- +
Ниже приведен пример того как устроен один такой станок/трансформер и зачем нужна каждая его деталь.
1. Multi-Head Attention (Многоголовое внимание)
Это несколько параллельных механизмов внимания, каждый со своими матрицами Q, K, V. Они учатся выделять разные типы связей: грамматические, семантические, синтаксические, анафорические.
Что это
Позволяет каждому токену общаться со всеми остальными токенами сразу, но с разных точек зрения (разные «головы»).
Технически
Это тот самый механизм Q/K/V, который мы разбирали, только запущенный параллельно несколько раз (например, 32 раза).
Зачем и почему
Одной «голове» внимания мало. Одна голова может искать синтаксис (связь подлежащего и сказуемого), вторая - семантику (похожесть слов «котик» и «собачка»), третья - кореференцию. Если голова одна, она запутается.
Но почему недостаточно одной «головы»? Дело в том, что связи между словами бывают разной природы. Одни - грамматические, другие - смысловые, третьи - указательные. Чтобы разобраться во всех, нужны разные специалисты. Например, есть особый тип связей, который называется кореференцией. Разберём его подробнее.
Кореференция - это явление, когда два или более выражений в тексте (слова, словосочетания) относятся к одному и тому же объекту реальности (человеку, предмету, явлению).
Это фундаментальное понятие для понимания связности текста. Без него текст был бы набором бессмысленных повторов.
Простой пример
"Иван купил машину. Он очень рад ей."
Иван и Он - кореферентны (оба указывают на одного и того же человека).
машину и ей - кореферентны (оба указывают на один и тот же предмет).
Именно такие сложные отношения, как кореференция, и помогает выявлять многоголовое внимание. Одна голова ищет подлежащее и сказуемое, другая - улавливает, что «он» и «Иван» - это один человек, третья - понимает, что «ей» относится к «машине». Вместе они создают объёмную картину связей в предложении.
Результат
На выходе мы получаем векторы, которые уже «посмотрели» на соседей и впитали немного контекста.
Итак, токены пообщались, обменялись информацией, каждый впитал немного контекста от соседей. Казалось бы, можно двигаться дальше. Но есть проблема: при передаче информации через много слоёв есть риск потерять то, что было в самом начале. Чтобы этого не случилось, в блоке предусмотрен специальный механизм - остаточная связь.
2. Add & Norm (Добавление и нормализация) - Первый раз
Состоит из
Add (Остаточная связь)
Мы берем вход, который зашел в блок ДО Attention, и прибавляем его к выходу Attention.
Norm (Слоевая нормализация)
Мы «причесываем» полученную сумму, чтобы числа не выходили за разумные пределы.
Зачем и почему
Add (Зачем складывать?)
Представьте, что вы учитесь рисовать. Attention - это ваш новый штрих. Если штрих неудачный, вы можете откатиться назад и начать заново. Остаточная связь - это «ластик» и «карандаш» одновременно. Она позволяет модели на глубоких слоях не забывать, что было в начале. Если следующий слой не привнес ничего полезного, он может просто «пропустить» информацию дальше (скопировать вход). Это помогает обучать очень глубокие сети (32+ слоя), иначе градиенты4 затухнут.
Зачем это нужно

Norm (Зачем нормализовать?)
Чтобы у всех нейронов был примерно одинаковый разброс чисел. Это ускоряет обучение и делает его стабильным, чтобы одни нейроны не кричали громко, а другие шептали.
Метафора
Вы работаете в команде из 10 человек. Один говорит шёпотом, другой кричит, третий вообще молчит. Вы не можете их услышать и понять. Нормализация - это когда вы просите всех говорить в одном тоне, чтобы каждый был слышен, но никто не перекрикивал.
Зачем это нужно

Add - это как если бы художник, сделав новый штрих, всё время держал перед глазами исходный набросок. Если новый штрих не удался, он всегда может вернуться к оригиналу. Norm - это «причесывание» красок, чтобы они не растекались и не смешивались в грязь.
После того как токены обменялись информацией, и мы подстраховались остаточной связью, наступает время для самого важного - осмысления. Ведь просто услышать соседей недостаточно, нужно понять, что это значит для тебя самого. Эту задачу решает следующий компонент - сеть прямого распространения.
3. Feed-Forward Network (FFN) - Сеть прямого распространения
Что это
Маленькая двухслойная нейросеть, которая применяется к каждому токену отдельно.
Технически
Сначала вектор расширяется в 4 раза (например, с 4096 до 16384 нейронов), потом сжимается обратно. Внутри - нелинейная функция (например, SwiGLU (Swish-Gated Linear Unit) или GeLU (Gaussian Error Linear Unit) - функции активации, улучшающие обучение) - они просто решают, какие нейроны зажечь, а какие погасить).
Зачем и почему
Attention смешивает информацию между токенами (как бы по горизонтали). FFN же работает внутри одного токена (вертикально). После того как токен «послушал» соседей, ему нужно этот новый услышанный смысл переварить и записать в удобном виде.
Аналогия
Attention - это совещание (обмен информацией между сотрудниками). FFN - это рабочий кабинет, куда сотрудник уходит после совещания, чтобы осмыслить услышанное и составить отчет. Без FFN модель не сможет делать сложные логические выводы, она будет просто перекладывать слова. Эта метафора точно отражает разделение труда: Attention - это коллективное обсуждение, где все делятся тем, что знают. FFN - это личный кабинет, куда сотрудник уходит, чтобы обдумать услышанное и сформулировать свою новую позицию. Без FFN модель была бы просто «пересказчиком»: она бы собрала информацию от соседей, но не смогла бы её переработать в новые смыслы. FFN даёт токену возможность «обдумать» услышанное, сделать выводы, сформулировать новую позицию. Это тот шаг, который превращает коллективное обсуждение в личное понимание.
Почему FFN называют чёрным ящиком (даже инженеры)
Мы спроектировали FFN: два линейных слоя, нелинейность между ними, расширение в 4 раза и сжатие обратно. Архитектура полностью прозрачна. Но числа внутри - веса - выучились автоматически из данных. И вот тут начинается проблема.
Мы не можем открыть обученную модель, ткнуть пальцем в конкретный нейрон и сказать: «вот этот отвечает за котов, а этот - за глагол „есть“». Знание не локализовано. Оно размазано по миллионам параметров.
Более того, мы не можем объяснить на человеческом языке, почему конкретный входной вектор превратился в конкретный выходной. Ответ всегда один: «потому что так сошлись миллиарды умножений».
Это не «чёрный ящик» в смысле «не знаем, как он устроен». Архитектуру мы знаем идеально. Это «чёрный ящик» в смысле «не можем перевести его внутреннюю работу на человеческие правила и понятия».
И это фундаментальное ограничение. Не баг. Не фича. Просто реальность глубоких нейросетей.
4. Add & Norm (Добавление и нормализация) - Второй раз
И снова, после того как токен «подумал» в FFN, мы подстраховываемся остаточной связью. Вдруг размышления завели не туда? Всегда можно вернуться к тому, что было до них. После этого блок может считаться завершённым, и обработанные векторы отправляются на следующий этаж конвейера.
Что это
То же самое, что и в пункте 2, но теперь мы складываем вход в FFN с выходом из FFN.
Зачем
Опять страхуемся, чтобы FFN не испортила то, что насобирал Attention. Если FFN сработала плохо, у нас есть «путь обхода» через остаточную связь.
Мы разобрали, как устроен один блок. Но в настоящем трансформере таких блоков не один, а десятки - от 32 до 128 и больше. Зачем нужно так много? Неужели одного недостаточно?
Дело в том, что понимание текста строится поэтапно, от простого к сложному. Первые слои разбираются с базовой механикой языка, следующие видят более крупные структуры, а глубокие слои способны улавливать тонкие смысловые оттенки. Давайте проследим этот путь.
Каждый следующий блок строит абстракцию5.
Слой 1: Видит буквы и слоги. Понимает, что «кот» - это одно слово.
Слой 2-5: Видит словосочетания («рыжий кот»).
Слой 10-20: Видит роли в предложении (кто действует, на кого действует).
Слой 30+: Видит смысл всего абзаца, тон, настроение, сложные логические связи.
Эти данные подтверждены визуализациями активаций нейросетей - например, в работах OpenAI (2019) по анализу GPT-2, где исследователи наглядно показали, как разные слои модели отвечают за разные уровни абстракции: от отдельных токенов до целых предложений и их смысла.
Если слоев мало - модель «мелковата» и может понимать только простые фразы. Чем больше слоев, тем сложнее концепции она способна выучить, но тем сложнее ее обучить (тут-то и помогают Add & Norm связи).
Как работает трансформер на уровне логики по шагам и на примере можно ознакомиться в Приложении 1.
Итак, после прохождения через все блоки у нас есть векторы, которые вобрали в себя и смысл каждого слова, и его связи с другими словами, и контекст всего предложения. Это - глубокое понимание текста, выраженное на языке чисел. Но наша цель - не просто понять, а сгенерировать ответ. Как из этого богатого внутреннего представления рождается новое слово? Об этом - в следующем разделе.
1.6 Выходной слой и генерация
Мы прошли долгий путь. Текст превратился в токены, токены - в эмбеддинги, эмбеддинги обогатились информацией о позиции, затем многократно прошли через блоки внимания и переработки. На выходе последнего блока у нас есть векторы, которые содержат в себе глубокое понимание всего контекста. Но как из этого понимания рождается новое слово? Как модель делает следующий шаг? Ответ - в выходном слое.
После последнего блока вектор каждого токена преобразуется в вероятность следующего токена через LM Head (language modeling head / головная сеть языкового моделирования) - это линейная проекция на размер словаря с последующей функцией softmax.
Звучит сложно, но на деле последний шаг устроен довольно просто. Вектор последнего токена (или специального токена-подсказки) проходит через финальный линейный слой, который превращает его в набор сырых оценок - по одной на каждое слово в словаре. Эти оценки называются логитами. Именно с ними и начинается игра.
1. Логиты и Softmax (Как получить вероятности)
Логиты - это «сырые» оценки, которые мозг ИИ выдает каждому слову. Например, кот = 100, собака = 90, астероид = 1. Это просто баллы, они могут быть любыми (хоть 1000, хоть -5). Сами по себе они неудобны для выбора.
Но логиты - это просто числа. Они могут быть 100, 90, 1, -5 - сами по себе они не говорят, насколько вероятно то или иное слово. Чтобы получить удобоваримые вероятности, нужен специальный преобразователь.
Softmax - это функция, которая превращает эти сырые баллы в проценты (вероятности), чтобы их сумма равнялась 100%. Результат: кот = 60%, собака = 39%, астероид = 1%.
Итак, у нас есть честные вероятности: кот 60%, собака 39%, астероид 1%. Казалось бы, всегда выбирай самое вероятное - и дело с концом. Но такой подход сделает текст скучным и предсказуемым. Иногда нам нужна креативность, иногда - строгая точность. Для этого инженеры придумали несколько регулировок.
На этапе генерации модель не всегда выбирает токен с максимальной вероятностью. Используются параметры:
2. Температура (Temperature)
Первая и самая известная регулировка - температура. Это ручка, которая крутит «креативность» модели. T -> 0 (Холодно): Модель становится жадной и почти всегда выбирает самое вероятное слово (Кот). Текст получается точный, но скучный и предсказуемый.
T = 1 (Норма): Оставляем проценты как есть (Кот 60%, Собака 39%).
T > 1 (Горячо): Модель выравнивает шансы. Кот может получить 35%, Собака 34%, и даже Астероид 31%. Модель начинает «креативно» выбирать странные варианты, но может начать бредить.
Иногда же нам нужно сказать: «Редкие слова не рассматриваем, оставляем только основных претендентов». Для этого есть два фильтра - P и K.
3. Top-P (Ядро, nucleus sampling)
Это фильтр «пока не накопится».
Как работает
Модель сортирует слова от самых вероятных к самым редким и складывает их проценты, пока сумма не достигнет порога P (например, 0.9 или 90%). Остальные слова выкидываются.
Пример
Вы включили этот фильтр. Модель берет Кота (60%) + Собаку (39%) = 99% (порог P=0.9 пройден). Астероид (1%) вылетает, потому что он лишний. Выбор идет только между Котом и Собакой.
4. Top-K (K-лучших)
Top-P работает по принципу «накопи достаточно». А есть другой подход - более жёсткий: оставить ровно K лучших, и точка. Это фильтр «оставить только K претендентов». Модель оставляет только K самых вероятных слов, все остальные отсекает.
Пример: K=2. Оставляем Кота (60%) и Собаку (39%). Астероид (1%) вылетает. Выбор только из двух.
Итог
> Логиты - оценки.
> Softmax - превращает оценки в понятные доли.
> Температура - делает выбор более плоским или острым.
> Top-P - оставляет слова, пока не наберется нужная сумма вероятностей.
> Top-K - оставляет строго K самых вероятных слов.
Процесс повторяется авторегрессивно - только что сгенерированное слово добавляется к входной последовательности, и модель предсказывает следующее. Так продолжается, пока не будет сгенерирован токен конца последовательности или не достигнут лимит длины.
Теперь вы знаете главные рычаги управления генерацией. Комбинируя температуру, Top-P и Top-K, можно получать и строгие технические тексты, и творческие рассказы, и всё что между ними. Инженерный выбор зависит от задачи.
Мы замкнули цикл. От одинокого токена на входе мы дошли до генерации нового слова на выходе. Теперь вы понимаете, как устроен «мозг» современных языковых моделей - от первой до последней операции.
Но мир ИИ не ограничивается генеративными трансформерами. Существуют и другие архитектуры, каждая со своими сильными сторонами: свёрточные сети для картинок, рекуррентные для последовательностей, диффузионные для генерации изображений. И даже внутри семейства трансформеров есть важное разделение на энкодеры, декодеры и их комбинации.
В следующей главе мы совершим экскурс по основным типам архитектур, чтобы понимать, какой инструмент для какой задачи выбирать.
1.7 Галлюцинации: когда модель уверенно врёт
Мы разобрали, как модель генерирует текст: шаг за шагом, выбирая следующее слово на основе вероятностей. Но из этого механизма вытекает фундаментальная особенность, о которой нельзя молчать.
Что такое галлюцинация?
Галлюцинация
это когда модель генерирует утверждение, которое звучит правдоподобно, но не соответствует фактам, не следует из контекста или даже противоречит здравому смыслу.
Модель может
· Придумать несуществующую цитату из книги, которой вы её спросили.
· Назвать неверную дату исторического события с полной уверенностью.
· Составить список литературы, где авторы и названия перемешаны случайным образом.
· Описать функциональность API, которого никогда не существовало.
Почему это происходит?
Не потому, что модель «врет» в человеческом смысле. У неё нет намерения обманывать. У неё вообще нет намерений.
Причина - в самой природе генеративного трансформера:
Вероятностная природа
Модель не хранит «базу фактов». Она хранит статистику - какие последовательности токенов с какой вероятностью встречались в обучающих данных. Когда она предсказывает следующее слово, она выбирает вариант, который статистически правдоподобен. Но «правдоподобно» не равно «истинно».
Отсутствие референции
Модель не имеет доступа к «источнику истины». Она не может «посмотреть в энциклопедию» во время генерации (если только вы не добавили RAG - Retrieval-Augmented Generation – Поиск и генерация). Она работает только с тем, что у неё есть в весах и в контекстном окне. Если нужной информации нет, она не скажет «я не знаю», а сгенерирует наиболее вероятное продолжение - которое может оказаться вымыслом.
Компрессия знаний
Обучение модели
это сжатие триллионов токенов в миллиарды параметров. Как в любом сжатии, часть информации теряется. Модель «запоминает» общие закономерности, но может забыть (или смешать) редкие детали. Когда её спрашивают о таком редком факте, она «восстанавливает» его по аналогии - и часто ошибается.
Соблазн угодить
В процессе RLHF модели учат быть полезными. Иногда это приводит к тому, что модель предпочитает дать какой-то ответ, даже если не уверена, вместо того чтобы признаться в незнании.
Как снижать галлюцинации по степени надёжности

Инженерный взгляд: это не баг, это особенность архитектуры
Галлюцинации - не ошибка, которую можно «починить» в следующем обновлении. Это фундаментальное свойство генеративных моделей, основанных на предсказании следующего токена.
Их можно снижать, но нельзя устранить полностью:
Увеличением контекста
Чем больше релевантной информации вы дадите модели в промте, тем меньше ей придется «додумывать».
RAG (Retrieval-Augmented Generation)
Подставляйте в контекст факты из надёжных источников (баз знаний, документов) перед генерацией.
Дообучением
Можно уменьшить склонность к галлюцинациям, дообучая модель на данных, где «я не знаю» - допустимый и поощряемый ответ.
Температурой и Top-P
Снижение «креативности» (температура → 0) уменьшает вероятность выбора неожиданных, а значит, потенциально ложных вариантов.
Ансамблями
Спросить одну и ту же модель несколько раз с разными настройками или несколько разных моделей - и сравнить ответы.
Что это значит для вас
Если вы строите систему, где фактические ошибки недопустимы (медицина, юриспруденция, финансы), вы не можете полагаться на одну LLM в чистом виде. Вам нужны дополнительные слои: проверка фактов, RAG, контрольные модели-критики, человеческая валидация.
Галлюцинации - это плата за универсальность и креативность. Понимание их природы - первый шаг к тому, чтобы строить надежные системы на ненадежных в своей основе инструментах.
1.8 RAG: как модель не выдумывает факты
В разделе 1.7 мы выяснили, что галлюцинации - фундаментальное свойство генеративных моделей. Но их можно снижать. Самый эффективный способ - RAG (Retrieval-Augmented Generation). Однако RAG не устраняет галлюцинации полностью - он лишь заменяет одни их источники на другие: вместо выдумывания из памяти модель начинает ошибаться в извлечении, ранжировании или игнорировании найденных документов.
Проблема
Модель знает только то, что выучила во время обучения (данные 2024–2025). Она не знает ваш договор, переписку или свежие новости.
Идея RAG
Перед тем как ответить, модель идёт в базу знаний (векторную БД), находит там релевантные документы и подставляет их в контекст. Ответ строится не на памяти модели, а на фактах из ваших документов. Однако важно понимать: RAG не переучивает модель - он лишь временно докладывает документы в окно контекста, поэтому после ответа модель «забывает» эти данные.

Как именно модель ищет документы? Каждый документ (или его фрагмент) превращается в вектор - эмбеддинг. Эмбеддинги устроены так, что семантически похожие тексты оказываются рядом в пространстве. Запрос пользователя тоже превращается в вектор, и база данных найдет документы с самыми близкими векторами. Для этого используют специальные эмбеддинг-модели (например, intfloat/multilingual-e5-large), которые обучаются максимально точно отражать смысл текста в векторе.
Семантический поиск
это как раз то, что здесь описано. Поиск по смыслу, а не по словам («автомобиль» найдёт «машина», «транспортное средство» и «железный конь»). В отличие от лексического поиска (как Ctrl+F), он работает через эмбеддинги. Именно благодаря ему RAG понимает, какие документы реально релевантны запросу, даже если слова не совпадают буквально.
Критический нюанс
размер фрагмента (chunk size) при индексации сильно влияет на качество - слишком короткие чанки теряют контекст, слишком длинные размывают релевантность.
Как это работает (метафора)
Представьте, что вы сдаёте экзамен по открытой книге. Модель без RAG - это студент, который учил билеты год назад и всё забыл. Модель с RAG - это студент, который открывает книгу, находит нужную страницу и читает ответ с неё. Но даже с открытой книгой студент может прочитать не тот параграф - поэтому критически важна гигиена данных: мусор в базе знаний ведёт к мусору в ответе. Качество индексации и чанкинга важнее самой модели.
Почему RAG не заменяет память модели
· RAG требует хорошего поиска. Если поиск нашёл не тот документ - ответ будет неверным.


