(오른쪽) key를 뽑아내는 encoder의 input으로는, 이미지가 들어갈 수도 있고, 이미지의 일부인 패치가 들어갈 수도 있음
(오른쪽) dictionary란, 이미지들을 위 그림 오른쪽 encoder에 통과시켜서 얻은 representation들의 모음 (k0, k1, k2, ..)
효과적으로 학습을 하기 위해서는 dictionary가 클 수록 좋으며 dictionary를 구성하는 key의 representation이 일관적인 것이 좋음
Dictionary의 크기가 커지면 encoder가 멀리해야할 negative sample들을 한꺼번에 많이 보고 학습할 수 있기 때문에 유리
key encoder에는 contrastive loss를 흘려주는 대신, query encoder의 weight를 momentum-based moving average 방식으로 key encoder에 흘려주는 방식으로 key encoder를 천천히 학습시키는 방법을 선택
즉, Queue와 moving-averaged encoder를 사용해서 거대하고 일관성있는 dictionary를 만들수 있음
mini-batch를 무한정 쌓아두진 않고, queue 형태로 queue가 꽉 찼다는 가정 하에 가장 들어온지 오래된 mini-batch를 dequeue하고 새로운 mini-batch를 enqueue
3. Loss function
위 MoCoLoss를 최소화해야함.
위 분모는 극대화하고 싶고, 분자는 최소화하고 싶다.
내적으로 유사도를 평가.
temperature
커지면,
모델이 양성 쌍과 음성 쌍 사이의 차이를 덜 구분하게 만들어, 더 넓은 범위의 특징을 탐색하도록 합니다.
MoCoLoss는 InfoNCE (Information Noise-Contrastive Estimation)을 변형한 것