Semi-Supervised Learning: как учить модели, когда данных мало

Представьте: у вас есть миллион изображений кошек и собак, но размечены только 500 из них. Нанять разметчиков — дорого. Выбросить 999 500 картинок — расточительно. Что делать? Именно здесь на помощь приходит полуконтролируемое обучение (Semi-Supervised Learning, SSL) — один из самых практичных подходов в современном ML.

Эта статья — разбор первой части серии «Learning with not Enough Data» от Лилиан Венг (Lilian Weng, OpenAI). Рассмотрим, что такое SSL, какие у него базовые допущения, как устроены ключевые алгоритмы и где применять всё это на практике.


Четыре стратегии, когда данных не хватает

Когда сталкиваешься с нехваткой размеченных данных для задач обучения с учителем, обычно рассматривают четыре подхода:

  1. Pre-training + fine-tuning — предварительно обучить мощную универсальную модель на большом неразмеченном корпусе (например, языковые модели на свободном тексте или визуальные модели на изображениях через self-supervised learning), затем дообучить на небольшом наборе размеченных данных.
  2. Semi-supervised learning — обучаться одновременно на размеченных и неразмеченных примерах.
  3. Active learning — поскольку разметка дорога, умно выбирать, какие именно примеры размечать следующими.
  4. Data augmentation / few-shot learning — расширять обучающую выборку синтетическими примерами или учиться обобщать по единицам примеров.

В этой статье сосредоточимся на Semi-Supervised Learning — подходе, который сочетает в себе лучшее от supervised и unsupervised миров.

ℹ Зачем это важно?
Разметка данных — узкое место большинства ML-проектов. По данным отрасли, до 80% времени Data Scientist тратит на подготовку данных. SSL позволяет максимально использовать то, что уже есть.

Что такое Semi-Supervised Learning и его ключевые допущения

Semi-supervised learning — это широкая категория методов машинного обучения, которая задействует как размеченные, так и неразмеченные данные, являясь гибридной техникой между обучением с учителем и без учителя.

Базовая идея: для размеченных точек алгоритм использует традиционное обучение с учителем для обновления весов модели; для неразмеченных точек — минимизирует разницу предсказаний между похожими обучающими примерами.

SSL работает, только если выполнены определённые предположения о структуре данных. Ключевые допущения полуконтролируемого обучения — это предположение о многообразии (manifold assumption), кластерное предположение (cluster assumption) и предположение о непрерывности (continuity assumption).

Расшифруем каждое:

ДопущениеСутьПример
ManifoldДанные лежат на многообразии меньшей размерностиИзображения лиц — не случайные пиксели, а точки на «лицевом» многообразии
ClusterБлизкие точки принадлежат одному классуКластеры в пространстве признаков соответствуют категориям
Continuity (Smoothness)Близкие точки должны иметь одинаковые меткиДва похожих изображения кошки — оба «кошка»
⚠ Когда SSL не работает
Если данные нарушают эти допущения (например, классы сильно перемешаны в пространстве признаков), неразмеченные данные могут ухудшить качество модели. Неразмеченные данные не гарантированно улучшают качество классификации и в ряде случаев действительно ухудшают его.

Три семейства методов SSL


graph TD
    A[Semi-Supervised Learning] --> B[Self-Training / Pseudo-Labeling]
    A --> C[Consistency Regularization]
    A --> D[Graph-Based Methods]
    B --> B1[Pseudo-Label]
    B --> B2[Noisy Student]
    C --> C1[Π-Model]
    C --> C2[Mean Teacher]
    C --> C3[MixMatch]
    C --> C4[FixMatch]
    D --> D1[Label Propagation]
    D --> D2[Graph Neural Networks]

1. Self-Training и псевдо-разметка (Pseudo-Labeling)

Самый интуитивный подход. Псевдо-разметка (self-training) — парадигма SSL, которая появилась ещё в 1960–70-х годах и остаётся популярной благодаря своей простоте. Суть: обучаем модель на размеченных данных, используем её для предсказания меток на неразмеченных данных (они становятся «псевдо-метками»), затем переобучаем на объединённой выборке.

Этот цикл повторяется снова и снова — «студенческая» модель генерирует псевдо-метки для следующей итерации обучения.

# Упрощённая схема Self-Training
model = train(labeled_data)  # шаг 1: учим на размеченных данных

for iteration in range(max_iters):
    # шаг 2: предсказываем псевдо-метки
    pseudo_labels = model.predict(unlabeled_data)
    
    # шаг 3: фильтруем по уверенности
    confident_samples = filter(pseudo_labels, threshold=0.95)
    
    # шаг 4: переобучаем на расширенной выборке
    model = train(labeled_data + confident_samples)

Главная опасностьconfirmation bias (предвзятость подтверждения): если модель с самого начала ошиблась в псевдо-метке, она будет учиться на ошибке и уверенность в неправильном ответе будет только расти.

2. Consistency Regularization (Регуляризация согласованности)

Ключевая идея: слегка изменённый вход должен давать то же предсказание. В SSL-настройке аугментации используются, чтобы побуждать предсказания для неразмеченных данных быть «согласованными», то есть оставаться стабильными при небольших вариациях входного изображения, вне зависимости от конкретной метки.

Этот принцип лежит в основе:

  • Π-Model — сравнивает предсказания двух аугментированных версий одного примера
  • Temporal Ensembling — ансамблирует предсказания через несколько эпох
  • Mean Teacher — поддерживает «учительскую» модель как экспоненциальное скользящее среднее весов «ученика»

3. Методы на графах (Graph-Based Methods)

Построим граф: вершины — все примеры (размеченные и нет), рёбра — схожесть между ними. Метки «распространяются» от размеченных вершин к неразмеченным через граф. Хорошо работает, когда геометрия данных чётко выражена.


FixMatch и MixMatch: современный взгляд

Среди алгоритмов последних лет особого внимания заслуживают MixMatch и FixMatch от Google Research.

MixMatch

MixMatch объединяет сразу несколько идей: аугментацию, sharpening предсказаний (снижение температуры распределения меток) и MixUp. Для каждого неразмеченного примера алгоритм усредняет предсказания по нескольким аугментациям, «заостряет» распределение и использует это как псевдо-метку.

FixMatch: простота как сила

FixMatch объединяет consistency regularization и pseudo-labeling в единый, простой SSL-фреймворк.

Алгоритм работает так:

  1. FixMatch сначала генерирует псевдо-метки, используя предсказания модели на слабо аугментированных неразмеченных изображениях. Псевдо-метка сохраняется только если модель выдаёт предсказание с высокой уверенностью. Затем модель обучается предсказывать эту псевдо-метку для сильно аугментированной версии того же изображения.
Weak Augmentation → Model Prediction → Pseudo-label (если conf > τ)
Strong Augmentation → Model Output → Cross-Entropy Loss

На CIFAR-10 с всего 250 метками FixMatch достигает точности 94,93%, превосходя предыдущий рекорд в 93,73%. В экстремально скудном режиме — всего 4 метки на класс — FixMatch достигает 88,61% точности на CIFAR-10.

📝 Пример: FixMatch на практике
Допустим, у вас 40 размеченных и 40 000 неразмеченных изображений рентгена лёгких. FixMatch возьмёт неразмеченный снимок, сделает лёгкий поворот на 5° и проверит уверенность модели. Если уверенность > 95% — псевдо-метка принята. Затем модель обучается угадать ту же метку, когда снимок сильно искажён (яркость, контраст, CutOut). Это вынуждает модель учить устойчивые признаки, а не просто запоминать артефакты аугментации.

Сравнение ключевых SSL-алгоритмов

МетодПсевдо-меткиConsistencyMixUpПорог уверенностиСложность
Pseudo-LabelОпциональноНизкая
Π-ModelСредняя
Mean TeacherСредняя
MixMatchВысокая
FixMatchНизкая

«FixMatch можно рассматривать как существенно упрощённую версию UDA и ReMixMatch, из которой убраны многие компоненты, но при этом достигается лучшее качество.» — обзор NeurIPS 2020


Общие приёмы для борьбы с confirmation bias

Среди свежих SSL-методов можно выделить общие темы, направленные на снижение confirmation bias: применение разнообразных шумов через продвинутые методы аугментации данных. При работе с изображениями эффективным инструментом аугментации является MixUp.

Помимо этого:

  • Устанавливайте порог и отбрасывайте псевдо-метки с низкой уверенностью.
  • Задавайте минимальное количество размеченных примеров в каждом мини-батче.
  • «Заостряйте» распределение псевдо-меток, чтобы снизить перекрытие классов.
💡 Практический совет
Начинайте с FixMatch — он прост в реализации, хорошо задокументирован и показывает SOTA-результаты на большинстве задач компьютерного зрения. Официальный код доступен на GitHub от Google Research. Для NLP задач смотрите в сторону UDA (Unsupervised Data Augmentation).

Где применяется SSL: реальные кейсы

SSL активно используется в самых разных областях:

  • Медицинская аналитика изображений — выявление патологий на МРТ и КТ-снимках
  • Классификация документов — автоматическая категоризация больших текстовых архивов
  • Рекомендательные системы — персонализированные предложения на основе поведения пользователей
  • Обнаружение аномалий — выявление нестандартного сетевого трафика и финансового мошенничества
  • NLP — обучение чат-ботов и языковых моделей
  • Автономные транспортные средства — обработка данных сенсоров для принятия решений
  • Компьютерное зрение — распознавание лиц, рукописного текста, классификация изображений

Например, мониторинг водного биоразнообразия полагается на распознавание видов по изображениям. Хотя глубокое обучение упрощает этот процесс, производительность методов тесно связана с наличием крупных размеченных датасетов. SSL позволяет обойти это ограничение, используя огромные массивы неразмеченных фотографий.


Связь с Active Learning и Pre-training

SSL — не изолированный инструмент. Он хорошо сочетается с другими стратегиями:

Active learning можно дополнительно комбинировать с semi-supervised learning для экономии бюджета на разметку. Пример: алгоритм CEAL параллельно запускает два процесса — отбирает неопределённые примеры для ручной разметки и автоматически назначает псевдо-метки высокоуверенным примерам.

А предобучение (pre-training) с fine-tuning’ом — по сути тоже форма SSL: мощная универсальная модель предварительно обучается на большом неразмеченном корпусе (языковые модели — на свободном тексте, визуальные модели — на изображениях через self-supervised learning), а затем дообучается на небольшом наборе размеченных примеров.


graph LR
    A[Размеченные данные\n100-1000 примеров] --> D[SSL-модель]
    B[Неразмеченные данные\n10k-1M примеров] --> D
    C[Pre-trained backbone\nResNet / BERT] --> D
    D --> E[Высокое качество]
    D --> F[Pseudo-labels\nдля следующей итерации]
    F --> D


Заключение: когда выбирать SSL

Semi-Supervised Learning — это не серебряная пуля, но мощный инструмент при правильном применении. Вот итоговая шпаргалка:

Используйте SSL, если:

  • У вас есть большой массив неразмеченных данных (≥10x к размеченным)
  • Разметка дорога или медленна (медицина, юриспруденция, специализированные области)
  • Данные удовлетворяют кластерному предположению (классы компактны в признаковом пространстве)

Будьте осторожны, если:

  • Классы в данных плохо разделены
  • Неразмеченных данных совсем мало
  • Доменный сдвиг между размеченными и неразмеченными примерами велик
💡 Стартовая точка
Рекомендуемый путь: начните с простого self-training на высокоуверенных предсказаниях → добавьте аугментации → переходите к FixMatch. Для задач NLP смотрите на UDA и методы на основе предобученных трансформеров.

Серия «Learning with not Enough Data» от Лилиан Венг продолжается разбором Active Learning (Part 2) — как умно выбирать, что именно размечать. Следите за обновлениями на ai-uchi.ru.