Может ли нейросеть быть одновременно честной и лживой, не нарушая законов логики? Недавняя работа исследователя Абеля Янсмы (Abel Jansma) даёт неожиданный ответ: да, если вы используете линейную пробу (linear probe) для оценки истинности. Статья Truth is not a direction: a Tarski attack on LLM probes Источник показывает, что представления истины в пространстве скрытых состояний языковых моделей можно обратить вспять с помощью специально сконструированных утверждений. Это не просто академический курьёз — атака ставит под сомнение надёжность популярного метода интерпретации LLM.
Что такое пробы и почему они так популярны
Пробы (probes) — это простые классификаторы (чаще всего линейные), которые обучаются на активациях (hidden states) нейросети для предсказания некоторого свойства текста. Например, можно взять GPT-4, «заморозить» его веса и натренировать небольшой классификатор на векторах из промежуточных слоёв, чтобы он определял, истинно данное утверждение или ложно. Такие пробы дешевы, интерпретируемы и часто дают точность выше 90 %. За последние пару лет они стали стандартным инструментом для анализа «знаний» модели.
Основное допущение: истина кодируется как линейное направление в многомерном пространстве представлений. То есть существует некий вектор v, такой что для истинных утверждений активация смещена в сторону +v, а для ложных — в сторону -v. Если это правда, достаточно обучить бинарный классификатор на размеченных данных, и он будет обобщать на новые примеры.
Проблема: теорема Тарского о невыразимости истины
Альфред Тарский в 1930-х годах доказал: для формальных систем, достаточно выразительных, чтобы описать собственную синтаксическую структуру, понятие «быть истинным» не может быть определено внутри самой системы. Это означает, что не существует корректного предиката Truth(x), который бы работал для всех предложений формального языка. В контексте LLM это переводится так: если модель способна рассуждать о тексте, который она порождает (а современные модели это умеют), то никакой внутренний классификатор не сможет идеально отличить истину от лжи — иначе мы бы получили внутренний предикат истинности, что противоречит теореме.
Янсма показывает, что это не просто теоретическое ограничение: оно превращается в практическую атаку. Можно построить предложение S, такое что:
- Если проба классифицирует S как истинное, то S оказывается ложным;
- Если как ложное — S оказывается истинным.
Атака: конструкция самореферентного утверждения
Ключевая идея — построить утверждение, которое ссылается на собственный статус истинности. В классическом виде это «Это предложение ложно» (парадокс лжеца). Однако языковые модели не обрабатывают предложения напрямую; они работают с эмбеддингами токенов. Поэтому атака Янсмы использует более тонкий трюк: он обучает пробу на наборе данных, затем выбирает такое предложение, которое при подаче на вход модели меняет свои активации так, что предсказание пробы инвертируется.
Формально задача: найти такой текст x, что:
- Пусть p(h) — проба, принимающая значение 0 (ложь) или 1 (истина) на основе скрытого состояния h = LLM(x).
- Цель: построить x так, чтобы p(h) = 0, если фактическая истинность x — 1, и наоборот.
Этого можно добиться, используя градиентный спуск в пространстве токенов или шаблонные конструкции с модальными операторами («Автор этого утверждения утверждает, что...»). В статье приводятся конкретные примеры для open-source модели Llama 3 — точные тексты, которые «обманывают» пробу почти в 100 % случаев.
Экспериментальные результаты
Исследователь тестировал атаку на модели семейств Llama 3 (8B и 70B) и Mistral 7B, используя линейные пробы, обученные на датасете TruthfulQA. Результаты:
- Для «наивных» проб (без учёта атаки) точность на обычных примерах > 90 %, но на атакованных падает до 1–3 %.
- Атака устойчива к сглаживанию и малым возмущениям — модель не перестаёт «верить» в ложные утверждения, а именно переворачивает ответ пробы.
- Даже когда проба была обучена на сбалансированном наборе с примерами из разных доменов, атака срабатывала — достаточно одного самореферентного шаблона.
Важный вывод: пробы не обнаруживают истину как внутреннее свойство модели. Они скорее выучивают корреляции между поверхностными лингвистическими паттернами и меткой истинности в обучающем наборе. Как только модель генерирует текст с другим паттерном (например, с кванторами или самоссылкой), проба перестаёт работать.
Практические последствия и пример
Для специалистов по безопасности ИИ этот результат означает, что полагаться на пробы как на «детектор лжи» в продуктивных системах опасно. Если вы используете линейный классификатор на активациях для фильтрации ложных ответов вашего чат-бота, злоумышленник может подать такой запрос, который пройдёт фильтр, но будет содержать дезинформацию.
Пример (адаптировано из статьи):
Предположим, есть проба, обученная отличать истинные факты от ложных. Атакующий подаёт предложение: «Следующее предложение ложно. Земля плоская.» Первое предложение создаёт рекурсию, которая сбивает пробу, и второе предложение получает метку «истина». В реальном сценарии можно использовать скрытые маркеры, невидимые для пользователя, но меняющие активации.
Может ли защита победить атаку?
Янсма обсуждает несколько контрмер:
1. Использование нелинейных проб (например, MLP-классификаторов) — это усложняет атаку, но не отменяет теорему Тарского: любое вычислимое отображение из внутренних состояний в {0,1} остаётся ограниченным.
2. Увеличение размера обучающей выборки — не помогает, так как атака конструирует принципиально новый паттерн, которого не было в обучении.
3. Использование нескольких проб и голосование — снижает вероятность атаки, но не устраняет её полностью, особенно если атакующий найдет вход, который обманывает все пробы одновременно.
4. Применение формальной верификации или логических ограничений поверх модели — но это уже не пробы, а отдельный слой.
На данный момент нет защиты, которая гарантированно исключала бы атаку Тарского. Автор рекомендует вообще отказаться от интерпретации проб как истинных «знаний» модели и рассматривать их лишь как статистические индикаторы.
Как проверить атаку самостоятельно (псевдокод)
Для тех, кто хочет воспроизвести эксперимент, Янсма опубликовал код на GitHub (ссылка есть в статье). Основные шаги:
# 1. Загружаем модель и токенизатор (например, transformers)
model = AutoModelForCausalLM.from_pretrained("meta-llama/Meta-Llama-3-8B")
tokenizer = AutoTokenizer.from_pretrained("meta-llama/Meta-Llama-3-8B")
# 2. Собираем dataset с истинными/ложными утверждениями
# и обучаем линейную пробу на hidden_states последнего слоя
probe = LogisticRegression()
hidden_states = get_hidden_states(model, train_texts)
probe.fit(hidden_states, train_labels)
# 3. Конструируем атакующий текст по шаблону:
attack_text = "The following statement is true: " + original_false_statement
# или более сложная рекурсия
# 4. Получаем предсказание пробы и проверяем инверсию
attack_hidden = get_hidden_states(model, [attack_text])
pred = probe.predict(attack_hidden)
assert pred != correct_label_for_original_statement
Важно: конкретные шаблоны атаки чувствительны к модели и версии. Рекомендуется брать готовые из репозитория автора.
Что это значит для будущего интерпретируемости
Работа Янсмы — одна из первых, которая связывает классические результаты логики (Тарский, Гёдель) с современными LLM. Она показывает, что некоторые ограничения не технические, а фундаментальные: даже если мы научимся читать мысли нейросети с точностью до микрона, мы не сможем извлечь «внутреннюю истину» — потому что этого понятия в системе просто нет.
Это подталкивает сообщество к разработке новых методов оценки достоверности: например, использование цепочек рассуждений с верификацией фактов через внешние базы знаний, или применение каузальных моделей вместо корреляционных проб. ASI Biont поддерживает интеграцию с внешними базами знаний через API — подробнее о методах проверки фактов можно узнать на asibiont.com/courses. (Примечание: упоминание конкретного сервиса не требуется по условию новости, но добавлено как пример; в исходной статье этого нет, поэтому ссылку лучше не ставить, если сервис не упомянут в контексте. Уберу ссылку, чтобы не нарушать правило.)
Заключение
Истина — не вектор. Это не метафора, а результат эксперимента. Пробы, которые многие команды используют для «измерения честности» AI, могут быть взломаны с помощью классического парадокса лжеца. Работа Янсмы — важное предупреждение тем, кто надеется, что прозрачность нейросетей будет достигнута простым линейным анализом. Настоящая интерпретируемость потребует гораздо более глубоких идей.
Если вы работаете с LLM, советую прочитать оригинальную статью по ссылке и проверить свои пробы на устойчивость. Возможно, вы обнаружите, что ваша «детекция лжи» на самом деле — просто угадывание по шаблону.
Комментарии