이 강의의 목표는 라벨 없이 데이터 자체에서 학습 문제를 만들어 좋은 표현을 배우는 방법과, 그 학습을 이끄는 대조손실을 수식으로 이해하는 것입니다.
먼저 오늘의 핵심 식을 봅니다.
L = − log exp ( sim ( z , z + ) / τ ) ∑ j exp ( sim ( z , z j ) / τ ) \mathcal{L}=-\log\frac{\exp\!\bigl(\operatorname{sim}(z,z^{+})/\tau\bigr)}{\displaystyle\sum_{j}\exp\!\bigl(\operatorname{sim}(z,z_j)/\tau\bigr)}
L = − log j ∑ exp ( s i m ( z , z j ) / τ ) exp ( s i m ( z , z + ) / τ )
이 식을 외우기 전에, 식 안의 말과 기호를 먼저 하나씩 풀어야 합니다.
말
뜻
표현 z zz
데이터를 모델이 쓰기 좋은 벡터로 바꾼 것
positive z^
같은 원본에서 나온, 가까워져야 할 짝
negative z j z_jz j
다른 데이터에서 나온, 멀어져야 할 표현
sim ( u , v ) \operatorname{sim}(u,v)s i m ( u , v )
두 표현이 얼마나 비슷한지 재는 값(코사인 유사도)
τ \tauτ
온도. 유사도 차이를 얼마나 날카롭게 볼지 정하는 수
InfoNCE
대조학습에서 쓰는 대표적인 손실
수학에서 어려운 부분은 계산보다 읽기입니다. 뜻을 모르고 계산하면 공식이 암호처럼 보입니다.
사진 하나를 자르고 색을 바꾸어도 같은 사진의 다른 모습입니다. 모델은 이렇게 만든 두 조각을 가깝게, 서로 다른 사진은 멀게 만들면서, 사람이 라벨을 붙이지 않아도 의미 있는 벡터를 배울 수 있습니다.
핵심 식은 사실 소프트맥스 위에 로그를 씌운 형태입니다.
L = − log exp ( sim ( z , z + ) / τ ) ∑ j exp ( sim ( z , z j ) / τ ) \mathcal{L}=-\log\frac{\exp\!\bigl(\operatorname{sim}(z,z^{+})/\tau\bigr)}{\displaystyle\sum_{j}\exp\!\bigl(\operatorname{sim}(z,z_j)/\tau\bigr)}
L = − log j ∑ exp ( s i m ( z , z j ) / τ ) exp ( s i m ( z , z + ) / τ )
분자: 기준 표현 z zz 와 진짜 짝 z + z^{+}z + 의 유사도.
분모: z zz 와 모든 후보(z + z^{+}z + 포함, 여러 negative 포함)의 유사도를 합한 것.
분수 전체: 여러 후보 중에서 z + z^{+}z + 를 고를 확률.
앞의 − log -\log− log : 그 확률이 1에 가까울수록 손실이 0에 가깝고, 작을수록 손실이 커집니다.
즉 이 손실을 줄인다는 것은 "z zz 의 진짜 짝을 맞히는 문제"를 잘 푸는 것과 같습니다. 짝은 가까이, 나머지는 멀리 밀어냅니다.
라벨을 사람이 붙이는 데는 비용이 아주 큽니다. 그런데 데이터 자체에는 이미 구조가 많습니다. 같은 이미지의 두 변형은 같은 의미이고, 서로 다른 이미지는 다른 의미라는 사실은 라벨 없이도 알 수 있습니다.
self-supervised learning은 이런 "공짜 정답"으로 학습 문제를 만듭니다. 그리고 그 문제를 풀도록 표현을 학습하면, 나중에 분류나 검색 같은 실제 과제에 그 표현을 그대로 가져다 쓸 수 있습니다. 대조손실은 이 아이디어를 "짝을 맞히는 확률을 최대화하라"는 하나의 수식으로 정리한 것입니다.
두 표현 벡터 u uu 와 v vv 의 코사인 유사도는 두 벡터가 이루는 각의 코사인입니다.
sim ( u , v ) = u ⊤ v ∥ u ∥ ∥ v ∥ \operatorname{sim}(u,v)=\frac{u^{\top}v}{\lVert u\rVert\,\lVert v\rVert}
s i m ( u , v ) = ∥ u ∥ ∥ v ∥ u ⊤ v
방향이 같으면 값이 1 11 에 가깝습니다.
직교하면 0 00 입니다.
반대 방향이면 − 1 -1− 1 에 가깝습니다.
길이로 나누기 때문에, 벡터의 크기가 아니라 오직 방향만 봅니다. 대조학습에서 "비슷하다"를 방향의 일치로 정의하는 것입니다.
기준 표현과 그 짝, 그리고 negative를 다음처럼 둡니다.
z = [ 1 0 ] , z + = [ 0.8 0.6 ] , z − = [ 0 1 ] z=\begin{bmatrix}1\\0\end{bmatrix},\qquad
z^{+}=\begin{bmatrix}0.8\\0.6\end{bmatrix},\qquad
z^{-}=\begin{bmatrix}0\\1\end{bmatrix}
z = [ 1 0 ] , z + = [ 0 . 8 0 . 6 ] , z − = [ 0 1 ]
먼저 짝과의 유사도를 구합니다. 길이는 ∥ z ∥ = 1 \lVert z\rVert=1∥ z ∥ = 1 , ∥ z + ∥ = 0. 8 2 + 0. 6 2 = 1 = 1 \lVert z^{+}\rVert=\sqrt{0.8^2+0.6^2}=\sqrt{1}=1∥ z + ∥ = 0 . 8 2 + 0 . 6 2 = 1 = 1 이므로
sim ( z , z + ) = 1 ⋅ 0.8 + 0 ⋅ 0.6 1 ⋅ 1 = 0.8 \operatorname{sim}(z,z^{+})=\frac{1\cdot 0.8+0\cdot 0.6}{1\cdot 1}=0.8
s i m ( z , z + ) = 1 ⋅ 1 1 ⋅ 0 . 8 + 0 ⋅ 0 . 6 = 0 . 8
다음으로 negative와의 유사도를 구합니다.
sim ( z , z − ) = 1 ⋅ 0 + 0 ⋅ 1 1 ⋅ 1 = 0 \operatorname{sim}(z,z^{-})=\frac{1\cdot 0+0\cdot 1}{1\cdot 1}=0
s i m ( z , z − ) = 1 ⋅ 1 1 ⋅ 0 + 0 ⋅ 1 = 0
짝은 유사도 0.8 0.80 . 8 로 크고, negative는 0 00 으로 작습니다. 대조학습은 앞 값을 더 키우고 뒤 값을 더 낮추도록 표현을 움직입니다.
위 유사도를 그대로 InfoNCE에 넣어 봅니다. 후보는 짝 z + z^{+}z + 하나와 negative z − z^{-}z − 하나이고, 온도는 τ = 0.1 \tau=0.1τ = 0 . 1 로 둡니다.
지수 항을 각각 계산합니다.
exp ( 0.8 0.1 ) = e 8 ≈ 2980.96 , exp ( 0 0.1 ) = e 0 = 1 \exp\!\left(\frac{0.8}{0.1}\right)=e^{8}\approx 2980.96,\qquad
\exp\!\left(\frac{0}{0.1}\right)=e^{0}=1
exp ( 0 . 1 0 . 8 ) = e 8 ≈ 2 9 8 0 . 9 6 , exp ( 0 . 1 0 ) = e 0 = 1
분모는 둘의 합입니다.
∑ j exp ( ⋅ ) = 2980.96 + 1 = 2981.96 \sum_j \exp(\cdot)=2980.96+1=2981.96
j ∑ exp ( ⋅ ) = 2 9 8 0 . 9 6 + 1 = 2 9 8 1 . 9 6
따라서 손실은
L = − log 2980.96 2981.96 = − log ( 0.99966 ) ≈ 0.00034 \mathcal{L}=-\log\frac{2980.96}{2981.96}=-\log(0.99966)\approx 0.00034
L = − log 2 9 8 1 . 9 6 2 9 8 0 . 9 6 = − log ( 0 . 9 9 9 6 6 ) ≈ 0 . 0 0 0 3 4
짝을 아주 잘 맞히고 있어 손실이 0에 가깝습니다.
반대로 표현이 나빠서 짝의 유사도가 0.2 0.20 . 2 , negative의 유사도가 0.6 0.60 . 6 으로 뒤바뀌었다면
L = − log e 2 e 2 + e 6 = − log 7.389 7.389 + 403.43 = − log ( 0.0180 ) ≈ 4.02 \mathcal{L}=-\log\frac{e^{2}}{e^{2}+e^{6}}=-\log\frac{7.389}{7.389+403.43}=-\log(0.0180)\approx 4.02
L = − log e 2 + e 6 e 2 = − log 7 . 3 8 9 + 4 0 3 . 4 3 7 . 3 8 9 = − log ( 0 . 0 1 8 0 ) ≈ 4 . 0 2
로 손실이 크게 올라갑니다. 손실을 줄이는 과정이 곧 짝을 가깝게, negative를 멀게 만드는 과정임을 값으로 확인할 수 있습니다. 온도 τ \tauτ 가 작을수록 유사도 차이가 지수 안에서 크게 증폭되어, 손실이 유사도 순위에 더 민감해집니다.
self-supervised learning은 라벨 없이 데이터 자체로 학습 문제를 만든다.
대조학습은 같은 원본의 짝은 가깝게, 다른 데이터는 멀게 만든다.
코사인 유사도 sim ( u , v ) = u ⊤ v ∥ u ∥ ∥ v ∥ \operatorname{sim}(u,v)=\dfrac{u^{\top}v}{\lVert u\rVert\lVert v\rVert}s i m ( u , v ) = ∥ u ∥ ∥ v ∥ u ⊤ v 는 두 표현의 방향 일치를 잰다.
InfoNCE는 "짝을 맞히는 확률"에 − log -\log− log 를 씌운 손실이다.
짝을 잘 맞히면 손실이 0에 가깝고, 못 맞히면 손실이 커진다.
온도 τ \tauτ 가 작을수록 유사도 차이에 더 민감해진다.
핵심 식은 다음과 같습니다.
L = − log exp ( sim ( z , z + ) / τ ) ∑ j exp ( sim ( z , z j ) / τ ) \mathcal{L}=-\log\frac{\exp\!\bigl(\operatorname{sim}(z,z^{+})/\tau\bigr)}{\displaystyle\sum_{j}\exp\!\bigl(\operatorname{sim}(z,z_j)/\tau\bigr)}
L = − log j ∑ exp ( s i m ( z , z j ) / τ ) exp ( s i m ( z , z + ) / τ )
코사인 유사도가 벡터의 크기가 아니라 방향만 보는 이유를 식으로 설명할 수 있는가?
InfoNCE의 분자와 분모는 각각 무엇을 뜻하는가?
온도 τ \tauτ 를 아주 작게 하면 손실이 왜 유사도 순위에 더 민감해지는가?