본문 바로가기
AI/논문 리뷰(Paper Review)

[논문리뷰] SupCon(2020), Supervised Contrastive Learning

by Hyen4110 2022. 1. 7.

SupCon(2020), Supervised Contrastive Learning


[저자] Prannay Khosla(Google Reasearch), Piotr Teterwak(Boston University), Chen Wang(Snap Inc.), Aaron Sarna(Google Reasearch), Yonglong Tian(MIT), Phillip Isola(MIT), Aaron Maschinot(Google Reasearch), Ce Liu(Google Reasearch), Dilip Krishnan(Google Reasearch)

[인용수] 528회인용 (구글 스칼라 검색 기준)

[버전] 5개 [v1] 23 Apr 2020 , [v2] 29 Oct 2020 , [v3] 13 Nov 2020, [v4] 10 Dec 2020, [v5] 10 Mar 2021

[요약] 구글리서치, MIT에서 기존의 Cross-entropy 대신 새로운 'Supervised contrastive loss' 제안

: 기본 손실함수인 크로스엔트로피(cross-entropy) 대신 'Supervised contrastive loss'를 통해 신경망을 지도학습 방식으로 학습시킨 후(pre-train) ImageNet(벤치마크 데이터셋)에 맞게 파인튜닝하여 SOTA를 달성함

 

01 Warm-up 

  1.1 한 눈으로 확인하는 결과

   <01> SupCon vs SupCrossEntropy(with Augmentation)

 

- 'Supervised Contrastive(SupCon)Loss'가 크로스엔트로피 손실함수(SubCrossEntropy)보다 더 좋은 성능 기록!

- 여러가지 데이터 증강 기법(AutoAugment, RandAugment, CutMix)과 결합한 크로스엔트로피 함수의 성능과 비교

   - CutMix : 이미지의 부분을 다른 이미지 부분으로 대체

 

 

 

 <02> SupCon vs SupCrossEntropy vs SimCLR>

https://github.com/HobbitLong/SupContrast

 

1.2 그림으로 이해하는 원리 

1) 'Contrastive loss', 새로운 손실함수? 

- 손실함수를 바꿔서 SOTA를 기록했기 때문에, 

  "뭔가 새로운 대단한 손실함수인가보다!!!🤓" 할 수 있지만,

- 사실, Contrastive Learning(Loss)은 이 논문에서 처음 제시한 개념이 아닙니다😮.

- 여기서 new loss라고 하는 것은,

  기존의 비지도학습(Unsupervised/ Self-supervised) 방식에서

  지도학습방식(Supervised)을 사용했기 때문입니다(사실 아주 특별하진 않죠..🤐🤐)

- 그래서 이 논문의 컨트리뷰션은, 사실 새로운 손실함수를 제시했다기보다는   

   "분류를 위한 새로운 사전학습 방법을 제시했다는 것"에 입니다.(by Yannic Kilcher)

 

 

- 그렇다면, 기존 Contrastive와 무엇이 다른지

  (Old) Self Supervised Contrastive vs (New)Supervised Contrastive를 살펴보겠습니다

(Old) Self Supervised Contrastive vs (New)Supervised Contrastive
(Old)
Self Supervised
Contrastive

- ' 레이블이 없는 대량의 데이터를 어떻게 잘 학습시킬 수 있을까?'
라는 질문에 대한 답으로 등장한 기법으로,
레이블이 없이 의미있는 표현(representation)을 학습한다는 장점이 있습니다!

- '레이블이 없는데 어떻게 학습시킬까?'
 -> 하나의 기준 이미지(anchor)을 두고,
이에 대한 다양한 증강(뒤집기(flip),자르기(crop) 등) 으로
유사 이미지(positive)를 생성한 후,
 -> 나머지 이미지를 negative 클래스로 설정하여,
positive와 negative의  표현(representation)이
임베딩 공간에서 분리되도록 학습하는 방식입니다.

- 여기서의 문제는, 
negative의 기준이 다른 클래스가 아니라 다른 이미지 라는 것이죠.
즉, 같은 강아지 사진도 negative로 분류가 됩니다. 😱😱😱

- 이렇게 사전학습한 모델을 가지고, 
강아지/고양이를 분류하는 문제에 파인튜닝을 한다고 했을때,
이미 멀어진 두 강아지 샘플(강아지1, 강아지2)을
쉽게 분류할 수 없을 겁니다 
-> 결론적으로,
   기존의 Self Supervised Contrastive는
  이후의 학습을 더 어렵게 만듭니다😱😱😱

(New)
Supervised
Contrastive
-  하지만, 레이블이 있다면 굳이 비지도학습 방법으로 할 필요가 없겠죠!
- 따라서, 기존의 비지도학습의 장점이었던,
  데이터 증강(Data augmentation)은 그대로 사용하되,
  레이블을 가지고, 같은 클래스끼리는 유사한(가까운) 표현을 얻도록 학습합니다!
  (클래스끼리 그들만의 클러스터를 만들게 됩니다)

- 이는 이후에 크로스엔트로피 함수를 사용한
  분류기를 위해 좋은 시작점(=좋은 표현)을 제공합니다. 

 

 

2) 크로스엔트로피보다 SupCon이 뭐가 더 좋은걸까?

 [Old] 크로스엔트로피를 통한 학습 (Supervised Cross Entropy)

- 일반적인 이미지 분류 딥러닝 학습에서는,  

 ☝  1차적으로 이미지에 대한 좋은 표현(representation)을 얻도록 모델을 학습하고,

       (모델은 더 정확히 말하면 Encoder 입니다)

 ☝☝ 2차적으로 표현에 대한 좋은 결정 경계선(decesion boundary)를 얻도록 분류기를 학습합니다.

  그리고, 이 두가지는 동시에👐 이루어집니다.

  "근데, 꼭 동시에 학습되어야할까요?"

    -> 좋은 표현을 먼저 학습하고, 그리고 결정경계를 학습하면 안될까요?🤔🤔

        이것이 바로 이 논문에서 제안하는 Supervised Contrastive Learning입니다!

기존의&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp;크로스엔트로피를 통한 학습 (Supervised Cross Entropy)

[New] 논문의 Supervised Contrastive Learning

- 이 논문에서는 위와 같이 표현과 결정경계를 동시에 학습하지않고,

   📎 (Stage1) 먼저 모델을 좋은 표현을 얻도록 훈련하고, 모델을 Freeze한뒤,

   📎📎 (Stage2) 다음 분류기가 좋은 결정 경계선을 얻도록 훈련하는

       -> 두 단계에 걸쳐서 학습을 하는 방식으로 진행합니다. 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

02 Deep-dive

좀더 깊게 이해하기 위해,

손실함수의 수식을 함께 비교해보면서 살펴보겠습니다.

 

2.1 Loss

 Self-Supervised Contrastive Loss

- 기존의 Self-Supervised Contrastive loss부터 먼저 차근차근 보면서,

  위 논문에서는 어떻게 확장해가는지 살펴 보겠습니다.

 (But, 예상한것과 같이 둘의 식은 크게 다르지 않습니다!)

  So, 기본 Contrastive loss를 이해하는 시간을 갖겠습니다🌝

  

 

- 아래 식은 Self-Supervised Contrastive Loss로 이미 선행 연구들에서 정의한 식입니다.

- 여기서  Loss를 최소화하기 위한 방향으로 학습된다면,

  -> -log() 내부의 항은 최대화되도록 학습이 될 것입니다.

     다시 말하면, 아래와 같이 정리할수 있습니다. 

 

     ☝ 분자는 크게!

        -> positive 샘플간의 내적값은 커지도록,

            == "positive 샘플은 가까워지도록"

           (positive : 1개 샘플에 대한 augmented들) 

     ☝☝ 분모는 작게!

        -> negative 샘플간의 내적값은 작아도록,

            == "negative 샘플은 멀어지도록"

 

 

 Supervised Contrastive Loss

- 위의 기존의 Self Supervised Contrastive loss에서 추가된것은, 

  아래 파랑녹색 부분입니다 (😯😯)

- 요약하자면 레이블 데이터를 가지고 지도학습을 한다는 의미입니다.

 

 

2.2 Gradient

1) Supervised Contrastive Loss

- 다음으로는, 미분값인 Gradient가 어떤식으로 작동하는지 살펴보면서,

 기존의 Triplet Loss보다 어떤 점이 더 우수한지 비교해보겠습니다!🌝

 

- 아래 식을 보면,

 graidnet를  positive와 negative로 나눌 수 있는데 

각각의 식에 대당하는 부분은 positive, negative 와 같습니다.

positive만 예로 설명해보겠습니다. 


<positive>

1. easy positive (구분하기 쉬운  positive 들)

   i) 두 표현(zi, zj)가 유사하기 때문에 내적값이 1에 가까워짐

   ii) 쉽게 구분 가능하기 때문에 Pij도 높음 

    👉 ∴ gradient 0

 

2. hard positive(구분하기 어려운 positive들)

   i) 두 표현(zi, zj)가 유사하지 않기 때문에 내적값이 0에 가까워짐

   ii) 쉽게 구분 가능하기 때문에 Pij도 높지 않음(moderate) 

    👉  ∴ gradient > 0

 

위의 식을보면, easy positive의 gradient는 0으로 수렴하고,

반면에 hard positive는 0보다 큰 값을 갖게 되기 때문에

   👉👉 결론적으로 hard positive에 집중한다는 것을 의미합니다. 

           (negative에 대해서도 같은 맥락입니다)


2)  Triplet Loss 

- Triplet Loss도 Contrastive loss와 마찬가지로,

  Supervised representation learning에서

  크로스엔트로피의 대안으로 일반적으로 사용되는 loss입니다.

 

- Triplet Loss에서는 hard negative mining이 중요한 기술이고,

 이를 위해 연산 비용이 요구됩니다.

- 하지만, Supervised Contrastive Loss의 Gradient에서도 확인했듯이

 hard 샘플에 자동으로 집중하는 특성을 갖고 있습니다.

 

  

 

 

 

 

[참고 자료]

https://www.youtube.com/watch?v=MpdbFLXOOIw 

https://blog.naver.com/heianjung/222616494664

https://blog.naver.com/heianjung/222618885647

댓글