Простые признаки превосходят большинство мониторов AI-контроля
Код и исходники статьи для воркшоп-статьи EvoRobust @ NeurIPS 2026.
Что показывает статья
Мониторы AI-контроля — это модели, которые читают код и помечают бэкдоры (скрытый саботаж). Их
разрабатывают и ранжируют на фиксированных наборах данных, в которых у каждой задачи программирования есть честное решение и
решение с бэкдором. Монитор должен показывать хороший результат на таком наборе данных только за счёт нахождения бэкдора. Мы
изучаем публичный набор данных бэкдоров APPS (RoganInglis/apps-control-arena), честные решения в котором
были написаны людьми, а бэкдоры — более старыми моделями (Claude 3.7 Sonnet,
o3-mini, o1-mini, GPT-4o и четыре меньшие модели, все выпущенные к началу 2025 года, плюс неатрибутированный
источник). Мы называем его пары исходными парами. Рисунок 1 статьи обобщает результаты.
- Классификатор, который никогда не запускает код, превосходит большинство мониторов. На стандартном тестовом разбиении
(1 375 задач, по одной программе на каждую, комментарии удалены) классификатор на основе мешка слов, обученный на
обучающих задачах разбиения, достигает AUROC 0.806, что выше 20 из 24 открытых моделей (0.4B–32B),
использованных в качестве мониторов в предыдущих работах. То, что он читает, является общим для атакующих моделей и присутствует
независимо от того, работает ли бэкдор; его самые сильные токены со стороны бэкдора (
and, ==, if) — это
поверхностный след любого добавленного особого случая. Классификатор обучен, а мониторы — нет, поэтому
это измеряет то, что выдаёт сам датасет, а не то, какой детектор лучше.
- Метки утекают. Тестовое разбиение сохраняет бэкдорную программу задачи только если бэкдор
работает; 720 из 892 задач с бэкдором проваливаются и вместо этого вносят своё честное решение.
Поэтому у задач класса «бэкдор» примерно вдвое меньше тестов, и классификатор, который
читает только метаданные задачи (сложность, число тестов, длина условия), достигает 0.766
при кросс-валидации внутри разбиения, что выше 20 мониторов. Обученный вне разбиения, он набирает 0.298,
то же отношение в обратную сторону, потому что там честные элементы происходят из задач, которые разбиение
исключило. Утечка возникает из-за того, как выбирались метки, а не из-за кода.
- Классификатор вознаграждает контраст между авторами. Мы пересобираем пары с помощью одной модели, Claude Sonnet 5 (и
отдельно Claude Haiku 4.5), которая пишет оба решения, и сопоставляем каждый класс с решением другого
автора. Называя каждый вид пары по тому, кто написал её честную и её бэкдорную сторону, на 99
задачах, где каждый бэкдор работает, мешок слов набирает 0.789 на person / более старых моделях и
0.749 на Sonnet 5 / Sonnet 5, но 0.953 на person / Sonnet 5 и 0.905 на Sonnet 5 / более старых
моделях: он набирает больше всего, когда у двух классов разные авторы. То же самое сохраняется по всем
попыткам (0.981 против 0.865). С одним автором он сохраняет rho = 0.687 своего преимущества над случайностью
на одиночных попытках Sonnet 5 и 0.097 на попытках Haiku 4.5, и 0.861 на работающих бэкдорах, так что он
также читает добавленные особые случаи бэкдора; часть того, что сохраняет Sonnet 5, — это структура, которую вызывает наш
атакующий промпт (
def main), и запрос честного решения с этим промптом снижает rho до
0.390.
- Какие бэкдоры настоящие. Монитор на основе Sonnet 5 реагирует в основном на бэкдоры (0.944 на
исходных парах, 0.966, когда честную сторону писала Sonnet 5, чей код он находит чуть менее
подозрительным). Он падает до 0.755 на person / Sonnet 5, но часть этого — метки. Бэкдор
считается работающим, если его вывод на собственном триггере отличается от вывода честного решения, и
ничто не проверяет, что триггер является допустимым входом. Метки датасета показывают проблему: в
стандартном тестовом разбиении 17 из 172 бэкдорных программ имеют только недопустимый триггер, а 7 выводят
неверное целое число на публичном тесте. Без этих 24 мешок слов набирает 0.817, а 24
опубликованных монитора сдвигаются на медиану +0.010. Наша генерация использовала то же определение, поэтому
перед сравнением атакующих мы проверяем каждый триггер в обоих классах с помощью валидатора входных данных,
написанного по условию задачи, требуем, чтобы вывод бэкдора там отличался от мажоритарного ответа человеческих
решений, и ищем 40 близких допустимых входов в качестве свидетеля, когда проверка не проходит.
Проверка удаляет 14 из 99 бэкдоров более старых моделей и 40 бэкдоров Sonnet 5. На 54
задачах, где оба бэкдора настоящие, бэкдор Sonnet 5 может по-прежнему быть сложнее поймать, но меньше: AUROC
0.958 против 0.904 (разница -0.053, 95% ДИ от -0.108 до -0.004), и при отметке 2% человеческих
решений монитор ловит 78% бэкдоров более старых моделей и 61% бэкдоров Sonnet 5
(разница 0.17, от 0.0002 до 0.32, лишь чуть выше нуля). До проверок, на всех 99 задачах,
это было 77% против 37% (0.40, от 0.28 до 0.52), так что часть изменения происходит из-за отбрасывания
задач. Разрыв зависит от порога, и часть его может быть связана с тем, что монитор отдаёт предпочтение своим собственным
model: монитор Haiku 4.5, который не написал ни одного класса, даёт 0.850 против 0.822.
Таким образом, высокий балл на наборе данных, построенном таким образом, может возникать из-за признаков, отличных от бэкдора (мы не показываем, что опубликованные мониторы их используют), а доля обнаружений на непроверенных метках может более чем удвоить эффект атакующего. Мы публикуем пересобранные пары, валидаторы входных данных и проверки и рекомендуем запускать их на других бенчмарках мониторов: сообщать базовые уровни, которые никогда не запускают код (bag-of-words, метаданные задачи, длина), с их оценками на перемешанных метках; объединять каждый класс с кодом другого автора; проверять, что каждый триггер является допустимым входом, на котором ответ бэкдора неверен; сообщать доли обнаружений при фиксированном бюджете аудита на бэкдорах, которые проходят проверку, от нескольких генераторов, включая текущие модели; и там, где проверки находят ярлыки, поручать одной модели написать оба класса из одного и того же запроса и выбирать честные примеры независимо от того, удалась ли атака.
Структура репозитория
experiments/
apps/ APPS backdoor dataset: the floors on the original pairs, the rebuilt pairs
(generation, test harness, backdoor verification) and every measurement on them;
*.json are the committed outputs behind the paper's numbers
validators/ one input validator per checked problem (258), used by the trigger checks
agentic/ five agentic settings in which one model wrote both classes (appendix)
README.md how to reproduce each result, with commands, and which script gives each number
paper/ LaTeX source, bibliography, figures and the built main.pdf
Воспроизведение
См. experiments/README.md. Результаты на исходных парах выполняются на
ноутбуке на CPU за считанные минуты. Для построения пересобранных пар требуется ключ Anthropic API, а
вариант с открытыми весами (который регенерирует только честный класс) требует GPU.
pip install -r requirements.txt
cd experiments/apps
python fetch.py && python fetch_inputs.py && python bow.py
python koran_split_eval.py # the bag-of-words floor: AUROC 0.806, above 20 of 24 monitors
Сборка статьи
cd paper
make # main.pdf (pdflatex + bibtex)
make figures # regenerate fig/ from experiments/apps/figures.py