전체 지도

KL·브레그만·피셔: 세 거리가 볼록함수 하나에서 나온다

log가 나온 여섯 자리가 곱을 합으로 바꾸는 성질 하나로 모였는데, 분포 사이의 "거리"에도 비슷한 일이 있을까? 모델을 학습시킬 때는 손실 속의 KL 발산으로, 볼록함수의 그림을 그릴 때는 브레그만 발산으로, 한 걸음의 길이를 잴 때는 피셔 계량으로, 이 책은 자리마다 다른 거리를 꺼내 썼다. 같은 두 분포를 놓고도 KL, 브레그만, 피셔 가운데 무엇으로 잴지 매번 골라야 했다. 세 이름은 사실 하나의 구조를 가리키고 있지 않을까? 적어도 지수족 안에서는 그래서, KL·브레그만·피셔는 모두 로그정규화자 F라는 볼록함수 하나에서 나온다.

세 거리를 다시 적기

KL 발산부터 다시 적자. KL(p‖q)는 "현실 p로 살면서 모델 q를 믿을 때 치르는 추가 비용"이다. p와 q의 자리를 바꾸면 값이 달라지는 비대칭 발산이고, 어떤 두 분포 사이에서도 정의된다.

브레그만 발산은 "볼록함수와 접선 사이의 높이 차이"다. 볼록함수 F의 한 점 b에서 접선을 긋고, 다른 점 a에서 곡선이 접선보다 얼마나 위에 있는지를 잰다. 그 높이를 BF(a : b)로 적는다.

볼록함수 F(θ)와, 점 b에서 그은 접선, 점 a에서 곡선과 접선 사이의 간격 B_F(a : b)를 그린 그림. 접선에 b에서의 두 번 미분으로 만든 이차 항을 더한 점선은 b 가까이에서만 곡선과 겹친다
볼록함수 F(θ)와, 점 b에서 그은 접선, 점 a에서 곡선과 접선 사이의 간격 B_F(a : b)를 그린 그림. 접선에 b에서의 두 번 미분으로 만든 이차 항을 더한 점선은 b 가까이에서만 곡선과 겹친다

지수족 안에서는 이 높이가 KL과 같았다. 단, KL에서 앞에 오는 분포와 뒤에 오는 분포의 순서를 뒤집어서.

KL(pθ1 ∥ pθ2)=BF(θ2:θ1)=F(θ2)−F(θ1)−η1⋅(θ2−θ1)=BF∗(η1:η2)\begin{aligned} \textcolor{#c2398a}{\mathrm{KL}}(\textcolor{#7f8f10}{p}_{\textcolor{#3b7de0}{\theta}_1}\,\|\,\textcolor{#7f8f10}{p}_{\textcolor{#3b7de0}{\theta}_2}) &= \textcolor{#c2398a}{B}_{\textcolor{#7d8a3a}{F}}(\textcolor{#3b7de0}{\theta}_2 : \textcolor{#3b7de0}{\theta}_1) \\ &= \textcolor{#7d8a3a}{F}(\textcolor{#3b7de0}{\theta}_2) - \textcolor{#7d8a3a}{F}(\textcolor{#3b7de0}{\theta}_1) \\ &\quad - \textcolor{#e0504a}{\eta}_1 \cdot (\textcolor{#3b7de0}{\theta}_2 - \textcolor{#3b7de0}{\theta}_1) \\ &= \textcolor{#c2398a}{B}_{\textcolor{#c0622f}{F^*}}(\textcolor{#e0504a}{\eta}_1 : \textcolor{#e0504a}{\eta}_2) \end{aligned}
KLKL 발산p지수족의 한 분포 (첨자가 정함)θ자연 파라미터, 첨자 1, 2 는 두 분포B브레그만 발산, BF(a:b)=F(a)−F(b)−∇F(b)⋅(a−b)F로그정규화자η기댓값 파라미터, η1=∇F(θ1)=Eθ1[t]F∗F 의 짝 함수 (르장드르 변환)그래디언트 η 를 새 변수로 다시 쓴 볼록함수,값은 음의 엔트로피\begin{array}{ll} \textcolor{#c2398a}{\mathrm{KL}} & \text{KL 발산} \\ \textcolor{#7f8f10}{p} & \text{지수족의 한 분포 (첨자가 정함)} \\ \textcolor{#3b7de0}{\theta} & \text{자연 파라미터, 첨자 1, 2 는 두 분포} \\ \textcolor{#c2398a}{B} & \text{브레그만 발산, } B_F(a:b) = F(a) - F(b) \\ & \qquad - \nabla F(b)\cdot(a-b) \\ \textcolor{#7d8a3a}{F} & \text{로그정규화자} \\ \textcolor{#e0504a}{\eta} & \text{기댓값 파라미터, } \eta_1 = \nabla F(\theta_1) = E_{\theta_1}[t] \\ \textcolor{#c0622f}{F^*} & \text{F 의 짝 함수 (르장드르 변환)} \\ & \text{그래디언트 } \eta \text{ 를 새 변수로 다시 쓴 볼록함수,} \\ & \text{값은 음의 엔트로피} \end{array}

KL = 브레그만 식에서 인자의 순서를 눈여겨보자. KL(p₁‖p₂)를 θ 좌표의 브레그만으로 쓰면 BF(θ₂ : θ₁)로 순서가 뒤집히고, η 좌표의 브레그만으로 쓰면 BF*(η₁ : η₂)로 순서가 바뀌지 않는다. 지수족을 벗어나면 KL은 여전히 있지만 그것을 낳는 F가 없어서, KL = 브레그만 등식도 없다.

피셔 계량(곳마다 작은 걸음의 길이를 재는 규칙)은 "두 점이 가까워지면 비대칭이 사라지며 드러나는 대칭 거리"다.

KL(pθ ∥ pθ+dθ)≈12 dθ⊤ I(θ) dθI(θ)=∇2F(θ)\begin{aligned} \textcolor{#c2398a}{\mathrm{KL}}(\textcolor{#7f8f10}{p}_{\textcolor{#3b7de0}{\theta}}\,\|\,\textcolor{#7f8f10}{p}_{\textcolor{#3b7de0}{\theta} + d\textcolor{#3b7de0}{\theta}}) &\approx \frac{1}{2}\, d\textcolor{#3b7de0}{\theta}^{\top}\, \textcolor{#0e8f8f}{I}(\textcolor{#3b7de0}{\theta})\, d\textcolor{#3b7de0}{\theta} \\ \textcolor{#0e8f8f}{I}(\textcolor{#3b7de0}{\theta}) &= \nabla^2 \textcolor{#7d8a3a}{F}(\textcolor{#3b7de0}{\theta}) \end{aligned}
KLKL 발산p지수족의 한 분포θ자연 파라미터, dθ 는 아주 작은 변화I피셔 정보 행렬 (계량)F로그정규화자, ∇2F 는 그 헤시안(Hessian, 두 번 미분한 값들의 행렬)\begin{array}{ll} \textcolor{#c2398a}{\mathrm{KL}} & \text{KL 발산} \\ \textcolor{#7f8f10}{p} & \text{지수족의 한 분포} \\ \textcolor{#3b7de0}{\theta} & \text{자연 파라미터, } d\theta \text{ 는 아주 작은 변화} \\ \textcolor{#0e8f8f}{I} & \text{피셔 정보 행렬 (계량)} \\ \textcolor{#7d8a3a}{F} & \text{로그정규화자, } \nabla^2 F \text{ 는 그 헤시안} \\ & \text{(Hessian, 두 번 미분한 값들의 행렬)} \end{array}

두 분포가 아주 가까울 때 KL을 2차까지 근사해도, 브레그만을 2차까지 근사해도 같은 행렬이 나타난다. 로그정규화자 F를 두 번 미분한 ∇²F(볼록함수 F가 휘어진 정도)다. 위 그림의 점선이 ∇²F로 만든 이차식인데, b 가까이에서는 곡선에 붙어 있다가 멀어지면 떨어진다.

KL, 브레그만, 피셔가 여기서 만난다. KL과 브레그만은 떨어진 두 점 사이의 발산이고, 피셔는 한 점 둘레의 국소적 계량이다. 두 점을 아주 가깝게 붙여 2차 근사를 보면 셋이 하나가 된다.

직접 움직여 보기

불러오는 중…

이 절의 결론

“KL 발산은 어떤 두 분포 사이에서나, 브레그만 발산은 볼록함수가 있는 곳에서, 피셔 계량은 두 분포가 아주 가까울 때(2차 근사) 쓴다. 지수족 안에서는 셋이 모두 로그정규화자 F 하나에서 나오지만, KL과 브레그만이 같다고 말할 때는 언제나 인자의 순서를 함께 말한다.”

문제 4. 예상 점수와 실제 점수의 간격

시험 점수를 예상해 놓고 얼마나 빗나갔는지 잴 때 흔히 (실제 − 예상)²을 쓴다. (가) 볼록함수 f(x) = x²로 브레그만 발산 Bf(70 : 65)를 계산하라(실제 70점, 예상 65점). (나) 두 인자를 바꾼 Bf(65 : 70)은? (다) f(x) = eˣ로 Bf(3 : 2)와 Bf(2 : 3)을 계산하고, 왜 (가)(나)와 다른지 말하라.

왼쪽은 f(x) = x² 위의 두 점 x = 65, 70, 오른쪽은 f(x) = eˣ 위의 두 점 x = 2, 3. 접선과 높이 차는 그리지 않았다
왼쪽은 f(x) = x² 위의 두 점 x = 65, 70, 오른쪽은 f(x) = eˣ 위의 두 점 x = 2, 3. 접선과 높이 차는 그리지 않았다

함께 풀기

김민준 M01
김민준

(가)는 f(70) − f(65) − f′(65) × (70 − 65) = 4900 − 4225 − 130 × 5 = 25. 오차 제곱이랑 똑같아요.

김민준 M04
김민준

(나)는 순서를 바꿨으니 달라져야 하는데… 4225 − 4900 − 140 × (−5) = 25. 같아요. 브레그만은 비대칭이라고 들었는데요.

선생님 T01
선생님

(다)를 먼저 해 보고 비교해 봐요.

이서연 S01
이서연

Bf(3 : 2) = e³ − e² − e² × (3 − 2) = 5.307, Bf(2 : 3) = e² − e³ − e³ × (2 − 3) = e² = 7.389. 이번엔 달라.

선생님 T01
선생님

접선과 곡선 사이의 높이는 곡선이 얼마나 휘었느냐로 정해지죠. x²와 eˣ는 어디서 얼마나 휘어 있어요?

이서연 S07
이서연

x²는 두 번 미분하면 어디서나 2예요. 어느 점에서 접선을 그어도 곡선이 똑같은 모양으로 벌어지니까 순서를 바꿔도 같아요. eˣ는 두 번 미분해도 eˣ라 오른쪽으로 갈수록 더 휘어요. 그래서 접선을 어디에 긋느냐에 따라 높이가 달라져요.

김민준 M01
김민준

오차 제곱은 어느 점수대에서나 같은 기준으로 깎는 조교고, eˣ는 점수대마다 깎는 기준이 다른 조교네요. KL을 낳는 로그정규화자 F는 어느 쪽인지 다음 문제에서 보면 되겠어요.

문제 5. 브레그만과 KL, 순서까지

베르누이 분포는 t(x) = x, F(θ) = log(1 + eθ), η = F′(θ) = 성공 확률인 지수족이다. 성공 확률 0.2인 분포 p₁과 0.6인 분포 p₂에 대해 (가) KL(p₁‖p₂)를 정의대로 계산하라. (나) BF(θ₂ : θ₁)와 BF(θ₁ : θ₂)를 계산해 (가)와 비교하라. (다) F*(η) = η log η + (1 − η) log(1 − η)로 BF*(η₁ : η₂)를 계산하라. (위 위젯의 「문제 5 불러오기」로 두 분포를 불러와 자기 계산과 견줄 수 있다.)

성공 확률 0.2 인 분포 p₁ 과 0.6 인 분포 p₂ 의 막대, 그리고 로그정규화자 F(θ) = log(1 + e^θ) 곡선 위에서 두 분포에 해당하는 두 점
성공 확률 0.2 인 분포 p₁ 과 0.6 인 분포 p₂ 의 막대, 그리고 로그정규화자 F(θ) = log(1 + e^θ) 곡선 위에서 두 분포에 해당하는 두 점

함께 풀기

김민준 M01
김민준

(가)는 0.2 log(0.2/0.6) + 0.8 log(0.8/0.4) = 0.3348이요.

김민준 M01
김민준

(나)는 θ₁ = log(0.2/0.8) = −1.386, θ₂ = log(0.6/0.4) = 0.405로 바꿔서, 브레그만을 BF(θ₁ : θ₂)로 짰어요. KL(p₁‖p₂)에서 앞에 온 게 p₁이니까 θ₁이 먼저요. 0.3819가 나와요.

김민준 M06
김민준

0.3348이랑 안 맞아요. 앞에서 KL이 브레그만이라고 한 거, 틀린 거 아니에요?

선생님 T01
선생님

0.3819라는 숫자, 이 문제 어딘가에서 본 적 없어요?

김민준 M01
김민준

KL(p₂‖p₁)을 계산해 보면… 0.3819요. 제가 계산한 게 반대 방향 KL이네요.

선생님 T01
선생님

브레그만 BF(a : b)에서 접선은 어느 점에 그어요?

김민준 M07
김민준

뒤의 b요. KL(p₁‖p₂)는 p₁의 눈으로 평균을 내니까, 접선을 θ₁에 긋고 θ₂에서 높이를 재야 해요. 그러니 BF(θ₂ : θ₁) = 0.3348. 맞아요.

이서연 S01
이서연

(다)는 제가 했어요. F*에 θ₁ = −1.386을 넣었더니 log(−1.386)이 나와서 nan이에요.

선생님 T01
선생님

F*는 무슨 좌표의 함수예요?

이서연 S07
이서연

η요. F는 θ의 함수고 F*는 η의 함수예요. 둘 다 "F"라서 같은 자리에 같은 걸 넣으면 되는 줄 알았어요.

선생님 T01
선생님

그럼 η를 넣어 봐요. 순서는 어떻게 돼요?

이서연 S01
이서연

η₁ = 0.2, η₂ = 0.6을 넣으면 0.3348이에요. 이번엔 순서가 KL과 같아요.

이서연 S01
이서연

θ 쪽에서는 순서가 뒤집히고 η 쪽에서는 그대로네요. 선형대수에서 쌍대공간의 벡터를 원래 공간의 벡터 자리에 넣으면 안 되는 거랑 같아요. 넣을 수는 있어도 뜻이 없어요.

김민준 M01
김민준

보고서 표의 열 이름만 보고 단위를 확인 안 한 거랑 비슷하네요. 같은 "F"여도 들어가는 게 달라요.

위젯에서 확인 → 위 KL·브레그만·피셔 위젯의 「문제 5 불러오기 (성공 확률 0.2, 0.6)」 단추로 두 분포를 불러와, 세 거리를 자기 계산과 견줄 수 있다.

문제 6. 교사 모델의 로짓, 학생 모델의 로짓

분류기의 로짓(소프트맥스에 넣기 전의 점수)은 결과가 셋인 범주분포의 자연 파라미터 θ다. 이때 로그정규화자는 F(θ) = log(eθ₁ + eθ₂ + eθ₃)이고, 기댓값 파라미터 η = ∇F(θ)는 소프트맥스 확률이다. 큰 교사 모델의 로짓이 θT = (2, 1, 0), 작은 학생 모델의 로짓이 θS = (0, 1, 1)이다. 학생이 교사를 흉내 내도록 KL(pT‖pS)를 줄이며 학습한다(증류). (가) KL(pT‖pS)를 정의대로, 그리고 브레그만 발산으로 계산하라. (나) 이 KL을 학생 로짓 θS로 미분한 그래디언트를 구하라. (다) 학생 로짓 셋에 모두 5를 더하면 KL과 그래디언트는 어떻게 되는가?

교사 로짓 (2, 1, 0), 학생 로짓 (0, 1, 1), (다)의 학생 로짓 + 5 = (5, 6, 6)을 막대로 그린 그림. 소프트맥스 확률은 그리지 않았다
교사 로짓 (2, 1, 0), 학생 로짓 (0, 1, 1), (다)의 학생 로짓 + 5 = (5, 6, 6)을 막대로 그린 그림. 소프트맥스 확률은 그리지 않았다

함께 풀기

김민준 M01
김민준

소프트맥스를 돌리면 pT = (0.665, 0.245, 0.090), pS = (0.155, 0.422, 0.422)예요. 정의대로 하면 0.6948. 브레그만은 KL에서 앞에 온 pT 쪽에 접선을 그어야 하니까 BF(θS : θT)이고, 이것도 0.6948이에요.

김민준 M01
김민준

(나)는 학생 분포가 KL에서 뒤에 오니까 브레그만에서도 뒤 인자라고 보고, 뒤 인자 b로 미분하는 공식 −∇²F(b)(a − b)에 넣었어요. (−0.328, −0.047, 0.375)요.

선생님 T01
선생님

학생 로짓을 하나씩 아주 조금 움직여서 KL이 얼마나 변하는지 직접 재 봤어요?

김민준 M05
김민준

유한차분으로 하면… (−0.510, 0.178, 0.332)예요. 안 맞아요. 아, 학생 분포는 KL에서는 뒤에 오는데 BF(θS : θT)에서는 앞 인자 a예요. 순서가 뒤집힌다는 걸 계산할 때는 써 놓고 미분할 때는 잊었어요.

김민준 M01
김민준

앞 인자 a로 미분하면 접선 쪽 θT는 고정이니까 ∇F(θS) − ∇F(θT) = ηS − ηT = pS − pT. (−0.510, 0.178, 0.332), 유한차분이랑 같아요.

이서연 S01
이서연

(다)는 로짓에 같은 수를 더해도 소프트맥스가 그대로니까 KL도 0.6948 그대로일 거야. 그런데 브레그만 식으로 보면 F(θS)가 5만큼 커지는데, 그건 어디로 가지?

선생님 T01
선생님

식의 셋째 항 ηT · (θS − θT)는 그때 얼마나 바뀌어요?

이서연 S01
이서연

ηT의 성분을 다 더하면 1이니까… 셋째 항도 정확히 5 늘어나요. 빼면 상쇄되네요.

김민준 M01
김민준

그래디언트는? pS − pT였잖아.

이서연 S01
이서연

소프트맥스가 그대로니까 그것도 그대로야. 성분을 다 더하면 1 − 1 = 0이고.

선생님 T01
선생님

그래디언트 성분의 합이 0이라는 건, 어느 방향으로 그래디언트가 0이라는 뜻이에요?

이서연 S08
이서연

로짓을 다 같이 올리는 방향이요. 그쪽으로는 KL이 꿈쩍도 안 하니까요.

김민준 M07
김민준

정답이 원-핫인 보통 학습에서 크로스 엔트로피의 그래디언트가 「예측 확률 − 정답」인 것도 이거였네요. PyTorch 과제에서 softmax − onehot을 외우기만 했는데, 브레그만을 앞 인자로 미분한 거였어요.