Contrastive Learning
대조 학습은 서로 일치하는 쌍을 가깝게 하고 다른 샘플은 멀어지게 하여 임베딩을 학습합니다. InfoNCE, SimCLR, MoCo, CLIP 및 코드 예제를 다룹니다.
대조 학습은 서로 일치하는 샘플 쌍인 양성 쌍을 가까이, 일치하지 않는 음성 쌍을 멀리 배치하는 임베딩을 모델이 생성하도록 학습합니다. 쌍은 동일한 사진을 증강한 두 크롭처럼 데이터 자체에서 만들거나, 이미지와 캡션처럼 자연스럽게 연결된 데이터에서 가져올 수 있으므로 클래스 라벨이 필요하지 않습니다. 대조 학습은 마스크 재구성 및 자기 증류와 함께 이미지 분야의 주요 자기 지도 학습 방법 중 하나입니다. 이러한 방식으로 학습한 인코더는 탐지, 분류, 검색에 전이할 수 있는 특징을 생성합니다. 또한 같은 목표를 CLIP과 같은 비전-언어 모델 학습에도 사용하며, 이러한 모델은 제로샷 학습을 통해 텍스트만으로 이미지를 분류할 수 있습니다.
대조 학습의 작동 방식#
대조 학습 방법은 세 부분으로 구성됩니다. 긍정 쌍을 만드는 방법, 각 샘플을 정규화된 임베딩으로 변환하는 인코더, 그리고 유사도를 비교하는 손실 함수입니다. SimCLR에서 Ting Chen과 Google의 동료들은 무작위 크롭, 색상 왜곡, 블러를 적용해 이미지마다 두 가지 뷰를 만들었습니다. 두 뷰를 공유 ResNet과 작은 투영 헤드로 인코딩하고, 배치의 나머지 이미지를 부정 샘플로 취급했습니다.
데이터 증강은 모델이 무시하도록 학습할 대상을 정합니다. 한 이미지에서 만든 두 크롭을 가까운 지점에 매핑해야 하므로, 인코더는 위치, 크기, 색상 변화가 이미지의 내용을 바꾸지 않는다고 학습하고 다른 모든 이미지와 구별되는 특징을 유지합니다. 표준보다 너비가 4배 큰 ResNet-50을 사용했을 때, SimCLR의 고정된 특징으로 학습한 선형 분류기는 ImageNet에서 상위 1개 정확도 76.5%를 달성해 지도 학습 ResNet-50과 동등한 성능을 보였습니다.
대조 손실 함수#
- 쌍별 대조 손실: Raia Hadsell, Sumit Chopra, Yann LeCun이 2006년에 제안한 손실 함수로, 각 긍정 쌍을 서로 당기고 각 부정 쌍을 서로 밀어내 두 쌍 사이의 거리가 최소 m 이상이 되도록 합니다.
- 트리플렛 손실: 기준 샘플을 긍정 샘플 하나 및 부정 샘플 하나와 비교하고, 긍정 샘플이 마진만큼 더 가까워야 한다고 요구합니다. Google의 FaceNet은 2015년에 이 손실로 얼굴 임베딩을 학습했습니다.
- InfoNCE: 긍정 샘플 하나를 여러 부정 샘플과 한 번에 비교합니다. 유사도 s를 온도 τ로 나누면 기준 샘플의 손실은 −log[exp(s₊/τ) / Σⱼ exp(sⱼ/τ)]입니다. 이는 모든 후보 중 긍정 샘플을 정답 클래스로 취급하는 소프트맥스 교차 엔트로피입니다. Aaron van den Oord와 동료들은 2018년 대조 예측 부호화 논문에서 이 이름을 사용했으며, SimCLR의 NT-Xent 손실과 CLIP의 손실은 InfoNCE의 형태입니다.
- 시그모이드 손실: 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을 출력합니다. 각 행의 긍정 샘플이 가장 유사한 키인 경우 손실은 0에 가까워집니다. 관련 없는 키만 있을 때는 손실이 ln 8 ≈ 2.08보다 커지는데, 이는 온도 0.1로 나누면 우연한 유사도가 확신에 찬 오답으로 바뀌기 때문입니다. 온도를 낮추면 소프트맥스가 더 뾰족해지고 손실이 가장 어려운 부정 샘플에 집중됩니다. MoCo는 τ = 0.07을 사용하고, CLIP은 학습 가능한 온도를 같은 값으로 초기화합니다.
부정 샘플, 배치 크기, 변형#
InfoNCE는 부정 샘플이 많을수록 성능이 좋아지므로 부정 샘플 수가 핵심 비용 요소입니다. SimCLR은 매우 큰 배치에서 부정 샘플을 가져왔습니다. Kaiming He와 Facebook AI Research의 동료들이 만든 MoCo는 최근 배치에서 얻은 임베딩 65,536개를 큐에 보관해 부정 샘플로 사용하고, 인코더를 천천히 갱신하는 모멘텀 복사본으로 임베딩을 인코딩했습니다. 이 방식은 부정 샘플 수를 배치 크기와 분리합니다. 무작위 부정 샘플에는 같은 견종의 다른 사진처럼 잘못된 부정 샘플이 포함될 수 있으며, 너무 쉬운 부정 샘플은 학습에 도움이 되지 않습니다. 따라서 하드 부정 샘플 마이닝은 혼동하기 쉬운 샘플을 찾아냅니다. 지도 대조 학습(SupCon)은 레이블을 사용해 같은 클래스의 모든 샘플을 긍정 샘플로 취급합니다. BYOL, SimSiam, DINO와 같은 비대조 방법은 부정 샘플을 완전히 제거하고 비대칭 네트워크, 그래디언트 중단 또는 중심화를 사용해 모든 입력이 동일한 임베딩으로 붕괴하는 것을 방지합니다.
대조 학습과 관련 개념 비교#
- 메트릭 학습: 거리 함수를 학습하는 더 넓은 범위의 작업으로, 대조 손실과 트리플렛 손실이 여기에서 비롯되었습니다. 오늘날 "대조 학습"은 일반적으로 SimCLR과 MoCo가 널리 알린 자기 지도 방식의 다중 부정 샘플 학습을 가리킵니다.
- 오토인코더: 입력을 재구성하며 학습하므로 특징이 픽셀 수준의 세부 정보를 유지해야 합니다. 대조 특징은 샘플을 다른 샘플과 구별하는 데 필요한 정보만 유지합니다.
- JEPA: 보이는 영역을 기반으로 숨겨진 이미지 영역의 임베딩을 예측하며, 부정 쌍 없이 임베딩 공간에서 학습합니다.
- 지도 학습: 사람이 지정한 고정된 클래스 집합을 대상으로 학습하지만, 대조 사전 학습에는 어떤 샘플끼리 일치하는지 정하는 규칙만 필요합니다.
응용 분야#
- 비전-언어 모델: CLIP은 이미지-캡션 쌍 4억 개와 32,768개 크기의 배치를 사용해 이미지 인코더와 텍스트 인코더를 학습했으므로, 텍스트 프롬프트로 이미지를 분류하고 검색할 수 있습니다. Ultralytics YOLOE-26 모델은 CLIP 방식의 대조 목적 함수로 학습된 Apple의 MobileCLIP2 텍스트 인코더를 사용해 클래스 이름을 인코딩하고, 대조 헤드에서 각 후보 영역을 해당 텍스트 임베딩과 비교해 점수를 계산합니다. 따라서
set_classes(["forklift", "pallet"])을 사용하면 동일한 가중치를 새로운 범주를 탐지하는 모델로 바꿀 수 있습니다. - 시맨틱 검색: 이미지와 텍스트의 대조 학습 임베딩을 벡터 데이터베이스에 저장하고 유사도를 기준으로 검색합니다.
- 레이블이 적은 사전 학습: 전문가 레이블이 부족한 의료 영상 분석과 같은 분야에서는 레이블이 없는 스캔으로 대조 사전 학습을 수행해 백본을 만들고, 소량의 레이블 데이터로 미세 조정합니다.
- 얼굴 인식 및 재식별: 대조 손실과 트리플렛 손실을 사용해 같은 사람이나 객체의 사진이 서로 가까이 위치하는 임베딩을 학습합니다. FaceNet의 128차원 임베딩은 Labeled Faces in the Wild 벤치마크에서 정확도 99.63%를 달성했습니다.










