# Разбор FixMatch: как обучить нейросеть на 250 примерах вместо 50 тысяч

Источник: https://www.youtube.com/watch?v=eYgPJ_7BkEw
Канал: Yannic Kilcher
Опубликовано: 15.04.2020

---

В новом видеоролике популярный ИИ-блогер Янник Кильхер (Yannic Kilcher) разбирает научную статью исследователей из Google Research, посвященную алгоритму FixMatch. Этот метод значительно упрощает полуконтролируемое обучение (semi-supervised learning), эффективно сочетая в себе две классические концепции: регуляризацию согласованности и псевдоразметку. Ведущий подробно анализирует архитектуру данного подхода, приводит впечатляющие результаты тестов на известном датасете CIFAR-10, а также делится долей здорового скепсиса относительно реальных источников высокой эффективности алгоритма.

## 🧩 Суть полуконтролируемого обучения и проблема разметки данных
[[JUMP:00:00]]

В классических задачах машинного обучения специалисты часто сталкиваются с нехваткой размеченных данных. В полуконтролируемом обучении у исследователя есть два набора данных: очень маленький массив размеченных примеров (где для каждого объекта $X$ известна метка $Y$) и огромный массив неразмеченных данных (содержащий только объекты $X$). Главная цель этого подхода — использовать гигантский объем неразмеченной информации, чтобы помочь модели лучше уловить скрытые взаимосвязи и закономерности.

Для иллюстрации проблемы Янник Кильхер приводит понятный пример из медицинской сферы — классификацию снимков легких на предмет наличия опухолей. 



Сбор размеченных медицинских данных сопряжен со следующими трудностями:

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

При этом в базах данных любой больницы можно найти огромное количество депонированных, анонимизированных, но недиагностированных снимков. Аналогичная ситуация наблюдается и в обычном интернете: ручная разметка картинок людьми требует колоссальных трудозатрат, в то время как сеть переполнена неразмещенным графическим контентом. Задача FixMatch — заставить эти «сырые» данные работать на благо точности финальной модели.

## ⚙️ Архитектура FixMatch: синергия двух подходов
[[JUMP:02:21]]

Алгоритм FixMatch не изобретает компоненты с нуля, а элегантно объединяет два уже известных в индустрии метода:

1.  **Регуляризация согласованности (consistency regularization):** концепция, согласно которой модель должна выдавать похожие предсказания, если ей на вход подаются слегка измененные (пертурбированные) версии одного и того же изображения.
2.  **Псевдоразметка (pseudo-labeling):** идея использования самой нейросети для генерации искусственных меток класса для неразмеченных объектов.



Общая функция потерь ($Loss$), которую оптимизирует FixMatch, математически выглядит как сумма двух составляющих:

$$Loss = Loss_{supervised} + \lambda Loss_{unsupervised}$$

Здесь $Loss_{supervised}$ представляет собой стандартную кросс-энтропию для размеченной выборки, а $Loss_{unsupervised}$ — вспомогательную потерю для неразмеченных данных, перед которой стоит коэффициент баланса $\lambda$. Вся магия алгоритма, как подчеркивает Янник Кильхер, скрыта именно внутри вычисления несупервизируемой потери.

## 🔄 Две параллельные линии: слабая и сильная аугментация
[[JUMP:03:52]]

Процесс обработки неразмеченного изображения в FixMatch разделяется на два параллельных конвейера (пайплайна). Один и тот же исходный снимок подвергается двум разным типам трансформации (аугментации).

### Конвейер слабой аугментации (Weak Augmentation)
В этой ветке изображение изменяется незначительно. Исторически аугментация использовалась как легальный «чит» для искусственного расширения тренировочного датасета. Например, если взять фотографию кошки, случайно отрезать край (random crop) и растянуть его до исходного размера, картинка все равно останется кошкой. Нейросеть же воспринимает это как совершенно новый пиксельный паттерн, что помогает ей лучше обобщать данные на тестах. В пайплайне слабой аугментации FixMatch применяются:

* Случайное кадрирование и смещение (random crop / shift).
* Небольшой поворот картинки (rotation).
* Случайное горизонтальное отражение с вероятностью 50%.

Обработанное таким образом изображение пропускается через текущую версию модели, и на выходе получается распределение вероятностей классов. Исследователи берут класс с максимальным значением вероятности и превращают его в жесткую метку — так называемый «псевдолейбл» ($\hat{y}$). При этом в FixMatch внедрено важное условие: псевдометка принимается в расчет только тогда, когда уверенность модели ($P(Y)$) превышает жестко заданный порог. Если сеть сомневается, этот пример просто отбрасывается.

### Конвейер сильной аугментации (Strong Augmentation)
Параллельно исходное изображение направляется во вторую ветку, где его буквально «изувечивают». Цель сильной аугментации — исказить картинку до предела, но так, чтобы человек все еще мог распознать исходный объект (например, лошадь). В этом пайплайне алгоритмы (такие как CTAugment и Cutout) ведут себя агрессивно:

* Радикально изменяются оттенки цвета, тон и насыщенность (hue / color).
* Экспериментируют с контрастом и интенсивностью освещения.
* Случайные области изображения полностью перекрываются пустыми квадратами (метод Cutout).

Сильно искаженное изображение также отправляется в нейросеть для получения прогноза. 

### В чем главный трюк?
Главная хитрость FixMatch заключается в том, что псевдометка, полученная из «слабой» ветки, начинает принудительно считаться истинной меткой (ground truth) для «сильной» ветки. Модель штрафуют, если ее предсказание на сильно искаженном кадре не совпадает с псевдометкой, выданной на слабо измененном кадре. 

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

## 📈 Фантастические результаты на CIFAR-10
[[JUMP:12:00]]

Эксперименты авторов статьи на популярном бенчмарке CIFAR-10 продемонстрировали результаты, которые Янник Кильхер называет «невероятными» и «сумасшедшими». Для контекста: стандартный объем обучающей выборки CIFAR-10 составляет 50 000 изображений, а самый передовой уровень точности (State of the Art) на полной выборке колеблется в районе 96–97%.

FixMatch показывает следующие результаты при сокращении числа размеченных данных:

* **При 250 размеченных примерах** (всего по 25 картинок на класс, остальные не размечены) алгоритм достигает точности **94,3% – 94,9%**. Это практически вплотную приближает его к SOTA-результату, полученному на в 200 раз большем объеме данных.
* **При 40 размеченных примерах** (всего 4 лейбла на класс) точность модели составляет рекордные **88,6%**.
* **При 10 размеченных примерах** (ровно 1 изображение на класс) модель умудряется выдать около **78%** точности. 

Ведущий делает ремарку, что для теста с одним изображением на класс авторы, скорее всего, специально отобрали наиболее репрезентативные, «идеальные» образцы категорий. Тем не менее, удержание точности на уровне 78% всего по одной картинке — это потрясающий показатель.

## 🔬 Абляционное исследование и «подводные камни» гиперпараметров
[[JUMP:15:49]]

Чтобы докопаться до истины и понять, за счет чего FixMatch работает так хорошо, разработчики провели абляционное исследование (ablation study), поочередно отключая различные функции. Выяснилось, что дьявол кроется в деталях и тонких настройках.

В ходе тестов были определены критически важные факторы успеха:

* **Стратегия аугментации:** одновременное использование методов Cutout и CTAugment является строго обязательным. Отключение любого из них мгновенно приводит к росту ошибки классификации более чем на 1%. В масштабах борьбы за сотые доли процента это колоссальное падение.
* **Объем неразмеченных данных:** авторы зафиксировали прямую зависимость — чем больше соотношение неразмеченных картинок к размеченным, тем стабильнее падает уровень ошибок модели.
* **Оптимизатор:** классический метод градиентного спуска с моментом (SGD с momentum) показал себя значительно лучше в сравнении с популярным адаптивным оптимизатором Adam. Также критически важным оказалось использование косинусного расписания затухания скорости обучения (cosine learning rate schedule).

## 🤔 Критический взгляд: прорыв или победа грубой силы?
[[JUMP:18:11]]

В финальной части обзора Янник Кильхер переходит к анализу скрытых проблем представленной научной работы. По мнению ведущего, сильная чувствительность алгоритма к гиперпараметрам делает подобные исследования немного сомнительными («sketchy»). Авторы статьи открыто заявляют, что подбор параметра затухания весов (weight decay) в условиях жесткого дефицита меток имеет колоссальное значение. Ошибка в выборе оптимального значения weight decay всего на один порядок в большую или меньшую сторону может мгновенно обрушить точность нейросети на 10 и более процентных пунктов.

Янник Кильхер подчеркивает парадокс: академическое сообщество увлеченно борется за прирост точности в 0,5% или 1%, изобретая новые «изящные архитектуры». При этом один неверный шаг в настройке базового гиперпараметра способен отнять у модели в 10 раз больше, чем дает этот теоретический прорыв. 

В итоге ведущий заявляет, что хотя авторы FixMatch и получили беспрецедентные цифры точности, до конца неясно: является ли этот успех следствием действительно гениального архитектурного решения или же это просто результат «закидывания задачи деньгами» — то есть использования огромных вычислительных мощностей Google для идеального перебора и подгонки скрытых параметров.