많은 양의 data는 있지만, data 자체만 있고 label은 없는, unlabeled data를 마주할 때 우리는 unsupervised learning을 사용한다.
unsupervised learning은 label이 없기 때문에, 알고리즘 자체적으로 pretask를 만들어서 label처럼 사용한다. 기존에는 label이 데이터의 특징이나 카테고리를 알려주었다면, 이게 없기 때문에 pretask, 뭔가의 선제적 작업을 통해서 데이터를 좀 더 잘 이해하려는 노력이라고 볼 수 있다.
Unsupervised Learning에는 두 가지 큰 틀이 있는데, 바로
1. Contrastive Learning (Self-supervised Learning)
2. Reconstruction-based Learning (Generative Learning)
이 바로 그것들이다. 오늘은 이 두 가지 큰 틀에 대해 간단한 개론을 공부해보고, 이후 각각의 논문들을 리뷰해볼 것이다.
Contrastive Learning
Key Idea: Similar examples should have similar representations
매우 중요하다. 비슷한, 또는 하나의 이미지에서 나온 augmentation들을 처리한 representation vector들은 서로 비슷하게 되어야 한다는 아이디어이다. 이걸 위해서는,
1. 서로 유사한 example들을 select하거나 generate하고,
2. Encoder를 훈련시켜 유사한 example들은 representation space에서 non-similar한 example들 보다 더 가까이 하면 된다.
그러면 그냥 다음과 같이하면 어떨까?
여기서 f는 encoder일 것이고, encoder 통과 후 나온 벡터들의 거리를 minimize하는 식으로 loss를 구성하면 되지 않을까?
안된다. 바로 여기서 "contrastive"라는 단어가 나오는 것이고, 위의 loss만으로는 안되니까 contrastive loss가 나오는 것이다. 왜 그냥 유사한걸 가깝게 하는 것만으로는 안될까?
encoder로 하여금 뭘 넣어도 무조건 상수 c가 나오도록 학습시킨 경우를 생각해보자. 이 경우 위의 loss로는 c - c가 되므로 loss가 0이된다. 데이터에 대해서 배운건 하나도 없는데 loss는 0으로 잘 나오는 모습을 볼 수 있다. 그래서 "유사한 것을 가깝게" 만 하는 전략으로는 부족하다. "다른 것을 멀리" 하도록 하는 전략을 추가해야 한다. 이를 compare & constrast 전략이라고 한다.
이런 식으로 말이다.
이제 중요해진 것은 다음과 같다. 우리는
1. 어떤 대상들을 compare & contrast 할 건지 골라야 한다.
2. contrastive loss 식을 어떻게 구성할 건지 생각해야 한다.
어떤 대상들을 compare & contrast 할까?
위와 같은 대상들 각각의 representation vector가 서로 끌어당기게끔 구성하면 될 것이다. 위와 같은 대상들은 비슷한 example이기 때문이다.
contrastive loss 식을 어떻게 구성할 것인가?
1. Triplet Loss
기준이 되는 anchor example을 하나 잡고, 얘랑 유사한 애를 이제부터 positive, 유사하지 않은 애를 이제부터 negative라고 하겠다. 그럼 positive를 땡기고 negative를 밀게 하는 triplet loss는 다음과 같다.
맨 앞에 min theta는 이 triplet loss가 가장 최소화되는 encoder의 parameter theta를 찾아라 라는 뜻이고,
앞에 sum은 모든 데이터에 대해서 loss를 aggregate하는 것이고,
뒤에는 max와 함께 가까운 애들과 먼 애들에 대한 Euclidian distance, 그리고 양수인 margin 엡실론이 있다.
정상적으로 분류될 경우, 가까운 애들끼리의 거리는 0에 가까울 것이고, 먼 애들은 크기 때문에 크게 마이너스가 되면서 결과가 음수가 될 것이다. 하지만 앞에 max(0, )이 있기 때문에 자동으로 더 큰 값인 0이 선택된다.
여기서는 알파로 나와있긴 한데, 엡실론하고 똑같다. 아까 말했던전부 상수로 예측해버리는 상황에도 loss가 0이 아니라 margin인 엡실론만큼 추가된다. 그래서 모델이 loss를 줄이기 위해서는 반드시 안의 term을 음수로 만들어야되고, 이는 모델이 최소한 엡실론 만큼 positive와 negative를 구분하게 강제하는 방식이 된다.
2. N-way Classification (InfoNCE loss, Multi-class softmax loss)
위의 triplet loss를 다시 보면, 일종의 binary classification이라는 것을 알 수 있다. 또한, negative 하나에 대해서만 멀어지게 하는데, 여기서 사용하는 negative를 어떤 걸 골라야할 지에 대한 문제가 생긴다. 무슨 뜻이냐면, 모델을 통과한 negative 이미지 representation들 중에서는 Hard negative와 Easy negative가 있을 수 있다.
Hard negative: 모델이 실수한, 서로 다른 이미지임에도 불구하고 representation space에서 가깝게 배치되어있는 example들
Easy negative: 모델이 이미 분류를 잘한, representation space에서 이미 거리가 멀게 되어있는 example들
우리는 hard negative를 사용해서 loss를 계산해야 이 loss를 줄이는 방향으로 gradient를 업데이트 할 수 있다. 하지만 triplet loss에서 negative를 하나 고를 때 easy negative를 골라버리면 이미 loss가 0으로 나오기 때문에 배우는 것도 없고 gradient update도 되지 않을 것이다. 그래서 여러 개의 negative를 한꺼번에 고려하려고 한다.
basically triplet loss를 여러 개의 negative에 generalization 한 형태라고 보면 된다. 이렇게 gradient가 죽지 않고 값을 가지며 잘 전파될 수 있게 해준다.
Reconstruction-based learning (Generative Learning)
Key Idea: Representations must retain enough information to reconstruct the original input.
애초에 unsupervised learning은 label 없이 어떻게 데이터의 특지을 잘 파악할 것인가가 중요한 목표이다. 그래서 위의 contrastive learning approach에서도 유사한 성질을 가진 데이터는 representation vector space에서 가깝게 위치하게 만드는 모델을 만드는 것이 목표였다. 그것이 모델이 데이터를 잘 이해한다는 뜻이니까.
여기서도 마찬가지인데, 모델의 특징을 잘 간직하고 있는 representation vector를 만드는게 목표이다. 다만 방법이 다른데, 일단 이미지를 줄여서 벡터로 만들어놓고, 이 벡터만을 이용해서 다시 이미지로 "복원" 시켰을 때 원본과 똑같게, 유사하게 나오도록 하는 것이 목표이다. 만약 이 벡터가 이미지의 중요한 정보들을 제대로 담고 있다면, 그 벡터를 이용해서 원본 이미지와 동일한 사이즈로 복원하면 비슷하게 잘 나와야할 것이다 라는 가정을 가지고 있는 것이다.
덤으로 negative를 고르고, 위의 contrastive learning에서 필요한 large batch size 또한 걱정할 필요 없다.
결론
결국 다 label 없이 데이터의 특성을 잘 이해하는, 좋은 representation vector를 만드는 모델을 갖기 위함인 것이다.
앞으로 contrastive learning으로는 SimCLR, MoCo, BYOL, SimSiam, 그리고 추가적으로 교수님의 SCLR(CVPR 2021)을 살펴볼 것이고, reconstruction-based learning으로는 AutoEncoder, Masked AutoEncoder를 다뤄보겠다.
그리고 추가적으로 교수님의 GCRL: Hybrid Generative-Contrastive Representation Learning도 어떻게 하셨나 한 번 볼 예정이다.