TL;DR
VDC (Validated Dominance Correction) — метод борьбы с галлюцинациями в мультимодальных моделях через проверку каждого сгенерированного токена. Исследователи проанализировали, как модель обрабатывает изображение и текст на каждом внутреннем слое, и обнаружили: правильные токены всегда становятся "главными" (доминантными) хотя бы в одном слое, а галлюцинации — никогда. Они остаются "второстепенными" на всех слоях, но постепенно накапливаются и в финале обгоняют правильный ответ.
Проблема: модель может правильно "видеть" объект на картинке (внимание сфокусировано на нужной области), но в последних слоях внезапно выдать неправильный токен. Например, всё время генерировала "чёрный" (про яблоко на картинке), а в последних двух слоях резко сменила на "красный". При этом "красный" ни разу не был топ-1 кандидатом — ни в визуальном восприятии (attention), ни во внутреннем знании (FFN). Он просто копился как второй-третий вариант и накопился до победы.
VDC проверяет каждый токен: был ли он доминантным (топ-1) в визуальном восприятии или внутреннем знании хотя бы на одном слое. Если нет — заменяет на самый частый доминантный токен из всех слоёв. Так модель выдаёт только "проверенные" слова, которые подтверждены либо картинкой, либо знаниями.
Схема метода
⚠️ Требует доступа к промежуточным слоям модели (API с logits)
ДЛЯ КАЖДОГО ГЕНЕРИРУЕМОГО ТОКЕНА:
ШАГ 1: Собрать доминантные токены со всех слоёв
→ Из attention-модуля (визуальное восприятие): d_attn[1], d_attn[2], ..., d_attn[L]
→ Из FFN-модуля (внутреннее знание): d_ffn[1], d_ffn[2], ..., d_ffn[L]
ШАГ 2: Проверить текущий токен x
→ Если x есть в списке доминантных → validated, оставить
→ Если x НЕТ ни в одном → hallucinated, заменить
ШАГ 3: Замена
→ Найти самый частый доминантный токен среди всех слоёв
→ Заменить x на него
Все шаги выполняются за один проход модели с извлечением промежуточных выходов.
Находки исследования
GATE-паттерн: как модель сканирует картинку
Исследователи отследили, куда модель "смотрит" на картинку в разных слоях. Обнаружили трёхстадийный процесс:
Global (слои 1-2): Широкое сканирование всей картинки. Внимание размазано везде — модель просто обозревает что есть.
Approach & Tighten (слои 3-26): - Approach (3-16): Модель читает инструкцию и начинает приближаться к нужным областям. Внимание к инструкции растёт. К слою 16 — пик внимания к инструкции. - Tighten (17-26): Фокус резко сужается на ключевых объектах. Периферия подавляется. Общий процент внимания к картинке даже падает — но не потому что модель отвлеклась, а потому что туго затянула фокус на главном.
Explore (слои 27-32): Внимание расширяется на дополнительные области вокруг объекта. Модель как бы "перепроверяет" окружение, прежде чем выдать ответ.
Инсайт: Когда в середине процесса у модели низкий процент внимания к картинке — это не значит, что она "забыла" про изображение. Наоборот — она максимально сфокусирована на ключевой детали.
SAD-паттерн: как рождаются галлюцинации
Исследователи отследили топ-5 кандидатов на каждом слое — отдельно для attention (что модель видит) и FFN (что модель знает). Обнаружили паттерн SAD (Subdominant Accumulation to Dominant):
Правильные токены хотя бы на одном слое становятся топ-1 в attention или FFN. Пример: токен "чёрный" (про яблоко) занял первое место на слое 17 и держался до слоя 30.
Галлюцинации никогда не становятся топ-1. Они постоянно "маячат" на 2-3-4 местах, слой за слоем накапливают вес и в последних слоях обгоняют правильный токен. Пример: токен "красный" был вторым-третьим на протяжении всех слоёв, но ни разу — первым. В последних двух слоях вдруг вышел в лидеры и попал в финальный ответ.
Инсайт: Если токен ни разу не был главным кандидатом ни в визуальном восприятии, ни во внутреннем знании — скорее всего это галлюцинация.
Применимость для обычного чата
Прямая применимость: НЕТ
VDC требует доступа к промежуточным слоям модели: - Извлечение logits из каждого слоя - Отдельный доступ к выходам attention и FFN модулей - Невозможно через веб-интерфейс ChatGPT/Claude
Это метод для разработчиков с API-доступом или собственными моделями.
Извлекаемый принцип: частично
Из исследования можно взять идею проверки обоснованности:
Принцип: Каждое утверждение модели должно иметь источник — либо видимое на картинке, либо общее знание. Если ни то, ни другое — вероятна галлюцинация.
Применение в промпте:
Опиши что на картинке. Для каждого объекта или детали укажи в скобках источник:
(В) — если вижу на картинке прямо сейчас
(З) — если это общеизвестный факт
(?) — если не уверен
Пример: "На картинке красное яблоко (В). Яблоки содержат витамин C (З).
Оно выглядит сочным (?)."
Если ставишь (?) — лучше не писать это утверждение вообще.
Это косвенная адаптация идеи VDC: модель сама маркирует уверенность в источнике. Но это не тот же механизм — модель может ошибаться в оценке своей уверенности.
Почему это работает (в VDC)
Слабость LVLMs: Модель может правильно "видеть" на ранних/средних слоях, но в последних слоях выдать галлюцинацию. Потому что финальный токен — это сумма всех слоёв, и "второстепенные" кандидаты накапливаются, постепенно обгоняя правильный.
Сильная сторона LVLMs: На каждом слое модель выделяет доминантный (топ-1) токен — самый уверенный кандидат в этот момент. Правильные токены всегда становятся доминантными хотя бы на одном слое — либо когда модель фокусируется на объекте (attention), либо когда активирует знание (FFN).
Как VDC использует это: Метод проверяет — был ли токен хоть раз "главным" на каком-то слое. Если да — модель в него верила, он прошёл валидацию. Если нет — токен всю дорогу был "второстепенным", просто накопился за счёт сложения — это признак галлюцинации. VDC заменяет такие токены на самый частый доминантный — тот, в который модель верила сильнее всего и чаще всего.
Ограничения
⚠️ Требует API с доступом к промежуточным слоям: Невозможно применить через обычный чат. Нужен код + API, позволяющий извлекать logits из attention и FFN на каждом слое.
⚠️ Работает только для мультимодальных моделей: VDC разработан для моделей типа LLaVA, InstructBLIP, Qwen-VL, которые работают с изображениями и текстом. Для чисто текстовых моделей принцип не тестировался.
⚠️ Не заменяет неправильную фокусировку: Если модель изначально неправильно поняла инструкцию или смотрит не на тот объект (ошибка в GATE-паттерне) — VDC не поможет. Метод исправляет только токены, которые "накопились без подтверждения", но не чинит неправильное восприятие.
⚠️ Косвенная адаптация (через промпт) — не гарантия: Попросить модель самой маркировать источники — это не то же самое, что VDC. Модель может ошибочно поставить (В) на галлюцинацию. Эффективность такого промпта значительно ниже оригинального метода.
Ресурсы
Revealing Perception and Generation Dynamics in LVLMs: Mitigating Hallucinations via Validated Dominance Correction
Авторы: Guangtao Lyu, Xinyi Cheng, Chenghao Xu, Qi Liu и др.
Университеты: Xidian University (Китай), Hohai University, A*STAR (Сингапур)
