논문 소개 - A Simple Framework for Contrastive Learning of Visual Representations (SimCLR)
Self-supervised contrastive learning 분야를 간단히 설명하고, 단순하지만 많은 인사이트를 담은 SimCLR 논문을 소개합니다.
1. 이 논문을 소개하는 이유
내가 A Simple Framework for Contrastive Learning of Visual Representations, 흔히 SimCLR라고 부르는 논문을 처음 읽은 것은 석사 1년 차 때였다.
이 논문은 내게 논문은 어렵고 복잡하다는 인식을 깨주었고, 단순하지만 인사이트가 있는 논문이 무엇인지 알려주었다. 석사 기간 동안 강화 학습, anomaly detection, uncertainty 등 다양한 분야를 거쳤지만 결국 졸업 연구에서는 다시 돌아와 이 논문과 같은 contrastive learning 분야를 하게 된 것도 나도 이런 논문을 쓰고 싶다는 마음이 시작점이었던 것 같다.
이 소개글에서는 논문을 섹션 순서대로 번역해서 소개하기보다는 이 논문의 주요한 내용과 인상적인 부분 위주로 소개하고자 한다. Contrastive learning이 익숙하지 않더라도 전체 흐름을 따라갈 수 있도록 간단한 설명을 넣을 생각이니, 본 글을 읽고 흥미가 생긴다면 해당 논문을 읽어 보는 것을 추천한다.
2. SimCLR이란?
SimCLR은 ICML 2020에 발표된 논문으로, self-supervised contrastive learning을 위한 프레임워크를 제안한다. 이 프레임워크는 당시 SOTA를 기록했으며, 제목처럼 구조가 매우 단순하다. 프레임워크 논문인 만큼 모델 구조 자체보다 각 모듈을 어떻게 구성해야 하는지, 그리고 그 구성이 왜 효과적인지를 잘 설명한다.
3. Self-supervised Contrastive Learning이란?
우선 본 논문의 분야는 Contrastive learning, 그중에서도 self-supervised contrastive learning을 위한 프레임워크를 제안하고 있다. 본격적인 소개 전에 이 분야에 대해 소개하고자 한다. 만약 이 분야를 알고 있다면 바로 다음 섹션으로 넘어가도 좋다.
3.1. Contrastive Learning
인코더 개념이 익숙한 분이라면 contrastive learning을 한 줄로 설명하면, 좋은 embedding(또는 representation)을 만드는 encoder를 학습하기 위한 분야라고 얘기할 수 있을 것 같다.
좀 더 쉽게 얘기하면 특정한 문제를 해결하기 위한 분야라기보다는 다른 분야들을 위해 더 좋은 전처리 모듈을 만드는 분야라고 할 수 있을 것 같다.
만약 당신이 보험을 가입할지 고민 중이라고 하자. 이때 당신에게는 길고 복잡하게 쓰인 수십 장 분량의 보험 설명서 PDF가 주어졌다. 당신에게 이 PDF만 읽고 어떤 보험을 들지 말지를 결정하는 것은 매우 어려운 문제일 것이다. 그래서 여기서 당신의 친구인 보험 전문가가 등장한다. 이 보험 전문가는 각 PDF의 내용을 요점만, 그렇다고 당신이 파악하지 못하는 내용이 생기지 않도록 쉽게 설명을 해줄 것이다. 이 설명을 들은 당신은 어떤 보험을 들을지 말지 판단하기가 매우 쉬워질 것이다.
여기서 contrastive learning의 목표는 당신에게 좋은 보험 전문가를 붙여주는 역할이다. 이 비유를 좀 더 인공지능스럽게 풀어보자. 당신이 보험을 가입할지 고민 중인 것은 각 보험을 들을지 말지(함수 f(•), 출력은 true 또는 false)를 결정하는 이진 분류 문제이다. 또한 이에 대한 입력 x는 보험 설명서 PDF이다. 보험 전문가(encoder, 함수 g(•))는 보험 설명서 PDF(x)를 쉬운 설명(x’)으로 만든다.
원래 풀고자 하는 문제는 다음과 같았다.
y = f(x), 보험 결정 여부 = 당신의 판단(보험 설명서 PDF)
여기서 g(x)가 추가된 것이다.
y = f(x’) = f(g(x)), 보험 결정 여부 = 당신의 판단(보험 전문가의 쉬운 설명) = 당신의 판단(보험 전문가(보험 설명서 PDF))
좋은 representation(x’)을 얻기 위해 인코더, g(•)를 잘 학습하는 것이 contrastive learning의 목표라고 할 수 있다.
3.2. Self-supervised Learning
이 논문은 Contrastive Learning 중에서도 self-supervised 분야이다. self-supervised와 unsupervised를 약간 헷갈릴 수 있을 것 같아 살짝만 짚고 넘어가겠다.
흔히 supervised learning은 입력 x와 라벨 y를 주고 학습하고, unsupervised learning은 입력 x만 가지고 학습한다.
반면 self-supervised learning은 학습 자체에는 입력 x와 라벨 y를 가지고 학습하나, 라벨 y를 따로 제공할 필요가 없는 학습 방법을 말한다.
3.3. 용어 정리
downstream task, contrastive learning을 통해 만든 representation으로 해결하고자 하는 문제를 downstream task라고 한다. 즉 보험 전문가를 학습시켜서 사용하는 목적 중 하나인 당신이 보험을 가입할지 말지를 결정하는 문제를 downstream task라고 볼 수 있다.
contrastive prediction task, self-supervised learning을 수행하기 위해 정의한 task.
4. SimCLR의 구조
이 프레임워크는 다음과 같은 4개의 요소로 구성된다.
- 요소1.
t ∼T및t′ ∼T
data augmentation 연산자, 이 연산자에서는 이미지를 random cropping한 다음 원래 크기대로 resize, 그리고 임의의 색상 왜곡 및 임의의 Gaussian blur를 적용한다.
- 요소2,
f(·)
base encoder, 본 프레임워크는 제약 없이 네트워크 architecture를 다양하게 있게 설계되어 있으며 단순함을 위해 일반적으로 사용되는 ResNet (He et al., 2016)를 채택했다.
- 요소3.
g(·)
g(·): projection head, neural 네트워크. 인코더에서 나온 h_i를 바로 loss로 정의하기보다 z_i에서 contrastive loss를 정의하는 것이 더 효과적이었다고 한다.
- 요소4. contrastive loss function (maximize agreement)
동일한 입력 이미지 x_i에 대해 data augmentation을 통해 다른 이미지 두 장(~x_i, ~x_j)를 만들고 두 이미지로부터 생성된 representation은 최대한 동일하도록(maximize agreement), 그리고 다른 입력 x_k, k≠i로부터 만들어진 representation과는 최대한 다르도록 학습하는 것을 목표로 한다.
참고: 학습이 끝나면 projection head g(·)는 버리고, downstream tasks에서는 encoder f(·)와 representation h를 사용한다.
4.1. contrastive prediction task를 왜 data augmentation으로 정의했는가
data augmentation은 흔히 overfitting을 줄이기 위한 regularization으로 설명된다. 그러나 SimCLR에서 data augmentation은 그보다 더 중심적인 역할을 한다. 어떤 두 view를 같은 것으로 취급할지를 결정함으로써 contrastive prediction task 자체를 정의한다.
예를 들어 random crop을 적용하면 하나의 이미지에서 서로 다른 영역이 잘려 나온다. 두 crop의 범위가 크게 겹치면 global view와 local view를 연결하는 문제가 되고, 서로 다른 부분이 선택되면 인접한 영역의 관계를 학습하는 문제가 된다. 별도의 specialized architecture 없이 crop 하나만으로 여러 형태의 predictive task가 만들어지는 셈이다.
그렇다고 augmentation 하나만 적용하면 충분한 것은 아니었다. 논문의 Figure 5에서 모델은 single transformation만 사용했을 때도 positive pair를 거의 완벽하게 찾아낼 수 있었지만, linear evaluation 성능은 좋지 않았다. Contrastive task를 잘 풀었다고 해서 반드시 좋은 representation을 배운 것은 아니었다.
Random crop과 color distortion이 함께 필요한 이유
Random crop만 사용하면 같은 이미지에서 잘라낸 patch들이 서로 비슷한 color distribution을 공유할 수 있다. 이 경우 모델은 object의 shape나 semantic structure를 이해하지 않고도 color histogram만 비교해 같은 이미지에서 나온 view인지 구분할 수 있다. Contrastive task를 쉽게 푸는 shortcut이 생기는 것이다.
Color distortion을 함께 적용하면 이 shortcut을 사용하기 어려워진다. 같은 이미지에서 나온 두 view의 색 분포가 달라지기 때문에 encoder는 color 이외의 정보를 사용해야 한다. 논문에서는 여러 조합 가운데 random crop과 random color distortion의 조합이 특히 좋은 결과를 보였다.
이 결과를 단순히 “predictive task가 어려울수록 좋다”라고 받아들이면 조금 위험하다. 어려운 task라고 해서 언제나 generalizable한 representation을 만드는 것은 아니다. Data augmentation은 모델이 무시해야 할 차이와 보존해야 할 정보를 결정한다. 따라서 좋은 representation을 얻으려면 shortcut으로 풀 수 없는 적절한 task를 설계해야 한다는 점을 시사한다.
강한 color augmentation이 supervised learning과 contrastive learning에서 다르게 동작한다는 결과도 이 해석을 뒷받침한다. 논문의 실험에서 stronger color augmentation은 supervised 모델의 accuracy를 개선하지 않거나 오히려 떨어뜨렸지만, contrastive learning의 linear evaluation 성능은 크게 높였다. Supervised learning에서는 augmentation이 보조적인 regularization에 가깝지만, SimCLR에서는 positive pair의 의미와 학습할 invariance를 직접 결정하기 때문이다.
4.2. projection head는 왜 필요한가
SimCLR의 구조를 처음 보면 projection head g가 조금 이상하게 느껴진다. Encoder가 만든 representation h를 바로 contrastive loss에 사용하지 않고, 작은 neural 네트워크를 한 번 더 통과시킨 z=g(h)에 loss를 적용한다. 더 이상한 점은 학습이 끝나면 이 projection head를 버린다는 것이다.
그런데 이 작은 설계가 representation quality를 크게 개선했다. 논문의 Figure 8에서 nonlinear projection은 linear projection보다 약 3% 높은 linear evaluation 성능을 보였고, projection이 없는 경우보다 10% 이상 높았다. 또한 projection head를 사용하더라도 downstream task에서는 z보다 projection 이전의 h를 사용하는 편이 10% 이상 좋았다.
저자들은 contrastive loss가 data augmentation에 invariant한 z를 만드는 과정에서 downstream task에 유용한 정보까지 제거할 수 있다고 추측했다. 예를 들어 color distortion에 invariant하도록 학습하려면 z에서는 color 정보가 사라지는 편이 loss를 줄이는 데 유리하다. 하지만 어떤 downstream task에서는 color나 orientation이 중요한 정보일 수 있다.
Projection head가 contrastive objective에 필요한 정보 압축을 담당하면, encoder output h에는 더 많은 정보가 남을 수 있다. 이를 확인하기 위해 저자들은 h와 g(h)를 입력으로 사용해 pretraining 중 어떤 transformation이 적용되었는지를 예측하는 별도의 MLP를 학습했다.
여기서 random guess는 데이터가 해당 비율로 “섞여 있다”는 의미에 가깝다. Rotation은 네 방향 가운데 하나를 맞히는 문제이므로 무작위 정답률이 25%이고, 두 class가 균등한 문제는 50%다. Color vs grayscale은 class 비율이 균등하지 않아 다수 class만 선택해도 80%가 된다.
Rotation을 보면 h에서는 67.6%의 정확도로 회전 정보를 읽어낼 수 있지만, g(h)에서는 25.6%로 random guess에 가깝다. g(h)에서 transformation 관련 정보가 상당히 사라졌다는 뜻이다. 반면 h는 해당 정보를 더 많이 보존했다.
물론 이 실험만으로 h가 모든 정보를 보존한다거나 projection head의 작동 원리가 완전히 증명된 것은 아니다. 논문도 이를 하나의 hypothesis로 제시한다. 그럼에도 학습 objective가 작동하는 space와 downstream task에서 재사용할 representation space를 분리한다는 design은 매우 인상적이었다.
4.3. 단순한 구조를 위해 Memory bank 대신 large batch
기존 contrastive learning method 가운데 일부는 이전 batch에서 계산한 embedding을 memory bank에 저장해 negative examples로 사용했다. Negative를 많이 확보할 수 있지만, 현재 encoder가 아닌 과거 encoder가 계산한 representation이 섞일 수 있다.
SimCLR은 memory bank를 사용하지 않고 minibatch 안의 다른 view들을 negative로 사용했다. 대신 batch size를 256부터 8192까지 키워가며 실험했다. Batch size가 8192라면 하나의 anchor가 비교하는 negative example은 2×8192-2=16,382개다.
Large batch가 항상 최종 성능을 보장한 것은 아니다. 100 epochs처럼 학습이 짧을 때는 large batch가 뚜렷한 이점을 보였지만, 학습이 길어지면 batch size 간의 차이가 줄거나 사라졌다. Large batch는 한 step에서 더 많은 negative를 제공하고, longer 학습은 여러 step에 걸쳐 더 많은 negative comparison을 경험하게 한다. 둘은 완전히 같지는 않지만, 충분한 negative comparison을 제공한다는 측면에서 일부 비슷한 효과를 낸다.
Global Batch Normalization
large batch를 사용하기 때문에 여러 device에서 data parallel 학습 사용이 다소 강제되게 된다. 이때 일반적인 Batch Normalization을 적용하면 mean과 variance는 보통 device별로 계산된다. SimCLR에서는 하나의 positive pair가 같은 device에 배치되기 때문에, 모델이 local BN statistics를 힌트로 사용해 pair를 쉽게 구분할 가능성이 있었다. Contrastive task accuracy는 좋아져도 representation은 좋아지지 않는 information leakage다. 이를 방지하기 위해 모든 device의 평균과 variance를 수집해 글로벌 평균, 분산을 적용하는 global batch normalization을 적용하는 것이 도움이 된다.
더 큰 모델, 더 오래 학습하면 좋다.
- 초록색 십자가: supervised learning 90 epoch 학습 (라벨링이 있는 일반적인 학습)
- 빨간 점: 제안하는 방법 1000 epoch 학습
- 파란 점: 제안하는 방법 100 epoch 학습
모델의 depth와 width를 키우면 supervised learning과 self-supervised learning 모두 성능이 좋아졌다. 다만 모델 size가 커질수록 두 방식 사이의 성능 차이가 줄어들었다. SimCLR은 더 큰 모델 capacity와 longer 학습에서 특히 많은 이점을 얻었다.
이 이유에 대해서 저자들은 따로 이유를 기재하지 않았으나, 나는 이 내용 또한 “좋은 representation을 얻으려면 shortcut으로 풀 수 없는 적절한 task를 설계해야 한다”라는 점을 뒷받침하는 근거라고 느꼈다. shortcut이 없기 때문에 더욱 general한 지식을 습득해야 하고, 이를 위해서는 특정한 목표가 주어진 모델에 비해 더 큰 모델이 필요할 뿐만 아니라, 수렴에 더 많은 시간이 필요하다고 해석된다. 더욱이 이 결과 자체가 순환 논리로 적절한 predictive task를 설계했음을 다시 한번 보여주는 결과라고 보이기도 한다.
5. 결과
SimCLR은 당시 ImageNet을 통한 검증에서 매우 높은 성능을 보였다.
Standard ResNet-50을 encoder로 사용한 SimCLR은 69.3% top-1을 기록했으며 이는 이전 SOTA에 비해 5.5%p 앞선 결과였다. 참고로 여기서 정확도는 학습된 representation을 입력으로 삼아 선형 분류기만 라벨과 함께 학습했을 때의 성능이다. 모든 방법을 동일한 평가 프로토콜로 비교하므로 representation의 품질을 보여주는 지표로 볼 수 있다.
위 표는 self-supervised learning으로 학습한 이후, 전체 데이터의 1% 또는 10% 분량의 데이터에 대해서만 라벨과 함께 supervised learning으로 fine-tuning했을 때의 정확도이다. 즉 적은 라벨이 추가로 주어질 경우의 성능을 보여주며, 이 경우에도 앞선 모델들보다 크게 성능이 향상되었음을 볼 수 있다.
6. 글을 마치며
아무래도 논문을 번역하기보다는 소개하고자 글을 쓰다 보니 몇몇 내용을 생략하거나, 표현을 다르게 한 부분이 있다. 다만 나도 하나의 논문 encoder로서, 이 논문을 소개하는 데 가능한 한 좋은 representation을 제공하고자 노력했다. 이 글을 읽은 당신이 원문을 읽겠다는 판단(true)을 내리기를 바란다.
참고 자료
- Ting Chen, Simon Kornblith, Mohammad Norouzi, Geoffrey Hinton. A Simple Framework for Contrastive Learning of Visual Representations. ICML 2020, PMLR 119:1597-1607.








