로그 분배함수: 확률은 로짓의 기울기 변수다
분류 모델이 로짓 z₁, …, z_K를 내놓으면 softmax가 이를 확률로 바꾼다. 공장에서 생산량과 가격이 한 함수의 변수와 기울기였고, 진자에서 속도와 운동량이 그랬다. 그렇다면 로짓과 확률도 어떤 함수의 변수와 기울기일까?
softmax는 기울기다
softmax에서 합이 1이 되게 나누는 데(정규화) 쓰는 합의 로그, 곧 logsumexp를 이 장에서는 로그 분배함수 (정규화 합의 로그, log-partition function)라 부르고 ψ(프사이)로 쓴다. ψ는 로짓의 볼록 함수이고, 그 기울기를 계산하면 놀랍게도 softmax 확률이 그대로 나온다.
공장 문제에 빗대면 로짓은 생산량 자리에, 확률은 가격 자리에 있다. 그렇다면 ψ를 확률의 함수로 다시 쓴 켤레 ψ*는 무엇일까? 계산법대로 「새 변수 곱하기 원래 변수, 빼기 원래 함수」를 만들고 zᵢ = ln pᵢ + ln Z를 넣으면, Σ pᵢ가 1이므로 ln Z가 지워지고 다음만 남는다. 확률의 합이 1이라는 조건이 여기서 쓰였다는 것을 기억해 두자.
로그 분배함수의 켤레는 음의 엔트로피다. 반대 방향, 곧 두 번 변환하면 제자리라는 사실을 쓰면 다음 식을 얻는다.
이 식은 softmax가 무엇을 하는지를 한 줄로 말해 준다. 로짓의 가중 평균(높은 점수 쪽으로 몰리는 힘)과 엔트로피(고르게 퍼지는 힘)의 합을 가장 크게 하는 분포가 softmax이고, 그 최댓값이 ln Z다. 로짓이 (2, 0)이면 ln Z = 2.1269인데, softmax (0.8808, 0.1192)를 넣으면 1.7616 + 0.3653 = 2.1269로 딱 맞는다. 다른 분포를 넣으면 어떻게 되는지는 아래 문제 6에서 직접 넣어 본다.
문제 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와 다른 글자를 쓴다.

(가)는 쉬워요. ψ의 기울기가 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. 음의 엔트로피예요.

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

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

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

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

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

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

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

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

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) = +∞예요.

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

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

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

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

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

그럼 중간에 답이 있겠네요. (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예요!

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

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

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

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

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

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

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