해당 게시글은 Ekin Tiu님의 Understanding Contrastive Learning글을 참고하여 번역 및 요약한 글입니다.
What is Contrastive Learning?
Contrastive learning is a machine learning technique used to learn the general features of a dataset without labels by teaching the model which data points are similar or different.
예로, 고양이와 개에 대해 아무런 정보가 없는 어린아이에게 아래의 세 장의 사진을 보여준다고 생각해봅시다.
아이가 두 동물에 대한 사전지식이 없다고 해도 "뾰족한 귀", "긴 수염" 등의 특징을 통해 첫 번째 사진의 동물이 세 번째 사진보다 두 번째 사진과 더 유사성을 가짐을 알 수 있을 것 입니다.
이처럼 우리의 뇌는 단순히 유사성(similarity)과 차이점(difference)을 인지하는 것만으로(고양이는 뾰족한 귀를 가지고, 강아지는 축 늘어진 귀를 가짐) 객체(object)의 high-level feature를 배울 수 있습니다.
본질적으로 Contrastive Learning을 통해 ML 모델은 동일한 작업을 수행할 수 있는데, 이는 분류(classification) 또는 분할(segmentation)과 같은 테스크를 수행하기 전에 데이터에 대한 higher-level feature 학습하기 위해 어떤 쌍(pair)의 data point가 유사한지, 다른지를 살펴보는 것으로 이루어집니다.
Contrastive Learning이 강력한(powerful) 이유는 데이터에 annotation이나 label이 없어도 모델을 학습시킬 수 있기 때문입니다. 이를 ML분야에서는 자기지도학습(Self-supervised learning)이라고 합니다. 이는 real-world 상황에서 매우 유용한데, 다양한 도메인에서 존재하는 막대한 양의 데이터에 모두 정확한 레이블을 달기는 어렵기 때문입니다.
How does Contrastive Learning?
해당 글에서는 Google Brain Team이 발표한 Constrative Learning기법의 SimCLRv2를 예시로 설명합니다.(2021.8 기준 SoTA 모델)
SimCLRv2는 매우 직관적(intuitive)인 기법으로 본격적으로 학습 방법에 대해 알아보기 전, 아래의 두 가지 개념을 먼저 살펴보도록 합시다.
1. 데이터 증강 및 positive/negative pair 생성
- 데이터셋의 각 이미지는 다음의 증강 조합(augmentation combination)을 다양하게 사용해 새로운 이미지를 얻을 수 있습니다.
- 증강된 이미지들은 동일한 이미지에서 나왔기 때문에 모델이 해당 이미지들을 서로 유사하다고 학습해야 합니다. 즉, 같은 이미지에서 증강된 이미지들끼리는 positve pair, 다른 이미지에서 증강된 이미지들끼리는 negative pair로 설정할 수 있습니다.
2. 각 이미지 별 vector representation 생성 및 학습
- 벡터 공간상에서 positive pair들끼리는 가깝게, negative pair들끼리는 멀게 학습해야합니다. 즉 아래의 그림에서처럼, representation을 뽑는 모델은 고양이 사진끼리는 비슷한 representation을, 강아지와는 다른 representation을 생성하도록 학습해야 합니다.
- 즉 고양이 간의 vector representation의 유사성은 최대화(maximize)하고, contrastive loss function은 최소화(minimize)해야 합니다. 즉, 모델은 이미지가 실제로 의미하는 레이블(고양이, 강아지)은 알지 못하지만 서로 다른 유형의 이미지를 구별할 수 있어집니다.
위에서 설명한 두 개념을 베이스로, 데이터 증강(data augmentation), 인코딩(encoding), 손실 최소화(loss minimization) 와 같이 총 세 단계를 거쳐 Contrastive Learning 기법을 정리해보도록 하겠습니다.
Step 1. Data Augmentation
- 먼저 crop, resize, color distribution, grayscale 등 임의의 조합을 랜덤하게 수행해 data augmentation을 진행합니다.
- 이는 배치(batch)마다 한 이미지에서 두 번씩 수행이 되어 두 개의 증강된 이미지를 만듭니다. 즉, positive pair를 생성하게 됩니다. 아래의 그림에서는 랜덤하게 grayscale, resize가 원본 이미지로부터 새롭게 생성된 이미지가 positive pair를 이루게 됩니다.
Step 2. Encoding
- CNN, ResNet과 같은 Neural Network(NN)를 나타내는 function을 $h=f(x)$라고 해보겠습니다. 이 때 $x$는 증강된 이미지 중 하나이며, 해당 스텝에서는 증강된 이미지를 vector representation으로 얻고자 합니다.
- $f(x)$의 출력값인 $h$는 projection head라고 불리는 여러층의 Dense layer에 들어가게 됩니다. 해당 레이어를 $g(.)$라고 부르며, 출력값이 $g(.)$에 들어가면 또다른 공간상에 데이터가 transform되어 $z=g(h)$라고 표현될 수 있습니다. 해당 과정은 추가적인 스텝으로, 기존 방법보다 성능을 크게 높인 핵심 단계입니다.
- 이렇게 기존 이미지를 잠재 공간(latent space)으로 압축(compress)함으로써 모델은 이미지의 high-level feature를 잘 학습할 수 있습니다.
- 즉 유사한 이미지 간의 vector 유사성을 최대화하며 학습하기 때문에, 모델이 잠재 공간안에서 유사한 data point의 클러스터(cluster)를 학습하고 있다고도 얘기할 수 있습니다. 이는 앞에 개념에서 말했던 "벡터 공간상에서positive pair들끼리는 가깝게, negative pair들끼리는 멀게 학습하는 것"을 이야기 합니다.
Step 3. Loss Minimization of Representations
- 위 단계에서 우리는 최종적으로 positive pair인 벡터 $z_i, z_j$를 얻었습니다. 두 벡터를 가지고 positive pair일 경우 가깝게, negative pair일 경우 멀게 학습해야하므로 두 벡터 사이의 유사성을 정량화하는 방법이 필요합니다
- 두 벡터를 비교하기 위해 가장 간단한 방법은 코사인 유사도(cosine similairy)를 이용하는 것입니다. 코사인 유사도는 다음의 식을 따릅니다. 두 벡터의 방향이 완전히 동일할 경우 1, 반대의 방향을 가질 경우 -1의 값을 가집니다.
$$similarity=cos(\theta)= \frac{A \cdot B}{||A||\ ||B||}$$
- 따라서 두 이미지가 유사한 경우 1에 가까운 값을, 유사하지 않을 경우 -1에 가까운 값을 가지게 됩니다. 따라서 두 벡터의 유사도를 구하는 식은 다음과 같이 정의될 수 있습니다.
$$sim(z_i, z_j)$$
- 본 논문에서는 loss function을 NT-Xent(Normalized Temperature-Scaled Cross-Entropy Loss)를 사용해 정의합니다. 이를 이용해 positive pair에 대한 유사성을 다음과 같이 정의할 수 있습니다. (c를 고양이, d를 강아지로 가정)
$$Softmax = \frac{e^{sim(c_1, c_2)}}{e^{sim(c_1, c_2)}+e^{sim(c_1, d_1)}+e^{sim(c_1, d_2)}}$$
- 마지막으로, 위에서 정의한 손실 함수를 최소화하는 것이 두 증강 이미지의 유사성을 최대화하는 것과 상응(correspond)하기 위해 해당 값을 $-log()$로 매핑합니다. 따라서 최종적으로 loss function은 다음과 같이 정의됩니다.
$$Softmax = -log(\frac{e^{sim(c_1, c_2)}}{e^{sim(c_1, c_2)}+e^{sim(c_1, d_1)}+e^{sim(c_1, d_2)}})$$
해당 글은 SImCLR을 통해 Contrastive Learning을 이해해보는 것을 목적으로, simCLR에 대한 더 자세한 내용이 궁금하시다면 A Simple Framework for Contrastive Learning of Visual Representations 논문을 읽어보거나 Amit Chaudhary님의 The illustrated SimCLR framework 글을 읽어보시는 것을 추천드립니다.
'인공지능(AI) > 컴퓨터비전(CV)' 카테고리의 다른 글
[패턴인식] 매칭 (0) | 2021.12.19 |
---|---|
[패턴인식] 특징 기술(2): 특징 기술자, 영역 기술자 (2) | 2021.12.18 |
[패턴인식] 특징 기술(1): 특징 기술자, 영역 기술자 (0) | 2021.12.17 |
[패턴인식] 영상분할(2): 민시프트, 대화식 물체 분할 (0) | 2021.12.16 |
[패턴인식] 영상분할(1): 영상 분할의 원리, 전통적 방법 (0) | 2021.12.16 |