02장은 로짓에서 확률을 거쳐 손실 한 숫자까지 왔다. 학습은 그 손실을 줄이는 일이다. 줄이려면 손실을 로짓으로 미분한 gradient(기울기)가 있어야 한다. 이 장의 결론은 한 줄이다.
∂z∂L=q−y
softmax와 cross-entropy를 짝지으면 로짓에 대한 gradient가 "예측확률 − 정답"이라는 깔끔한 형태가 된다. 이 한 줄 덕분에 구현이 단순해지고, 틀릴수록 큰 교정 신호가 나오며, MSE(평균제곱오차, mean squared error)가 겪는 포화 문제를 피한다. 이 장은 softmax 야코비안(Jacobian, 미분을 모은 표)부터 시작해 이 결과를 한 줄도 건너뛰지 않고 유도한다. 그다음 MSE와 나란히 대비하고, 02장의 주 예제 z=(2,1,0.1)로 한 스텝을 직접 돌린다.
3.1 도입 — gradient가 왜 중요한가
신경망 학습은 손실 L을 줄이는 파라미터 θ를 찾는 일이다. 경사하강(gradient descent)은 이를 가장 단순하게 푼다.
θ←θ−η∂θ∂L.
손실의 gradient는 "L이 가장 가파르게 증가하는 방향"이다. 그래서 그 반대 방향(−∂L/∂θ)으로 한 발짝 움직이면 L이 줄어든다. 발걸음 크기 η는 학습률(learning rate)이다.
여기서 결정적인 통찰이 하나 있다. 손실함수를 어떻게 고르느냐가 gradient의 모양을 정하고, 그 모양이 학습 속도를 좌우한다. 같은 모델·같은 데이터라도 손실을 CE로 쓰느냐 MSE로 쓰느냐에 따라 결과가 갈린다. CE는 큰 신호를 준다(q−y). MSE는 신호가 거의 0이 되어 학습이 멈추기도 한다((p^−y)σ′). 이 장의 나머지는 왜 softmax/sigmoid와 CE의 조합이 이상적인 모양을 내는지 보인다.
전체 그림을 먼저 보자. 로짓 z가 들어가 손실 L이 나오고(forward), 그 미분 q−y가 되돌아 나온다(backward).
위 그림에서 backward로 거치는 두 점선 단계가 약분되어, 굵은 화살표 한 줄 q−y로 합쳐진다. 그 약분이 이 장의 핵심이다.
Advertisements
3.2 softmax + cross-entropy의 gradient — 핵심 유도
설정과 기호
먼저 기호를 정해 둔다.
로짓: z=(z1,…,zK) — 모델 마지막 선형층의 출력으로, 아직 확률이 아니다.
예측 확률: q=softmax(z), 즉 qi=∑kezkezi, ∑iqi=1, qi∈(0,1).
정답: one-hot 라벨 y. 정답 클래스 c에서 yc=1, 나머지는 0이다. ∑kyk=1.
손실: L=−∑kyklogqk.
y가 one-hot이라 사실상 L=−logqc다. 하지만 유도는 일반 y로 한다. 그러면 soft label(부드러운 정답 분포)에도 그대로 성립한다.
목표는 ∂zi∂L를 구하는 것이다. 전략은 연쇄법칙이다.
∂zi∂L=k=1∑K∂qk∂L∂zi∂qk.
따라서 두 조각이 필요하다. (a) softmax 야코비안 ∂qk/∂zi, (b) 손실의 미분 ∂L/∂qk. 야코비안부터 구한다.
(a) softmax 야코비안 — 천천히, 두 경우로
야코비안은 "출력 qi 하나하나를 입력 zj 하나하나로 미분한 표"다. softmax는 모든 출력이 같은 분모를 나눠 쓴다. 그래서 zj 하나를 건드리면 qi 전체가 흔들린다. 이 때문에 두 경우를 갈라야 한다. i=j(자기 자신을 미분)와 i=j(남을 미분)이다.
qi=Sezi로 쓰고, 분모를 S=∑kezk로 둔다. 먼저 꼭 필요한 사실이 하나 있다. ∂zj∂S=ezj이다. S 안의 여러 항 중 zj를 가진 건 ezj 하나뿐이라, 미분하면 그 항만 살아남기 때문이다.
이제 몫의 미분법 (vu)′=v2u′v−uv′를 쓴다. 여기서 u=ezi, v=S다.
두 경우를 한 줄로. Kronecker 델타 δij={10i=ji=j를 쓰면 두 식이 하나로 합쳐진다.
∂zj∂qi=qi(δij−qj)
이 식이 두 경우를 모두 담는지 검산하자. i=j를 넣으면 δij=1이라 qi(1−qi)가 되어 경우 1과 맞는다. i=j를 넣으면 δij=0이라 qi(0−qj)=−qiqj가 되어 경우 2와 맞는다. 행렬로 쓰면 J=diag(q)−qq⊤이다. 대각에 qi를 놓고, 전체에서 qiqj를 뺀 대칭행렬이다.
위 그림은 야코비안의 두 갈래가 무엇을 뜻하는지 보여 준다. softmax는 "확률 합 = 1"이라는 제약 때문에 경쟁적이다. 한 클래스의 로짓을 올리면 그 확률은 오른다(qi(1−qi)>0). 동시에 다른 모든 클래스의 확률은 깎인다(−qiqj<0). 이 상호작용이 야코비안의 비대각 항이다.
(b) 연쇄법칙으로 ∂zi∂L=qi−yi
이제 남은 조각, 손실의 미분 ∂L/∂qk를 구한다. L=−∑kyklogqk를 qk로 미분한다. 다른 항은 qk를 가지지 않으므로 사라진다. 로그 미분 dqdlogq=1/q를 쓰면
∂qk∂L=−qkyk.
두 조각을 연쇄법칙에 대입한다. 여기서 k는 더미 인덱스, i는 우리가 미분하는 로짓의 인덱스다. 야코비안에서 ∂qk/∂zi는 첫 인덱스가 k, 둘째가 i이므로 델타가 δki로 들어간다.
softmax+CE의 q−y와 완전히 같은 형태다. 사실 sigmoid+BCE는 2-클래스 softmax+CE의 특수꼴이다(02장 §2.1). 여기서도 σ′=p^(1−p^)가 BCE의 1/p^, 1/(1−p^)와 정확히 약분되어 식이 깨끗해진다. 이 약분이 다음 절에서 MSE와 갈리는 분기점이다.
3.4 왜 MSE는 분류에 나쁜가 — 대비
sigmoid + MSE의 gradient와 포화(saturation)
같은 sigmoid 출력 p^=σ(z)에 손실만 MSE로 바꾼다. L=21(p^−y)2이다. 연쇄법칙으로 ∂p^∂L=(p^−y), ∂z∂p^=σ′(z)=p^(1−p^)이므로
∂z∂L=(p^−y)σ′(z)=(p^−y)p^(1−p^)
여기 σ′(z)=p^(1−p^)가 곱해진 채 남아 있다. CE에서는 약분되어 사라졌던 바로 그 항이다. 이게 치명적이다.
포화(saturation)와 vanishing gradient. 시그모이드는 z가 크게 음수면 p^≈0, 크게 양수면 p^≈1로 포화한다. 두 경우 모두 σ′(z)=p^(1−p^)≈0이다. 그런데 모델이 크게 틀린 상황이 바로 이런 포화 영역이다. 예를 들어 정답 y=1인데 z가 크게 음수면 p^≈0이다. 이때
∂z∂LMSE=(≈−1p^−y)≈0p^(1−p^)≈0.
가장 강하게 고쳐야 할 샘플에서 gradient가 사라져 학습이 멈춘다.
cross-entropy는 정반대다. 같은 상황에서
∂z∂LCE=p^−y≈0−1=−1(크기최대).
σ′가 약분되어 사라졌으므로 포화 영역에서도 gradient가 살아 있다. "틀릴수록 큰 신호"가 그대로 유지된다.
위 그림은 같은 "크게 틀린" 입력에서 CE는 gradient가 살고 MSE는 사라지는 갈림을 보여 준다.
표: "크게 틀린 샘플"에서 CE gradient vs MSE gradient
y=1로 고정한다. 여러 로짓 z에 대해 p^=σ(z), CE gradient ∣p^−y∣, MSE gradient ∣(p^−y)p^(1−p^)∣를 직접 계산했다.
z
p^=σ(z)
σ′(z)=p^(1−p^)
CE∣p^−y∣
MSE∣(p^−y)σ′∣
CE/MSE 배율
−6
0.002473
0.002467
0.997527
0.002460
≈ 405×
−4
0.017986
0.017663
0.982014
0.017345
≈ 57×
−2
0.119203
0.104994
0.880797
0.092478
≈ 9.5×
0
0.500000
0.250000
0.500000
0.125000
4×
+2
0.880797
0.104994
0.119203
0.012516
≈ 9.5×
+4
0.982014
0.017663
0.017986
0.000318
≈ 57×
+6
0.997527
0.002467
0.002473
0.000006
≈ 405×
표를 읽는 법은 이렇다. 정답이 y=1인데 z=−6이면 "크게 틀린" 상태다. CE는 gradient 크기 0.998로 강하게 끌어올린다. MSE는 0.0025로 사실상 멈춘다. 약 405배 차이다. 틀릴수록, 즉 표의 위·아래 극단으로 갈수록 이 격차가 더 벌어진다. 이것이 "MSE는 분류에 나쁘다"의 정량적 실체다. 맨 위 행과 맨 아래 행은 각각 "정답인데 크게 틀림"과 "오답인데 크게 확신"의 대칭 상황이다. 둘 다 MSE에서 gradient가 소실된다.
(보조) 볼록성(convexity)
또 다른 차이는 로짓에 대한 손실 곡면의 모양이다. 더 정확히는 마지막 선형층의 가중치에 대한 곡면이다.
softmax + CE는 로짓에 대해 볼록(convex)하다. log-sum-exp는 볼록함수이고, 선형항을 더한 NLL(음의 로그우도)도 볼록이다. 그래서 마지막 선형층 기준으로 단일 전역최소를 가진다(국소최소 함정이 없다). 로그가 softmax의 지수와 결합해 볼록성을 보장한다.
sigmoid + MSE는 같은 출력에 대해 비볼록이 될 수 있다. 21(σ(z)−y)2는 z에 대해 굴곡과 평탄부가 있어 비볼록이라, 최적화가 더 어렵다.
공정한 단서. "비볼록이라 항상 더 나쁘다"는 과장이다. 전체 심층망은 어느 손실을 써도 비볼록이다. 출력 리셋 같은 기법을 더하면 sigmoid+MSE도 softmax+CE에 견줄 수 있고, 노이즈 데이터에선 더 강건할 수 있다는 연구도 있다(arXiv:2411.11213). 다만 표준 설정에서 sigmoid+MSE가 포화 때문에 느리게 학습한다는 사실은 잘 확립돼 있다. 이 장의 주장은 "기본값으로 CE가 더 안전하고 빠르다"이지 "MSE가 절대 안 된다"가 아니다.
3.5 한 스텝 직접 돌리기 (주 예제 미리보기)
3-클래스 문제다. 로짓 z=(2.0,1.0,0.1), 정답은 클래스 2(인덱스 1, 0부터 셈)다. 즉 one-hot y=(0,1,0)이다. 정답 클래스가 가장 큰 로짓이 아니라서 처음엔 확률이 낮다(틀리기 직전 상태). 학습률은 η=0.1이다.
① softmax. 분모부터 구한다. S=e2+e1+e0.1=7.389056+2.718282+1.105171=11.212509.
⑤ 개선 확인. 새 로짓으로 softmax를 다시 구하면 q′=(0.632090,0.267920,0.099990)이다.
정답 확률: 0.242433→0.267920 (+0.02549, 올라감)
새 손실: L′=−log(0.267920)=1.317067 (ΔL=−0.099963, 줄어듦)
단 한 스텝에 정답 확률이 오르고 손실이 내렸다. q−y gradient가 의도한 방향으로 작동함을 숫자로 확인했다. 이 예제의 완전한 전 과정 추적은 05장 walkthrough에 단일화돼 있다.
위 그림은 한 스텝의 다섯 단계를 한 흐름으로 잇는다. 로짓에서 출발해 손실이 내려간 로짓으로 끝난다.
3.6 기타 연결
MLE와의 연결 — q−y는 음의 로그우도의 자연 gradient
cross-entropy를 최소화하는 일은 최대우도추정(MLE)과 같다(01장 §1.6). 모델이 정답 클래스에 부여한 확률 qc의 로그우도 logqc를 최대화하는 것이, 곧 −logqc=L을 최소화하는 것이다. 이 NLL을 로짓으로 미분하면 자연스럽게 q−y가 나온다(§3.2). 즉 q−y는 임의로 고른 식이 아니라 확률모델의 우도를 키우는 정확한 방향이다.
미니배치·역전파로 백본까지
∂L/∂z=q−y는 출력층 로짓에서의 신호다. 실제 학습에선 이 신호가 세 단계로 퍼진다.
미니배치 N개에 대해 평균을 낸다. ∂z(n)∂Lˉ=N1(q(n)−y(n)).
이 신호가 역전파로 가중치까지 간다. 마지막 층이 z=Wx+b이면 ∂W∂L=(q−y)x⊤, ∂b∂L=q−y다.
그리고 체인을 따라 백본(은닉층과 특징추출기)까지 그대로 전파된다.
위 그림은 깨끗한 q−y가 출력층에서 시작해 백본 파라미터까지 거슬러 흐르는 길을 보여 준다. 출발점이 깔끔해서 backward 전체가 수치적으로 안정적이고 구현이 간단하다. softmax와 CE를 합쳐서 한 번에 미분하므로, 중간의 1/q 같은 불안정한 항을 직접 다루지 않아도 된다.
학습 안정성 한 줄
로짓이 폭주하면, 즉 ∣z∣가 매우 커지면 ez의 오버플로/언더플로로 softmax가 불안정해질 수 있다. 이때는 log-sum-exp trick으로 안정화한다(최댓값 빼기). 필요하면 gradient clipping으로 폭주를 억제한다. 구체적 수치안정 기법은 04장 §4.1에서 다룬다.
softmax+CE의 로짓 gradient는 q−y(예측−정답)이고, sigmoid+BCE도 p^−y로 같은 꼴이다. 둘 다 약분 덕에 깔끔하고, 그래서 MSE의 포화(405× 격차)를 피한다. 다음 04장은 이 깔끔한 식을 코드로 옮길 때의 현실을 다룬다 — log-sum-exp로 NaN을 막고, label smoothing으로 과확신을 누르며, 흔한 함정을 피하는 법이다.
출처
표준 결과(softmax+CE의 q−y, sigmoid+BCE의 p^−y, MSE 포화)는 모두 공개 표준 교재·강의·문서와 일치하며, §3.4 표와 §3.5의 숫자는 직접 검산했다.
Goodfellow, Bengio, Courville — Deep Learning (2016), Ch.6.2.2 — softmax+NLL gradient가 MLE의 자연 gradient이며 log가 exp의 포화를 상쇄.