Semi-Supervised Learning
Полу-контролируемое обучение использует несколько размеченных примеров и множество неразмеченных, чтобы сократить затраты на разметку. Рассматриваются псевдоразметка, согласованность и примеры кода.
Полуобучение использует небольшой набор размеченных примеров вместе с гораздо большим набором неразмеченных, чтобы добиться более высокой точности, чем позволяют одни только размеченные данные. Этот подход находится между обучением с учителем, при котором размечен каждый обучающий пример, и обучением без учителя, при котором не размечен ни один. Метод хорошо подходит для компьютерного зрения: камеры недорого собирают изображения, тогда как разметка данных — например, рисование рамок или масок либо фиксация диагноза — требует времени людей и часто экспертных знаний. FixMatch достиг точности 88,61% на наборе изображений CIFAR-10 всего с 4 размеченными изображениями на класс, а Noisy Student подняла точность top-1 на ImageNet до 88,4%, добавив псевдометки для 300 миллионов неразмеченных изображений.
Как работает полуобучение#
Неразмеченные данные полезны, поскольку показывают форму распределения данных. Методы исходят из предположения, что примеры, расположенные близко друг к другу в области высокой плотности, имеют одну метку, поэтому граница между классами должна проходить через разреженные области, где мало примеров. На практике это реализуют три семейства методов.
Псевдоразметка, также называемая самообучением, обучает модель на размеченных данных, запускает её на неразмеченных данных и добавляет предсказания, превышающие порог уверенности, к обучающим данным. В вариантах с учителем и учеником обученная модель становится учителем, который размечает набор данных, а ученик, часто не уступающий учителю по размеру или превосходящий его, обучается на настоящих метках и псевдометках и становится следующим учителем:
Регуляризация согласованности требует, чтобы модель выдавала одинаковые предсказания для разных искажений одного и того же неразмеченного изображения, например двух разных аугментаций данных. FixMatch сочетает обе идеи: модель ставит псевдометку для представления со слабой аугментацией, только если она уверена в предсказании, а затем учится предсказывать эту метку для представления того же изображения с сильной аугментацией. Графовые методы связывают похожие примеры графом и распространяют известные метки по его рёбрам. Главный риск во всех случаях — смещение подтверждения: на неверных псевдометках обучаются, после чего модель предсказывает их с ещё большей уверенностью. Поэтому методы используют высокие пороги, сильные аугментации или учителя, веса которого представляют собой медленно обновляемое среднее весов ученика.
В этом примере с scikit-learn оставлены метки только у 2 изображений каждой цифры и сравнивается классификатор с учителем, обученный на этих 20 изображениях, с распространением меток — графовым методом, который также использует 1 237 неразмеченных обучающих изображений:
import numpy as np
from sklearn.datasets import load_digits
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.semi_supervised import LabelSpreading
X, y = load_digits(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X / 16, y, test_size=0.3, random_state=0, stratify=y)
# Keep the labels of only 2 training images per digit; -1 marks every other image as unlabeled
labeled = np.concatenate([np.flatnonzero(y_train == digit)[:2] for digit in range(10)])
y_partial = np.full_like(y_train, -1)
y_partial[labeled] = y_train[labeled]
# Supervised baseline trains on the 20 labeled images; label spreading also uses the unlabeled ones
supervised = LogisticRegression(max_iter=5000).fit(X_train[labeled], y_train[labeled])
semi_supervised = LabelSpreading(kernel="knn", n_neighbors=10).fit(X_train, y_partial)
print(f"Supervised, 20 labeled images: {supervised.score(X_test, y_test):.3f}")
print(f"Semi-supervised, 20 labeled + {(y_partial == -1).sum()} unlabeled: {semi_supervised.score(X_test, y_test):.3f}")На 540 отложенных изображениях цифр классификатор с учителем набирает 0.800, а распространение меток — 0.919 при тех же 20 метках, поскольку неразмеченные изображения связывают каждый размеченный пример со множеством похожих изображений той же цифры.
Полуобучение в компьютерном зрении#
Псевдоразметка методом «учитель—ученик» позволяет масштабировать задачи, в которых разметка наиболее трудоемка, например создание масок для сегментации экземпляров, боксов и карт глубины. Методы полуобучаемого обнаружения объектов, такие как Unbiased Teacher, сохраняют уверенные псевдобоксы, созданные моделью-учителем. Для обучения модели оценки глубины по одному изображению Depth Anything использовала около 62 миллионов изображений без меток, автоматически размеченных моделью-учителем. Модели оценки глубины Ultralytics YOLO26 также предварительно обучались таким образом: 1 281 167 обучающих изображений ImageNet без эталонных данных о глубине получили псевдокарты глубины от моделей-учителей Depth Anything 3 и составили около 58% набора из 2,19 миллиона изображений, который также включает реальные наборы данных с эталонными значениями глубины. Визуально-языковые модели тоже могут выступать в роли учителей, размечая объекты только по названиям классов. Таблица лидеров VLM сравнивает точность разметки реальных наборов данных для обнаружения объектов. Для обнаружения большая модель YOLO26 может выступать в роли учителя и записывать уверенные предсказания в файлы меток формата YOLO — простой вариант автоматической разметки:
from ultralytics import YOLO
from ultralytics.utils import ASSETS
# Большая предварительно обученная модель YOLO26 выступает учителем
teacher = YOLO("yolo26x.pt")
# Разметить папку с неразмеченными изображениями; псевдометками становятся только обнаружения с уверенностью выше 0.5
# save_txt=True записывает для каждого изображения один файл меток .txt формата YOLO, готовый для обучения модели-ученика
results = teacher.predict(source=ASSETS, conf=0.5, save_txt=True)Полуобучение и смежные понятия#
- Активное обучение: Выбирает наиболее информативные неразмеченные изображения и отправляет их человеку на разметку. При полуобучении весь набор размечается автоматически, и многие конвейеры разметки сочетают оба подхода.
- Обучение с самоконтролем: Предварительно обучает модель только на неразмеченных данных, используя целевые значения, полученные из самих данных, а метки подключает позже, при дообучении. Полуобучение использует размеченные и неразмеченные данные в рамках одного запуска обучения.
- Трансферное обучение: Начинает с модели, предварительно обученной на другом наборе данных. Этот подход сочетается с полуобучением, поскольку предварительно обученная модель становится более эффективным первым учителем.
- Дистилляция знаний: Обучает ученика совпадать с выходными данными учителя, обычно для сжатия модели. При псевдоразметке та же схема «учитель — ученик» используется для добавления обучающих данных. Noisy Student обучала учеников размером не меньше учителей, добавляя шум во время обучения, и превзошла предыдущую лучшую модель ImageNet на 2,0%; та модель была предварительно обучена на 3,5 миллиарда слабо размеченных изображений Instagram.










