Active learning и semi-supervised для Data Scientist
Карьерник — Duolingo для аналитиков: 10 минут в день тренируй SQL, Python, A/B, статистику, метрики и ещё 3 темы собеса. 1500+ вопросов в Telegram-боте. Бесплатно.
Содержание:
Зачем эти подходы
Разметка дорого. 10k размеченных примеров через краудсорсинг = 200-500k рублей. 100k — миллионы. При этом размеченных мало, неразмеченных много (лежат в БД).
Active learning: модель сама выбирает, какие примеры разметить — фокусируется на «трудных».
Semi-supervised: использует неразмеченные данные напрямую (без human labeling) для тренировки.
На собесе DS вопрос: «есть 1k размеченных и 100k неразмеченных, что делаешь?» — ожидается понимание этих подходов.
Active learning
Цикл:
- Тренируем baseline на маленькой размеченной выборке
- Применяем к unlabeled pool
- Выбираем top-K «непонятных» примеров (uncertainty)
- Отдаём людям на разметку
- Добавляем в train, повторяем
Эффект: обучение требует в 2-10× меньше labeled data, чем random sampling.
Когда работает: дорогая разметка, доступен expert/labeler, есть большой unlabeled pool.
Когда не работает:
- Дешёвая массовая разметка (просто разметить всё)
- Cold start (нет baseline-модели)
- Cold start (есть baseline, но он плохой → плохой uncertainty estimate)
Стратегии query
Uncertainty sampling:
- Least confidence — выбираем примеры, где
max(p) минимально - Margin sampling — где
p_top1 - p_top2минимально (близко к границе) - Entropy — где entropy distribution максимальна
proba = model.predict_proba(X_pool)
margin = np.sort(proba, axis=1)[:, -1] - np.sort(proba, axis=1)[:, -2]
uncertain_idx = np.argsort(margin)[:K] # K самых неуверенныхQuery by committee (QBC): ensemble моделей. Выбираем примеры с максимальным разногласием между моделями.
Diversity-based: избегаем «батча» из одного кластера. Сначала uncertainty, потом diversity (k-means на uncertain pool, по одному из кластера).
Expected model change — ожидаемое изменение модели после добавления примера. Дорого, но точно.
В индустрии чаще всего uncertainty + diversity combo.
Semi-supervised: pseudo-labeling
Идея: тренируем модель на labeled data, predictим unlabeled, наиболее уверенные predictions используем как «псевдо-метки».
model.fit(X_labeled, y_labeled)
proba = model.predict_proba(X_unlabeled)
confident_idx = proba.max(axis=1) > 0.95 # threshold confidence
y_pseudo = proba.argmax(axis=1)[confident_idx]
X_combined = np.vstack([X_labeled, X_unlabeled[confident_idx]])
y_combined = np.concatenate([y_labeled, y_pseudo[confident_idx]])
model.fit(X_combined, y_combined)Плюсы: просто, бесплатно (нет human labeling).
Минусы:
- Усиливает bias модели — confident wrong становится «правильным»
- Не работает на сильно несбалансированных классах
- Чувствителен к threshold
Self-training и co-training
Self-training: итеративный pseudo-labeling. Несколько раундов: тренируем → pseudo-label → retrain.
Co-training (Blum, Mitchell 1998):
- Делим признаки на два независимых view (например, текст и метаданные)
- Тренируем две модели на разных view
- Каждая labeled свои confident predictions для другой
- Итерируем
Работает, когда два view independent и каждый sufficient для классификации. Идеально — текст + изображение.
Modern semi-supervised для нейросетей:
- Consistency regularization (FixMatch, MixMatch) — предсказания на augmented version того же примера должны совпадать
- Self-supervised pretraining (SimCLR, SwAV) — pretrain на unlabeled, затем supervised fine-tune
В современном DL self-supervised pretraining (BERT, CLIP, DINO) — самый эффективный «semi-supervised».
Когда что выбирать
| Кейс | Подход |
|---|---|
| Дорогая разметка, есть expert | Active learning |
| Большой unlabeled pool, простая задача | Pseudo-labeling |
| Два независимых view данных | Co-training |
| Image / text / audio + большой unlabeled | Self-supervised pretraining |
| Маленький labeled, нет unlabeled | Data augmentation, transfer learning |
Эвристика: active learning для production-pipeline с continual learning. Pseudo-labeling — quick boost когда нужно. Self-supervised pretraining — золотой стандарт для DL.
Частые ошибки
Active learning без baseline. Модель не различает sure от unsure → uncertainty sampling = random. Сначала достаточный baseline (хотя бы 100-500 размеченных).
Pseudo-labeling без threshold. Все predictions добавляем — добавляем шум. Confidence > 0.9 минимум.
Не учитывать class balance в pseudo-labeling. Модель уверена в majority классе → pseudo-labels усиливают imbalance.
Active learning только uncertainty без diversity. Получаем 100 похожих примеров.
Считать semi-supervised «как supervised, только с unlabeled». Бесплатные данные ≠ бесплатное качество. Если labeled выборка биазена — semi-supervised усугубит.
Self-training без stop criterion. Бесконечный цикл, переобучение на собственных ошибках.
Игнорировать labeling errors. Human labels тоже шумные. На active learning важно — те же люди должны размечать consistently.
Связанные темы
- Class imbalance на собесе DS
- Калибровка вероятностей
- Bagging vs Boosting на собесе DS
- Подготовка к собесу Data Scientist
- SHAP и интерпретируемость
FAQ
Active learning требует human in the loop?
Да. Это основная идея — экономия human time через умный выбор. Без human labeler — обычный supervised.
Что лучше — active learning или больше random labeled?
Зависит от задачи. На простых datasets random может догнать AL. На сложных или imbalanced AL даёт x2-x10 эффективности по labels.
Self-supervised vs semi-supervised — разница?
Self-supervised — pretraining без labels через proxy task (predict masked tokens, contrastive). Semi-supervised — учится на mix labeled + unlabeled. Self-supervised — частный случай и доминирующая парадигма в DL.
Pseudo-labeling работает в production?
Зависит. На стабильных distributions может дать +1-3%. На changing distributions усугубляет drift. Лучше использовать с care и monitoring.
Что такое weak supervision?
Использование «слабых» источников меток (rules, distant supervision, crowd, noisy labels) для тренировки. Snorkel — известный фреймворк.
Это официальная информация?
Нет. Статья основана на работах Settles (Active Learning Survey, 2010), Blum-Mitchell (1998), современных semi-supervised papers.
Тренируйте Data Science — откройте тренажёр с 1500+ вопросами для собесов.