Галлюцинации — это не случайность, а закономерность архитектуры
LLM выдает уверенный, но абсолютно ложный факт. Вы спрашиваете у GPT-4.5 или свежей LLaMA 4 о чем-то простом, а в ответ получаете исторический анекдот, который она только что придумала. Классика. Большинство статей предлагают поверхностные решения: «используйте лучший промпт», «добавьте RAG». Это как лечить симптомы, не понимая болезни.
Корень проблемы глубже. Он закопан в самой архитектуре трансформера, в том, как информация течет через десятки слоев. Этот поток данных называется residual stream — остаточный поток. И его геометрия, траектория движения векторов от токена к ответу, прямо отвечает за то, родится ли в конце правда или красивая, убедительная чушь.
Важно: галлюцинация — это не отсутствие знания. Это активный процесс генерации внутренне согласованной, но внешне ложной траектории в пространстве представлений модели. Модель не «не знает», она «уверенно ошибается».
Residual stream: информационное шоссе трансформера
Забудьте на секунду про attention и MLP-слои. Представьте residual stream как главную магистраль. Исходное векторное представление токена (эмбеддинг) заезжает на это шоссе. Каждый последующий слой — это съезд, где происходит обработка: внимание добавляет контекст, MLP вносит нелинейные преобразования. Но ключевой момент: результат работы слоя прибавляется к текущему состоянию потока, а не заменяет его полностью. Отсюда и «остаточность».
Так вот, галлюцинация начинается тогда, когда на каком-то из этих съездов поток сворачивает в «альтернативную реальность». Векторное представление смещается в область пространства, которая соответствует не фактам из обучающих данных, а внутренним паттернам ассоциаций модели, часто статистически правдоподобным, но фактически ложным.
Когда вектор сходит с ума: анатомия одной траектории
Как это выглядит на практике? Возьмем пример. Спросим у модели: «Кто изобрел телефон в 1875 году?». Правильный ответ — Александр Белл (с оговорками на исторические споры). Но представим, что модель галлюцинирует и говорит «Томас Эдисон».
- Слои 0-5: Residual stream кодирует базовые понятия: «изобретатель», «телефон», «1875». Геометрия нормальная — векторы лежат в кластерах, соответствующих фактам.
- Слои 6-15: Attention-механизмы собирают контекст. Здесь может начаться скольжение. Если в обучающих данных «Эдисон» и «изобретение» встречались вместе чаще, чем «Белл» и «телефон», ата может начать тянуть представление в сторону сильного, но неверного паттерна.
- Слои 16-30: MLP-слои усиливают это смещение. Они применяют нелинейные преобразования, которые могут «закрепить» ложную ассоциацию. Геометрия потока теперь явно отклоняется от траектории, ведущей к правильному ответу.
- Слои 31-выход: Unembedding-слой считывает итоговое состояние residual stream и проецирует его на словарь. Вектор теперь находится гораздо ближе к представлению «Томас Эдисон», чем к «Александр Белл». Галлюцинация материализована.
Исследователи из Tsinghua в работе про H-нейроны нашли конкретные нейроны, которые активируются именно в таких ситуациях, подталкивая поток к ложным выводам.
Инструменты для вскрытия: что использовать в 2026
Теория — это хорошо, но как это увидеть своими глазами? Для интроспекции современных моделей (тех же Qwen 4, Gemini 2.5 или LLaMA 4) нужны специальные библиотеки.
- TransformerLens: де-факто стандарт для механистической интерпретируемости. Позволяет останавливать выполнение на любом слое, смотреть активации, вмешиваться в residual stream. Активно развивается, на 2026 год поддерживает все основные архитектуры.
- NeuroScope (коммерческая платформа): облачный сервис с визуализацией траекторий residual stream в 3D/2D после PCA. Позволяет сравнивать, как один и тот же запрос обрабатывается разными моделями. Дорогой, но для исследований бесценен.
- Прямой доступ к весам через Hugging Face
transformersи кастомный код. Самый гибкий, но и самый сложный путь.
Совет: начните с открытых моделей среднего размера (7B-13B параметров), таких как LLaMA 3.1 8B или Qwen 2.5 7B. Их проще анализировать, и принципы те же, что и у гигантов на 400B.
Практикум: отслеживаем один ложный факт через слои
Вот схематичный код на Python, который показывает, как можно зацепиться за residual stream. Мы используем TransformerLens и модель LLaMA 3.1 8B (актуальную на 2026 год).
import transformer_lens
import torch
# Загружаем модель
model = transformer_lens.HookedTransformer.from_pretrained("llama-3.1-8B")
# Подготавливаем промпт
prompt = "Кто изобрел телефон в 1875 году?"
tokens = model.to_tokens(prompt)
# Запускаем модель с сохранением активаций
logits, cache = model.run_with_cache(tokens)
# Residual stream на слое 10 для последнего токена
# Форма: [batch, pos, d_model]
resid_stream_layer_10 = cache["resid_post", 10] # Состояние после 10-го слоя
resid_stream_layer_10_last_token = resid_stream_layer_10[0, -1, :]
# Сравним с residual stream для промпта с правильным ответом в контексте
prompt_with_truth = "Александр Белл изобрел телефон в 1875 году. Кто изобрел телефон в 1875 году?"
tokens_truth = model.to_tokens(prompt_with_truth)
_, cache_truth = model.run_with_cache(tokens_truth)
resid_truth = cache_truth["resid_post", 10][0, -1, :]
# Вычисляем косинусное расстояние между двумя векторами
cosine_sim = torch.nn.functional.cosine_similarity(resid_stream_layer_10_last_token, resid_truth, dim=0)
print(f"Косинусная схожесть траекторий на слое 10: {cosine_sim.item():.3f}")
# Если значение низкое (близко к 0 или отрицательное), значит, потоки уже разошлись.
Этот код — только начало. Настоящий анализ подразумевает построение траекторий по всем слоям и сравнение их между правильными и галлюцинирующими ответами. Как в статье «Когда LLM врет: отлавливаем галлюцинации линейкой в векторном пространстве», где предлагаются метрики для такого сравнения.
Можно ли исправить геометрию? Вмешательство и последствия
Зная точку, где residual stream сворачивает не туда, можно попытаться его «подправить». Это называется активационным инжинирингом.
Метод 1: RepE (Representation Engineering). Идея из статьи «RepE: Как хакнуть активации нейросети». Вы обучаете детектор на признаках галлюцинации в residual stream, а затем вычитаете этот направленный вектор из активаций во время инференса. Это как поставить дорожный знак «объезд» на съезде к галлюцинациям.
Метод 2: Прямая манипуляция (activation patching). Вы берете состояние residual stream из корректного прохода (где модель дала правдивый ответ) и вставляете его в проблемный проход на конкретном слое. Если после этого модель выдает правду, вы нашли точку поломки. Дальше можно пытаться обучать маленькие «заплатки» (adapter layers), которые будут корректировать поток в реальном времени.
Что дальше? Прогноз на ближайшие два года
К 2028 году, я уверен, отладка residual stream станет обязательным навыком для ML-инженеров, работающих с продвинутыми LLM. Мы увидим:
- Стандартизированные дашборды для визуализации траекторий, встроенные в фреймворки вроде Hugging Face.
- Автоматические детекторы галлюцинаций, которые мониторят геометрию residual stream в реальном времени и сигнализируют, когда вектор уходит в опасную зону. Возможно, даже с автоматическим применением коррекций RepE.
- Новые архитектурные трюки, вроде дублирования слоев, которые изначально проектируются для более стабильных, линейных траекторий, менее склонных к резким поворотам в сторону вымысла.
Главное — перестать относиться к LLM как к черному ящику. Residual stream — это окно внутрь. И чем лучше мы понимаем геометрию этого потока, тем ближе мы к созданию моделей, которые не просто генерируют текст, а рассуждают reliably. Пусть и с причудами тысячемерного пространства.