Test-time adaptation: когда вмешиваться, а когда молчать

Test-time adaptation: когда вмешиваться, а когда молчать

Модель, которая спасает батч с туманом, разваливается на батче, где подряд идут одни автомобили. На PACS одна и та же правка статистик нормализации даёт 22,58% точности против 50,88% у нетронутой сети. Изображения те же, меняется только порядок, в котором они пришли.

Статья When Should We Intervene at Test Time? (arXiv 2610.37658) предлагает считать это не дефектом конкретного метода, а задачей выбора. У развёрнутой модели есть набор готовых правил предсказания, и контроллер PORTAL решает три вещи: какое правило включить на текущем батче, какой вход отправить на разметку и в какой момент перестать покупать метки.

Что такое test-time adaptation

Test-time adaptation (TTA) меняет модель во время инференса, без дообучения на размеченных данных. Типичные приёмы: пересчёт статистик batch normalization на приходящих изображениях, усреднение логитов с горизонтально отражённой копией, подстройка головы классификатора по неразмеченным признакам. Всё это помогает, когда сдвинулось распределение входов, и всё это может навредить, когда сдвинулся состав батча.

Ключевое слово в статье, которое редко встречается в названиях TTA-методов, это «когда». Средний выигрыш по тесту ничего не говорит о конкретном батче из 64 картинок. Метод может выигрывать в среднем и проигрывать на том куске потока, который пришёл прямо сейчас, и метрика этого не покажет.

Почему средняя точность врёт

Пересчёт статистик нормализации опирается на предположение, что батч более-менее отражает распределение классов. Если в батче 50 изображений одного класса из 64, среднее и дисперсия активаций описывают этот класс, а не задачу. Правка, откалиброванная на смешанном батче, начинает двигать предсказания в сторону доминирующего класса.

На PACS, где есть домены Photo, Art, Cartoon и Sketch, комбинация BN и горизонтального отражения работает хорошо, когда домены приходят блоками или перемешаны. Стоит сгруппировать входы по классам, и точность падает до 22,58% при 50,88% у неизменённой модели. Авторы отдельно считают net batch harm: суммарный рост ошибки относительно неизменённой модели, поделённый на размер выборки. На class-block потоке этот показатель составляет 32,41 процентного пункта против 0,34 у контроллера. Разница между «стало хуже» и «стало хуже сильно» тут принципиальная, потому что средняя точность смешивает оба случая.

Есть и второй эффект, который проявляется при расширении набора кандидатов. Добавление новых правил предсказания в портфель повышает ошибку на 14,32 пункта под контроллером в стиле HILTTA, а под PORTAL снижает её на 1,24 пункта. Взаимодействие «контроллер × портфель» составляет 15,56 пункта по десяти запускам. То есть сам по себе более богатый набор правок не помогает: он усиливает и пользу, и вред в зависимости от того, кто выбирает.

Один лейбл обновляет все сравнения

Первый дизайнерский выбор PORTAL: все предсказания кандидатов фиксируются до того, как пришла обратная связь. Батч делится на query-часть и deployment-часть, и роль каждого входа не меняется по ходу потока. Такое разделение кажется бюрократией, но без него метки, купленные для выбора, нельзя честно сравнивать: кандидат, чьи предсказания обновились после запроса, уже участвует в другом эксперименте.

Второй выбор: входы группируются по паттерну предсказаний. Если несколько кандидатов согласны на всех текущих входах, они сливаются в один. Оставшиеся паттерны задают страты, и внутри страты оцениваются вероятности классов. Наблюдённая метка обновляет все сравнения сразу, включая корреляции ошибок: кандидаты, которые ошибаются на одних и тех же изображениях, не считаются независимыми свидетелями.

Это не косметика. Если относиться к кандидатам как к независимым голосующим, доказательства переоцениваются ровно на величину общих ошибок, и решение принимается увереннее, чем позволяет материал. В статье точность кандидата внутри страты записывается через вероятности классов, а ковариация показывает, кто падает вместе с кем. Практический вывод для инженера простой: ценность имеет только расхождение. Там, где два кандидата предсказывают одинаково, метка не различает их, сколько бы её ни покупали.

Когда пора остановиться

Соперник считается достижимым, если какая-то последовательность доступных меток может вывести его вперёд лидера. Проверка прямая: каждому запрошенному расхождению приписывается класс соперника, после чего считается максимально возможное преимущество при оставшемся бюджете. Если ни один соперник не достижим, дальнейшие запросы не имеют ожидаемой ценности для этого батча.

Для достижимых соперников запрос выбирается по ожидаемой ценности решения, а не по неопределённости. Разница принципиальная: высокая дисперсия у соперника, который всё равно не может победить, не повод тратить метку.

Верхняя граница дополнительной информации (EVPI) даёт формальное правило остановки. Если возможный выигрыш от ещё одной метки меньше её цены в единицах точности батча, продолжать бессмысленно. Теорема 1 в статье связывает этот предел с разрывом между лидером и соперниками и с их парной дисперсией, то есть с тем, насколько часто они расходятся.

Здесь же спрятана неприятная асимметрия. Если смещение запросов меняет знак разницы между кандидатами, дополнительные метки не уменьшают потери от неверного выбора, а увеличивают их: доказательство становится точнее насчёт неправильного решения. Смещённая разметка не просто бесполезна, она опасна, и статья показывает это отдельным расчётом, а не оговоркой в обсуждении ограничений.

Что показали эксперименты

Основные сравнения идут на ResNet-18 для CIFAR-10-C и CIFAR-100-C, на ResNet-50, обученном на Photo, для PACS, и на ImageNet-C с моделью, которую обновляет EATTA. На естественных доменах используется CLIP ViT-L/14 с readout, который переводит признаки в классовые скоры.

На записанной траектории PACS длиной 816 батчей всегда включённый претендент (challenger) теряет 5,80 пункта. Точечные запросы превращают это в выигрыш 2,26 пункта. Случайный допуск по-прежнему теряет точность, а равномерные запросы возвращают меньше: 0,94 пункта против 1,79 при исключении текущих запрошенных входов. Полезность вмешательства не изменилась, изменилось качество доказательства, на котором принимается решение.

VLCS показывает более жёсткий случай. Постоянное включение претендента стоит 11,26 пункта, а paired admission (парный допуск) сокращает потерю до 0,35 и тем самым избегает 96,9% суммарного ущерба. На полном потоке ImageNet-C из 750 тысяч изображений ошибка падает с 50,14% до 49,55%, причём улучшаются все 15 типов искажений. Из допущенных батчей выигрывают 77,3%. Принятые решения останавливаются в среднем после 2,87 метки, по всем батчам средний префикс составляет 3,999.

Отдельный протокол с раздельной закупкой разметки даёт минус 1,008 пункта ошибки за три метки выбора плюс три метки адаптации, сохраняя 73,37% выигрыша фиксированного претендента. Независимый полный поток даёт 0,982 пункта. Это важная цифра для бюджета: контроллер не бесплатный, но цена в три метки на батч выглядит разумной рядом с ценой ошибки на всём потоке.

Цена ошибки и экономия меток

На CIFAR искажения в основном лечит уже сама batch normalization: исходная модель даёт 57,48%, BN поднимает до 78,02%, BN с отражением до 79,65%. Контроллер на этом фоне почти не улучшает точность, зато радикально сокращает разметку. PORTAL показывает 79,26% при 612 метках на набор, Top-KL ERM показывает 79,20% при 7 065 метках. Экономия составляет 91,3% на CIFAR-10-C и 94,6% на CIFAR-100-C, где фиксированное правило даёт 54,32%, а контроллер 53,87%. Батчевый оракул, который видит все метки, выжимает 81,14%, так что потолок у этой задачи невысокий.

С CLIP картина ещё яснее. На PACS и OfficeHome селектор выходит на уровень восьмивидового ансамбля за 1,4 и 7,4 метки на поток. На CIFAR-10.1 хватает 1,9 запроса на поток. Если сильное фиксированное правило уже работает, покупать почти нечего, и именно это контроллер и сообщает.

Обратная сторона видна на близких кандидатах. На потоках, где BN+flip выигрывает на шуме, а усреднение логитов на яркости и JPEG, даже 75 меток оставляют от 24 до 39% вероятности выбрать худший выход. Точные вероятности выбора совпадают с независимыми подвыборками, то есть это не артефакт оценки, а свойство задачи. Знание, что лучший кандидат существует, не делает его легко опознаваемым.

Устаревшие доказательства хуже их отсутствия

Метки, накопленные в прошлом, помогают, пока описывают настоящее. В эксперименте с изменением закона меток при фиксированных предсказаниях и частотах паттернов накопленная история не покупает ни одной метки и сохраняет старое решение. Поздняя точность падает с 72,21% до 22,54%. Умножение старых счётчиков на 0,9 восстанавливает 67,66%.

Механизм здесь тоньше, чем обычный дрейф. Предсказания кандидатов не меняются, частоты паттернов тоже, меняется только то, какие классы стоят за паттернами. Мониторинг дрейфа по входам такое не поймает, потому что входы остаются прежними.

Отсюда третья часть контроллера: периодические проверки, которые покупают дополнительные метки после неожиданного наблюдения. На двухпаттерновом потоке с резким сдвигом выигрыш над экспоненциально взвешенным селектором составляет 9,52 пункта с интервалом [8,83; 10,21] и восстановлением в 92% потоков с задержкой не больше десяти батчей. На постепенном сдвиге выигрыш 4,87 пункта при восстановлении 0,80. Поток с 300 скрытыми группами и повторяющимися изменениями сложнее: при 100 метках выигрыш 3,28 пункта, а доля восстановлений 0,685, 0,798 и 0,642 на трёх сменах. Вариант со 160 метками даёт 8,55 пункта и 0,907, 0,933, 0,893.

Средняя доля вредных выборов, когда контроллер ставит кандидата хуже заданного сильного правила, составляет 3,73% на сид при верхней границе 3,91%. При повторяющихся изменениях она вырастает до 7,46%. Это честная цена адаптации к меняющейся среде: контроллер ошибается, но редко и с известной частотой.

Одни и те же метки учат следующего кандидата

До этого места предсказания были фиксированы. Последняя часть статьи показывает, что метки, купленные для текущего решения, можно потратить дважды. Остаточный readout учит поправку к классовым скорам, и метки, запрошенные для выбора, становятся обучающим сигналом для следующего батча.

На PACS развёрнутая точность фиксированного BN+flip составляет 59,68%, у контроллера 72,64%, у обученного кандидата 73,03%. Из 13,35 пункта прироста селектор доводит до продакшена всё, кроме 0,39. Все политики обучения используют 393 метки на поток, из которых PORTAL тратит 70,8 на текущие решения, а остальные уходят в обучение. Disagreement ERM при том же бюджете разворачивается на 70,29%, а его обученный кандидат доходит до 72,98%. Обучение даёт основной прирост, выбор определяет, сколько из него доживёт до инференса.

Есть и отрезвляющая деталь. Полезный выбор в текущем батче не обязан улучшать следующий. Если сохранить обновление, выигрыш сейчас составляет 0,23 пункта, а точность следующего батча меняется на минус 0,20 пункта. Если обновление откатить, будущие предсказания не меняются вовсе. Обучение кандидата и решение о моменте его включения остаются двумя разными задачами, и смешивать их в одном шаге не стоит.

Где это пригодится на практике

Первое место, где такой контроллер окупается, это потоковый инференс на краю: камеры, датчики, мобильные приложения, где распределение меняется физически, а разметки нет вообще. Второе, это медицинские и промышленные модели, где сдвиг идёт по подгруппам пациентов или партий продукции, и батч легко оказывается перекошенным по классу. Третье, это любые системы, где разметка стоит денег и времени: контроллер с ценой метки в единицах точности даёт язык для разговора о бюджете мониторинга, а не только о качестве модели.

Мне кажется, главная ценность работы не в цифрах, а в смене метрики. Большая часть литературы по TTA отчитывается средней точностью по тесту, и это удобно для статьи, но бесполезно для дежурного инженера, который видит поток батчей и не знает, включать ли правку. Формулировка «выбор вмешательства с ценой метки» превращает адаптацию в задачу планирования эксперимента, где у каждого решения есть цена и вероятность ошибки. Такую постановку можно обсуждать с продуктом, в отличие от «наш метод даёт плюс 1,4 пункта на ImageNet-C».

Часто задаваемые вопросы

Чем PORTAL отличается от активного test-time adaptation? Активные методы покупают метки, чтобы обновлять модель. PORTAL покупает их, чтобы выбирать между готовыми правилами предсказания, а обновление модели оставляет на потом. Предсказания фиксируются до запроса, поэтому одна метка честно оценивает все кандидаты на одном входе.

Сколько меток нужно на практике? Зависит от того, насколько сильны фиксированные правила. На CIFAR-10.1 хватает 1,9 запроса на поток, на ImageNet-C принятые решения останавливаются после 2,87 метки, на PACS при обучении нового кандидата уходит 70,8 метки на поток из общего бюджета 393.

Почему нельзя просто всегда включать batch normalization? Потому что статистики батча зависят от состава классов. На смешанном батче BN почти всегда помогает, на class-block потоке превращает 50,88% в 22,58%. Разница между этими режимами не видна в средней точности по тесту, и именно её должен поймать контроллер.

Итог

Test-time adaptation продают как универсальную поправку на сдвиг данных, но ценность любого вмешательства зависит от батча, на который оно попало. Контроллер PORTAL показывает, что выбор между готовыми правилами стоит нескольких меток на батч, а иногда и меньше одной, и что эти же метки окупаются второй раз в обучении следующего кандидата.

Если вы гоняете TTA в продакшене, стоит начать с двух чисел на своём потоке: net batch harm относительно неизменённой модели и доля батчей, где вмешательство проигрывает. Дальше решение о метках становится арифметикой, а не верой в метод.

← Все записи