7장 — 볼츠만 분포

온도: 에너지 차이를 kT로 잰다

온도가 0이면 바닥 상태 하나에 몰리고 무한대이면 고르게 퍼진다는 것은 알았다. 그렇다면 그 사이에서는 어떨까? 분포가 바닥 상태 하나로 얼어붙기 시작하는 것은 온도가 얼마일 때일까?

에너지 0, 1, 2인 세 상태

에너지가 0, 1, 2인 미시상태 세 개로 된 계를 여러 온도의 열원에 붙여 보자(k = 1).

온도 T 에너지 0 에너지 1 에너지 2
0.1 0.99995 약 4.5 × 10⁻⁵ 약 2 × 10⁻⁹
0.5 0.867 0.117 0.016
1 0.665 0.245 0.090
2 0.506 0.307 0.186
10 0.367 0.332 0.301

에너지 간격 1이 kT의 10배인 T = 0.1에서는 바닥 상태가 확률의 0.99995를 차지해 사실상 얼어붙어 있다. 간격이 kT와 같은 T = 1에서는 세 상태가 0.665, 0.245, 0.090으로 나뉘고, 간격이 kT의 10분의 1인 T = 10에서는 거의 고르다. 분포의 모양을 정하는 것은 에너지 차이 자체가 아니라 에너지 차이가 kT의 몇 배인가다. 그래서 모든 에너지를 두 배로 키우는 것과 온도를 절반으로 낮추는 것은 같은 일이다.

얼어붙은 분포에는 한 가지 성질이 더 있다. 에너지를 조금 바꿔도 확률이 거의 움직이지 않는다. 둘째 상태의 에너지를 살짝 바꿀 때 바닥 상태의 확률이 변하는 빠르기 ∂p₀/∂E₁ = βp₀p₁을 재면, T = 1에서는 0.163이지만 T = 0.1에서는 0.00045로 약 360분의 1이다.

ML에서: 어텐션 점수를 √d_k로 나누는 이유

트랜스포머의 어텐션 가중치도 쿼리와 키의 내적을 로짓으로 쓰는 softmax, 곧 내적에 마이너스를 붙인 것을 에너지로 하는 볼츠만 분포다. Vaswani 외(2017)는 내적을 √d_k(d_k는 곱셈이 아니라 키 벡터의 차원, 곧 키 하나를 이루는 숫자의 개수를 가리키는 이름이다. d는 dimension, 아래첨자 k는 key의 머리글자)로 나누면서 그 이유를 이렇게 적었다. 「d_k가 크면 내적의 크기가 커져서 softmax를 기울기가 아주 작은 영역으로 밀어 넣는다고 짐작한다.」 각주에는 쿼리와 키의 성분이 평균 0, 분산 1인 독립 확률변수이면 내적의 분산이 d_k라는 설명이 붙어 있다. d_k = 64는 이 논문의 기본 모델이 모델 차원 512를 어텐션 머리(head) 8개로 나눠 쓴 값이고, 키 16개는 짧은 문장 하나쯤의 길이로 이 책이 고른 값이다. 이 설정에서 쿼리 2만 개를 뽑아 실험해 보면 내적의 표준편차는 8.02이고, 나누지 않은 softmax는 가장 큰 가중치가 평균 0.845, 유효 후보 수 e^H(H는 가중치 분포의 엔트로피, 곧 −ln(가중치)를 가중치로 평균한 값이다. 이것을 지수에 올린 e^H는 가중치를 고르게 나눠 가진 키가 몇 개인 셈인지를 말한다)가 1.64로 거의 한 키에 몰린다. √d_k로 나누면 가장 큰 가중치는 0.247, 유효 후보 수는 10.74가 된다. 이 장을 마친 독자는 이 문장을 「에너지 차이가 kT보다 훨씬 크면 볼츠만 분포는 바닥 상태 하나로 얼어붙고, 얼어붙은 분포는 에너지를 조금 바꿔도 거의 변하지 않아 기울기가 사라진다. √d_k로 나누는 것은 에너지가 퍼진 폭에 맞춰 온도를 √d_k로 올리는 일이다」로 읽게 된다.

직접 움직여 보기어텐션의 유효 후보 수새 창에서 열기 ↗

강화학습에서는 상태 s(여기서는 미시상태가 아니라 에이전트가 처한 상황)에서 행동 a의 가치 Q(s, a)를 음의 에너지로 쓰는 softmax 정책 π(a|s) ∝ e^(Q(s,a)/τ)를 볼츠만 탐색(Boltzmann exploration)이라 부른다. 이 온도를 어떻게 잡아야 하는지는 아래 문제 5에서 따져 본다.

문제 4. 기울기가 가장 큰 온도

에너지가 0과 1인 두 상태로 된 계(k = 1)가 있다. 위 상태의 에너지를 살짝 바꿀 때 바닥 상태의 확률이 변하는 빠르기 |∂p₀/∂E₁| = βp₀p₁을 T = 0.2, 1, 5, 50에서 구하라. 이 빠르기가 가장 큰 온도는 어디인가?

김민준 M11
김민준

온도가 낮으면 바닥 상태에 몰려서 기울기가 사라진다고 했으니까, 온도를 올릴수록 좋겠죠. T = 50이면 두 상태가 거의 반반이라 제일 잘 움직일 거예요.

이서연 S07
이서연

계산해 보면 T = 0.2에서 0.033, T = 1에서 0.197, T = 5에서 0.050, T = 50에서 0.0050이야. 너무 뜨거워도 작아져.

선생님 T02
선생님

식의 어느 부분이 그렇게 만들었죠?

김민준 M07
김민준

p₀p₁은 반반일 때 1/4로 가장 크지만, 앞에 β가 곱해져 있네요. 온도가 높으면 에너지를 바꿔도 e^(−βE)가 거의 안 변해요. 너무 뜨거우면 에너지가 얼마든 확률이 상관하지 않는 거고요.

이서연 S10
이서연

βe^(−β)/(1 + e^(−β))²를 β로 미분해 0으로 두면 β ≈ 1.543, 곧 T ≈ 0.648이고 그때 빠르기는 0.224예요. 에너지 간격이 kT의 1.5배쯤일 때 가장 잘 움직여요.

선생님 T13
선생님

한 상태에 몰린 쪽에서는 확률이 움직일 여지가 없고, 너무 뜨거운 쪽에서는 에너지가 확률에 거의 닿지 않아요. 그 사이에 기울기가 가장 큰 온도가 있어요.

김민준 M09
김민준

어텐션 점수를 √d_k로 나누는 게 「많이 나눌수록 좋다」가 아니라 「적당히」인 이유가 이거네요. 점수 차이를 kT의 한두 배 근처로 맞추는 거요.

문제 5. 게임 AI의 볼츠만 탐색

게임 AI가 지금까지 몇 번 해 본 경험으로 세 행동의 가치를 Q = (1.0, 0.8, 0.2)로 어림했고, 행동은 π(a) ∝ e^(Q(a)/τ)로 고른다. (가) τ = 1과 τ = 0.1에서 세 행동을 고를 확률을 구하라. (나) 가치가 가장 높은 첫 행동을 99% 넘게 고르려면 τ를 얼마 아래로 낮춰야 하는가? (다) 지금 단계에서 τ를 그렇게 낮추는 것이 좋은가?

김민준 M01
김민준

(가)는 τ = 1이면 (0.441, 0.361, 0.198), τ = 0.1이면 (0.881, 0.119, 0.0003)이에요. (나)는 첫 행동의 확률이 0.99가 되는 τ를 풀면 0.0435예요. (다)는 당연히 좋죠. 가장 좋은 행동을 고르는 게 목표니까 τ를 0까지 내려서 argmax로 고르면 돼요.

이서연 S03
이서연

그런데 0.8은 몇 번 해 보고 어림한 값이잖아. 실제로는 둘째 행동이 첫 행동보다 좋을 수도 있어.

선생님 T12
선생님

τ = 0.0435에서 둘째 행동은 얼마나 자주 해 보게 되죠?

김민준 M07
김민준

0.010이니까 백 번에 한 번이요. 그럼 둘째 행동의 Q는 거의 고쳐지지 않겠네요. 어림이 틀렸어도 틀린 채로 굳어요.

이서연 S09
이서연

온도의 양 끝에서 τ → 0이 바닥 상태 하나만 남기는 argmax였잖아요. 가치가 확실할 때는 그게 맞지만, 어림이 아직 흔들릴 때 바닥 상태에 얼어붙으면 다른 상태를 시험해 볼 기회가 사라져요.

선생님 T13
선생님

그래서 볼츠만 탐색은 경험이 적을 때 온도를 높게 두어 여러 행동을 시험하고, 어림이 믿을 만해지면 온도를 낮춰요. 온도가 가치의 차이를 얼마나 믿고 고를지를 정하는 셈이에요.

김민준 M01
김민준

동아리 첫 학기에는 이 스터디 저 스터디 다 가 보다가, 다음 학기에 하나로 정하는 거랑 같네요.