Contrastive Learning
Контрастивное обучение сближает эмбеддинги совпадающих пар и разводит остальные примеры. Разбираем InfoNCE, SimCLR, MoCo, CLIP и код.
Контрастивное обучение учит модель создавать эмбеддинги, в которых совпадающие пары образцов, называемые положительными, располагаются близко друг к другу, а несовпадающие, называемые отрицательными, — далеко друг от друга. Пары могут формироваться из самих данных, например из двух аугментированных фрагментов одной фотографии, или из естественно связанных данных, например изображения и его подписи, поэтому для контрастивного обучения не нужны метки классов. Это один из основных семейств методов обучения с самоконтролем для изображений наряду с восстановлением маскированных данных и самодистилляцией. Обученные таким образом кодировщики создают признаки, которые переносятся на детекцию, классификацию и поиск; та же целевая функция обучает модели «зрение — язык», такие как CLIP, способные классифицировать изображения только по тексту с помощью обучения с нулевым числом примеров.
Как работает контрастивное обучение#
У контрастивного метода есть три составляющие: способ создавать положительные пары, кодировщик, преобразующий каждый образец в нормализованный эмбеддинг, и функция потерь, сравнивающая сходство. В SimCLR Тин Чен и его коллеги из Google создавали два представления каждого изображения с помощью случайного кадрирования, искажения цвета и размытия, кодировали их общим ResNet с небольшой проекционной головой и считали остальные изображения в пакете отрицательными примерами:
Аугментация данных определяет, чему модель учится не придавать значения. Поскольку два фрагмента одного изображения должны отображаться в близкие точки, кодировщик усваивает, что положение, масштаб и сдвиги цвета не меняют того, что изображено, и сохраняет признаки, отличающие одно изображение от всех остальных. С линейным классификатором, обученным на замороженных признаках SimCLR, ResNet-50, в четыре раза шире стандартного, достигла точности top-1 76.5% на ImageNet, сравнявшись с ResNet-50, обученной с учителем.
Функции потерь для контрастивного обучения#
- Попарная контрастивная функция потерь: функция потерь 2006 года Райи Хадселла, Сумита Чопры и Яна ЛеКуна сближает каждую положительную пару и отдаляет каждую отрицательную, пока расстояние между элементами не станет как минимум равным отступу m.
- Функция потерь на триплетах: сравнивает якорный пример с одним положительным и одним отрицательным и требует, чтобы положительный пример был ближе как минимум на величину отступа. В 2015 году Google обучила с ее помощью эмбеддинги лиц в FaceNet.
- InfoNCE: одновременно сравнивает один положительный пример со множеством отрицательных. Если сходства s поделить на температуру τ, функция потерь для якорного примера будет равна −log[exp(s₊/τ) / Σⱼ exp(sⱼ/τ)], то есть перекрестной энтропии softmax, в которой положительный пример — правильный класс среди всех кандидатов. Аарон ван ден Оорд и его коллеги ввели это название в статье о контрастивном предиктивном кодировании в 2018 году; функции потерь NT-Xent в SimCLR и CLIP — ее варианты.
- Сигмоидальная функция потерь: SigLIP оценивает каждую пару как независимое совпадение «да» или «нет» с помощью сигмоиды, поэтому для вычисления функции потерь не нужна нормализация по пакету.
В PyTorch InfoNCE сводится к перекрестной энтропии по матрице сходства, на диагонали которой находятся положительные примеры:
import torch
import torch.nn.functional as F
torch.manual_seed(0)
# Stand-in embeddings for 8 images, a second view of each (row i of both is a positive pair),
# and 8 unrelated images
view1 = F.normalize(torch.randn(8, 128), dim=1)
view2 = F.normalize(view1 + 0.1 * torch.randn(8, 128), dim=1)
unrelated = F.normalize(torch.randn(8, 128), dim=1)
# InfoNCE: cosine similarities divided by a temperature, then cross-entropy where
# each row's positive (the diagonal) is the correct class among all 8 candidates
temperature = 0.1
targets = torch.arange(8)
for name, keys in [("Augmented views", view2), ("Unrelated images", unrelated)]:
logits = view1 @ keys.T / temperature
print(f"{name}: loss {F.cross_entropy(logits, targets):.3f}")Она выводит Augmented views: loss 0.016 и Unrelated images: loss 2.505. Когда положительный ключ в каждой строке явно наиболее схожий, значение функции потерь стремится к нулю. Для несвязанных ключей оно превышает ln 8 ≈ 2.08 — значение для равномерного случайного выбора среди восьми кандидатов, поскольку деление на температуру 0.1 превращает случайное сходство в уверенно ошибочное предсказание. Более низкая температура делает softmax более резким и сосредоточивает функцию потерь на самых сложных отрицательных примерах. В MoCo используется τ = 0.07, и CLIP инициализирует обучаемую температуру тем же значением.
Отрицательные примеры, размер пакета и варианты метода#
InfoNCE эффективнее при большем числе отрицательных примеров, поэтому их количество становится важным фактором затрат. SimCLR использовал очень большие пакеты. MoCo, разработанный Каймином Хе и его коллегами из Facebook AI Research, хранил очередь из 65,536 эмбеддингов недавних пакетов как отрицательные примеры и кодировал их медленно обновляемой копией кодировщика с импульсным обновлением; это позволяло не связывать число отрицательных примеров с размером пакета. Случайные отрицательные примеры могут оказаться ложными, например другой фотографией той же породы собак, а очень простые отрицательные примеры дают мало пользы. Поэтому поиск сложных отрицательных примеров позволяет находить образцы, которые легко перепутать. Контрастивное обучение с учителем (SupCon) использует метки, чтобы считать положительными все образцы одного класса. Методы без контрастивного обучения, например BYOL, SimSiam и DINO, полностью обходятся без отрицательных примеров и предотвращают сведение всех входных данных к одному эмбеддингу с помощью асимметричных сетей, остановки градиента или центрирования.
Контрастивное обучение и связанные понятия#
- Обучение метрики: более широкая задача обучения функции расстояния, к которой относятся контрастивные функции потерь и функции потерь на триплетах. Сейчас под «контрастивным обучением» обычно подразумевают вариант самообучения с множеством отрицательных примеров, популяризированный SimCLR и MoCo.
- Автокодировщики: обучаются восстановлению входных данных, поэтому их признаки должны сохранять детали на уровне пикселей. Контрастивные признаки сохраняют только то, что отличает один образец от остальных.
- JEPA: предсказывает эмбеддинги скрытых областей изображения по видимым областям, обучаясь в пространстве эмбеддингов без отрицательных пар.
- Обучение с учителем: обучает модель предсказывать фиксированный набор назначенных людьми классов, тогда как для контрастивного предварительного обучения нужно лишь правило, определяющее, какие образцы совпадают.
Применение#
- Визуально-языковые модели: CLIP обучила кодировщики изображений и текста на 400 миллионах пар «изображение — подпись» с пакетами по 32,768 образцов, чтобы текстовые запросы могли классифицировать изображения и искать их. Модели Ultralytics YOLOE-26 кодируют названия классов с помощью текстового кодировщика Apple MobileCLIP2, обученного с контрастивной целевой функцией в стиле CLIP, а затем в контрастивной голове оценивают каждую область-кандидат относительно этих текстовых эмбеддингов, поэтому
set_classes(["forklift", "pallet"])позволяет использовать те же веса для обнаружения новых категорий. - Семантический поиск: эмбеддинги изображений и текста, обученные контрастивным методом, хранятся в векторной базе данных и ищутся по сходству.
- Предварительное обучение с небольшим числом меток: в таких областях, как анализ медицинских изображений, где меток, созданных экспертами, мало, контрастивное предварительное обучение на неразмеченных снимках формирует базовую сеть, которую затем можно дообучить на небольшом размеченном наборе.
- Распознавание лиц и повторная идентификация: контрастивные функции потерь и функции потерь на триплетах обучают эмбеддинги, в которых фотографии одного и того же человека или объекта располагаются близко друг к другу. Эмбеддинги FaceNet размерностью 128 достигли точности 99.63% на бенчмарке Labeled Faces in the Wild.










