5장 — 르장드르 변환

로그 분배함수: 확률은 로짓의 기울기 변수다

분류 모델이 로짓 z₁, …, z_K를 내놓으면 softmax가 이를 확률로 바꾼다. 공장에서 생산량과 가격이 한 함수의 변수와 기울기였고, 진자에서 속도와 운동량이 그랬다. 그렇다면 로짓과 확률도 어떤 함수의 변수와 기울기일까?

softmax는 기울기다

softmax에서 합이 1이 되게 나누는 데(정규화) 쓰는 합의 로그, 곧 logsumexp를 이 장에서는 로그 분배함수 (정규화 합의 로그, log-partition function)라 부르고 ψ(프사이)로 쓴다. ψ는 로짓의 볼록 함수이고, 그 기울기를 계산하면 놀랍게도 softmax 확률이 그대로 나온다.

ψ(z)=ln⁡Z=ln⁡∑iezi,∂ψ∂zi=eziZ=pi\textcolor{#667733}{\psi}(\textcolor{#ff7f0e}{z}) = \ln \textcolor{#667733}{Z} = \ln \sum_i e^{\textcolor{#ff7f0e}{z_i}}, \qquad \frac{\partial \textcolor{#667733}{\psi}}{\partial \textcolor{#ff7f0e}{z_i}} = \frac{e^{\textcolor{#ff7f0e}{z_i}}}{\textcolor{#667733}{Z}} = \textcolor{#e377c2}{p_i}
ψ,ln⁡Z로그 분배함수 (logsumexp)zii번째 클래스의 로짓pisoftmax 확률i클래스 번호\begin{array}{ll} \textcolor{#667733}{\psi}, \ln\textcolor{#667733}{Z} & \text{로그 분배함수 (logsumexp)} \\ \textcolor{#ff7f0e}{z_i} & \text{i번째 클래스의 로짓} \\ \textcolor{#e377c2}{p_i} & \text{softmax 확률} \\ i & \text{클래스 번호} \end{array}
클래스가 둘이고 둘째 로짓을 0으로 둔 로그 분배함수 ψ = ln(e^z₁ + 1)(위)와 그 기울기(아래). z₁ = 0에서 기울기는 0.5, z₁ = 2에서는 0.881이고, 이 기울기가 그 로짓에서의 softmax 확률 p₁이다. ψ는 아래로 볼록해서 기울기가 0과 1 사이에서 늘기만 한다.
클래스가 둘이고 둘째 로짓을 0으로 둔 로그 분배함수 ψ = ln(e^z₁ + 1)(위)와 그 기울기(아래). z₁ = 0에서 기울기는 0.5, z₁ = 2에서는 0.881이고, 이 기울기가 그 로짓에서의 softmax 확률 p₁이다. ψ는 아래로 볼록해서 기울기가 0과 1 사이에서 늘기만 한다.

공장 문제에 빗대면 로짓은 생산량 자리에, 확률은 가격 자리에 있다. 그렇다면 ψ를 확률의 함수로 다시 쓴 켤레 ψ*는 무엇일까? 계산법대로 「새 변수 곱하기 원래 변수, 빼기 원래 함수」를 만들고 zᵢ = ln pᵢ + ln Z를 넣으면, Σ pᵢ가 1이므로 ln Z가 지워지고 다음만 남는다. 확률의 합이 1이라는 조건이 여기서 쓰였다는 것을 기억해 두자.

ψ∗(p)=∑ipiln⁡pi=−H(p)\textcolor{#bb5522}{\psi^*}(\textcolor{#e377c2}{p}) = \sum_i \textcolor{#e377c2}{p_i} \ln \textcolor{#e377c2}{p_i} = -\textcolor{#9467bd}{H}(\textcolor{#e377c2}{p})
ψ∗로그 분배함수의 켤레p확률 벡터 (합이 1이고 음이 아닐 때만 유한)H(p)엔트로피 (nat)\begin{array}{ll} \textcolor{#bb5522}{\psi^*} & \text{로그 분배함수의 켤레} \\ \textcolor{#e377c2}{p} & \text{확률 벡터 (합이 1이고 음이 아닐 때만 유한)} \\ \textcolor{#9467bd}{H}(\textcolor{#e377c2}{p}) & \text{엔트로피 (nat)} \end{array}

로그 분배함수의 켤레는 음의 엔트로피다. 반대 방향, 곧 두 번 변환하면 제자리라는 사실을 쓰면 다음 식을 얻는다.

ln⁡Z=max⁡p(∑ipi zi+H(p))\ln \textcolor{#667733}{Z} = \max_{\textcolor{#e377c2}{p}} \Big( \sum_i \textcolor{#e377c2}{p_i}\,\textcolor{#ff7f0e}{z_i} + \textcolor{#9467bd}{H}(\textcolor{#e377c2}{p}) \Big)
ln⁡Z로그 분배함수p확률 벡터 (최대화하는 변수, 답은 softmax)zi로짓H엔트로피\begin{array}{ll} \ln\textcolor{#667733}{Z} & \text{로그 분배함수} \\ \textcolor{#e377c2}{p} & \text{확률 벡터 (최대화하는 변수, 답은 softmax)} \\ \textcolor{#ff7f0e}{z_i} & \text{로짓} \\ \textcolor{#9467bd}{H} & \text{엔트로피} \end{array}

이 식은 softmax가 무엇을 하는지를 한 줄로 말해 준다. 로짓의 가중 평균(높은 점수 쪽으로 몰리는 힘)과 엔트로피(고르게 퍼지는 힘)의 합을 가장 크게 하는 분포가 softmax이고, 그 최댓값이 ln Z다. 로짓이 (2, 0)이면 ln Z = 2.1269인데, softmax (0.8808, 0.1192)를 넣으면 1.7616 + 0.3653 = 2.1269로 딱 맞는다. 다른 분포를 넣으면 어떻게 되는지는 아래 문제 6에서 직접 넣어 본다.

직접 움직여 보기위젯 3: 로짓 점수와 엔트로피의 균형새 창에서 열기 ↗

문제 6. logsumexp의 켤레

클래스가 두 개인 로그 분배함수 ψ(z) = ln(e^(z₁) + e^(z₂))에 대해 (가) η = (0.7, 0.3)에서 ψ*(η)를 구하고, (나) η = (0.7, 0.7)이면 어떻게 되는지 말하고, (다) 로짓이 (2, 0)일 때 ln Z와 Σ pᵢzᵢ + H(p)를 여러 p에서 비교하라. 여기서 η는 켤레 ψ*에 넣는 벡터다. 확률이 될지 아직 모르는 아무 벡터라서 p와 다른 글자를 쓴다.

김민준 M11
김민준

(가)는 쉬워요. ψ의 기울기가 softmax니까 softmax(z) = (0.7, 0.3)이 되는 z를 찾으면 돼요. z = (ln 0.7, ln 0.3)이면 합이 1이라 ln Z = 0이고, ψ*(η) = 0.7 ln 0.7 + 0.3 ln 0.3 − 0 = −0.6109. 음의 엔트로피예요.

이서연 S06
이서연

그런데 그 z가 유일하진 않아. logsumexp는 엄격하게 볼록(어느 방향으로 잘라 봐도 곧은 데가 없는 볼록)이니까 기울기와 z가 일대일일 거라고 생각했는데… z에 (1, 1)을 더해도 softmax가 안 바뀌잖아.

김민준 M07
김민준

그거 과제에서 overflow 막으려고 로짓에서 max를 빼던 트릭이잖아. 상수를 빼도 답이 안 바뀌어서 그렇게 했던 거고.

선생님 T13
선생님

둘 다 중요한 걸 짚었어요. ψ(z + c(1, 1)) = ψ(z) + c니까, ψ는 (1, 1) 방향으로는 곡선이 아니라 직선이에요. 엄격하게 볼록이 아니에요. 서연 학생, 그럼 ψ*(η)는 z를 어느 걸 고르느냐에 따라 달라질까요?

이서연 S11
이서연

η·(z + c(1, 1)) − ψ(z + c(1, 1)) = η·z + c(η₁ + η₂) − ψ(z) − c이고, η₁ + η₂ = 1이라 c가 지워져요. 값은 같아요. 다행이네요.

선생님 T12
선생님

지금 「η₁ + η₂ = 1이라서」라고 했죠. 그 조건이 없으면요? (나)로 가 봅시다.

김민준 M04
김민준

η = (0.7, 0.7)이면 softmax가 이런 값을 낼 수가 없으니까… 대응하는 z가 없으면 ψ*는 0이라고 두면 되지 않을까요?

선생님 T14
선생님

문제 2를 떠올려 보세요. 대응하는 점이 없을 때 어디로 돌아가야 했죠?

김민준 M03
김민준

정의요. 격자로 돌려 볼게요. z₁, z₂를 −30부터 30까지 두면 최댓값이 11.31, −60부터 60까지 두면 23.31이에요. 어, 이거 또 격자를 따라 커지는데요?

이서연 S07
이서연

z = (t, t)로 두면 바로 보여요. 1.4t − (t + ln 2) = 0.4t − ln 2라서 t를 키우면 끝없이 커져요. 격자 끝 t = 30이면 12 − 0.69 = 11.31, t = 60이면 23.31. 딱 맞네요. ψ*(0.7, 0.7) = +∞예요.

선생님 T14
선생님

그래서 ψ*는 η의 성분이 음이 아니고 합이 1일 때만 유한해요. 합이 1이 아니면 로짓 전체에 상수를 더하는 방향으로 끝없이 올라가고, 음수 성분이 있으면 그 로짓만 내리는 방향으로 올라가요. 켤레가 유한한 곳이 곧 확률 벡터의 조건이에요.

이서연 S09
이서연

확률의 공리를 따로 가정한 적이 없는데 켤레의 정의역에서 저절로 나왔네요. 합이 1인 건 ψ가 (1, 1) 방향으로 기울기 1인 직선이어서고요.

선생님 T01
선생님

이제 (다)예요. 로짓 (2, 0)에서 ln Z는 2.1269예요. 여러 p를 넣어 봐요.

김민준 M06
김민준

제일 큰 로짓에 몰아주는 게 최선이죠. p = (1, 0)이면 2 + 0 = 2. 어, 2.1269보다 작은데요?

이서연 S04
이서연

나는 균등하게. (0.5, 0.5)이면 1 + 0.6931 = 1.6931. 더 작네.

김민준 M09
김민준

그럼 중간에 답이 있겠네요. (0.7, 0.3)은 2.0109, (0.95, 0.05)는 2.0985… softmax인 (0.8808, 0.1192)를 넣으면 1.7616 + 0.3653 = 2.1269. 딱 ln Z예요!

선생님 T14
선생님

민준 학생의 (1, 0)은 argmax예요. 로짓 점수는 가장 높지만 엔트로피를 하나도 받지 못했고, 서연 학생의 균등 분포는 반대예요. softmax는 두 힘 사이의 균형점이고, 그 균형점의 값이 ln Z예요.

이서연 S08
이서연

그럼 엔트로피 항 앞에 계수를 붙이면 균형점이 옮겨가겠네요. 계수가 커지면 균등 쪽으로, 작아지면 argmax 쪽으로요. softmax 온도랑 같은 거 아니에요?

선생님 T13
선생님

좋은 관찰이에요. 로짓 (2, 0)에서 엔트로피 항의 계수를 2로 두고 바로 확인해 볼까요?

김민준 M01
김민준

Σ pᵢzᵢ + 2H(p)를 p₁ 격자에서 최대화하면 p₁ = 0.7311이에요. 로짓을 2로 나눈 (1, 0)을 softmax에 넣은 값이랑 같아요.

이서연 S09
이서연

계수를 0.5로 두면 0.9820이고, 로짓을 0.5로 나눈 (4, 0)의 softmax와 같네요. 엔트로피 항의 계수가 곧 softmax 온도, 로짓을 나누는 수였어요.

김민준 M10
김민준

정리하면 로짓과 확률은 공장 문제의 생산량과 가격이고, ln Z는 비용 곡선, 음의 엔트로피는 이윤표인 거네요. 교차 엔트로피를 수십 번 짜 봤는데 이런 생각은 처음 해 봐요.

이서연 S08
이서연

나는 엔트로피가 별도로 정의한 양이 아니라 ln Z에서 자동으로 나온다는 게 더 놀라워.