10. 레퍼런스 모델 — 이 목줄은 왜 묶여 있나?

망각: 정답을 1까지 미는 손실에는 멈출 곳이 없다

잘 정렬된 모델에 의학 질의응답 데이터를 SFT로 조금 더 가르쳤다. 의학 답변은 좋아졌는데, 전에 잘하던 코딩과 일상 대화가 눈에 띄게 서툴러졌다. 새 데이터에는 코딩 문제가 하나도 없었는데 왜 코딩이 망가졌을까? 그리고 레퍼런스를 묶어 두는 일은 이것과 무슨 관계일까?

이 현상을 망각(catastrophic forgetting, 파국적 망각)이라 부른다. 새 데이터로 더 학습하면 그 데이터에 없던 옛 과제의 성능이 급격히 떨어지는 일이다. 영어 단어만 한 달 외웠더니 수학 공식이 가물가물해지는 것과 비슷하지만 훨씬 빠르고 크다. 새 과제를 잠깐 배우는 사이에 옛 과제 정답률이 뚝 떨어진다. 파라미터는 두 과제가 함께 쓰므로, 새 과제를 위해 움직인 파라미터가 옛 과제의 답도 바꿔 놓는다.

역사: 덧셈을 잊은 신경망

1989년 매클로스키(Michael McCloskey)와 코언(Neal Cohen)은 작은 신경망에 한 자리 덧셈을 가르쳤다. 먼저 1이 들어간 덧셈 17개(1 + 1부터 9 + 1까지, 1 + 2부터 1 + 9까지)를 모두 맞힐 때까지 가르친 뒤, 2가 들어간 덧셈 17개를 가르쳤다. 2의 덧셈도 금방 배웠다. 그런데 2의 덧셈을 단 한 번 학습시킨 뒤부터 이미 1의 덧셈에 제대로 답하지 못했다. 1의 덧셈에 대한 출력이 정답보다 엉뚱한 수에 더 가까워지기도 했고, 두 묶음에 모두 들어 있던 2 + 1과 1 + 2마저 크게 흔들렸다. 두 사람은 이것을 「파국적 간섭」(catastrophic interference)이라 불렀다. 둘째 학습은 2의 덧셈만 보여 주었고, 그 손실은 1의 덧셈에 대해 아무것도 말하지 않았다. 손실이 말하지 않는 곳에서 무슨 일이 일어나는지가 다음 물음이다.

손실이 말하는 “정답이 아닌 모든 것”

소프트맥스로 다음 토큰을 고르는 모델에 크로스 엔트로피(정답 토큰의 음의 로그확률, SFT의 손실)를 걸면, 로짓 zvz_v 에 대한 그래디언트는 한 줄로 나온다. 로짓을 zz 로 적는 것은 신경망의 관습이고, 앞 절들의 DPO 마진 z\textcolor{#d9670b}{z} 와는 글자만 같다.

∂LCE∂zv=πθ(v)−1[v=y]\frac{\partial \textcolor{#d62728}{\mathcal{L}_\text{CE}}}{\partial \textcolor{#cc00ff}{z_v}} = \textcolor{#1565c0}{\pi_\theta}(v) - \mathbb{1}[v = \textcolor{#1c9c60}{y}]
LCE크로스 엔트로피 손실: −log⁡πθ(y)zv토큰 v 의 로짓 (소프트맥스에 들어가기 전의 점수)πθ(v)학습 중인 모델이 토큰 v 에 주는 확률y데이터의 정답 토큰 \small\begin{array}{ll} \textcolor{#d62728}{\mathcal{L}_\text{CE}} & \text{크로스 엔트로피 손실: } -\log\textcolor{#1565c0}{\pi_\theta}(\textcolor{#1c9c60}{y}) \\ \textcolor{#cc00ff}{z_v} & \text{토큰 } v \text{ 의 로짓 (소프트맥스에 들어가기 전의 점수)} \\ \textcolor{#1565c0}{\pi_\theta}(v) & \text{학습 중인 모델이 토큰 } v \text{ 에 주는 확률} \\ \textcolor{#1c9c60}{y} & \text{데이터의 정답 토큰} \end{array}

경사하강은 그래디언트의 반대쪽으로 가므로, 정답이 아닌 토큰은 자기 확률만큼 로짓이 깎인다. 모델이 그 자리에서 가장 굳게 믿던 옛 답이 가장 세게 눌린다. 그리고 정답 토큰의 몫 πθ(y)−1\textcolor{#1565c0}{\pi_\theta}(\textcolor{#1c9c60}{y}) - 1 은 확률이 정확히 1이 되기 전에는 0이 되지 않는다. 목표가 "확률 1"이라 멈출 곳이 없다. 학습이 이어지는 내내 억제 항도 계속 일한다.

목표를 원-핫(정답 하나에 1) 대신 분포 pT\textcolor{#2e7d32}{p_T} — 예컨대 옛 모델 자신의 출력 — 로 바꾸면 사정이 달라진다. 순방향 KL(forward) DKL(pT ∥ πθ)\textcolor{#8c564b}{D_\text{KL}}(\textcolor{#2e7d32}{p_T} \,\|\, \textcolor{#1565c0}{\pi_\theta}) 의 로짓 그래디언트는 πθ(v)−pT(v)\textcolor{#1565c0}{\pi_\theta}(v) - \textcolor{#2e7d32}{p_T}(v) 라서, πθ=pT\textcolor{#1565c0}{\pi_\theta} = \textcolor{#2e7d32}{p_T} 에서 정확히 0이 된다. 더 밀 이유가 사라지는 멈출 곳이 생긴다. 옛 모델의 출력을 목표에 함께 넣거나 옛 모델에 KL 벌점으로 묶는 방법이 망각을 줄이는 이유가 이것이다. 대가도 같은 곳에서 나온다. 앵커를 세게 걸수록 덜 잊지만 새것도 덜 배운다.

문제 7 — 공부 시간표에 새 과목을 끼우면

하루 공부 시간 10시간을 영어 6시간, 수학 3시간, 코딩 1시간으로 나눠 쓰던 학생이, 시험 때문에 의학 공부를 하루 4시간 끼워 넣기로 했다. 하루 10시간은 늘릴 수 없어서 나머지 세 과목을 모두 같은 비율로 줄인다. (가) 세 과목은 각각 몇 시간씩 줄어드는가? 가장 많이 줄어드는 과목은? (나) 목표를 "의학 4시간"이 아니라 "의학 시간을 늘릴 수 있는 만큼 계속 늘린다"로 바꾸면 세 과목은 어디까지 줄어드는가?

김민준 (자신만만)
김민준
4시간을 세 과목에서 똑같이 나눠 빼면 되죠. 한 과목에 1시간 20분씩.
선생님 (질문)
선생님
민준 학생, 코딩은 원래 1시간이었어요. 거기서 1시간 20분을 뺄 수 있나요? "같은 비율로 줄인다"는 조건도 다시 볼까요?
김민준 (난처함)
김민준
아… 남는 6시간을 원래 비율 6 : 3 : 1 로 나누는 거네요. 영어 3.6, 수학 1.8, 코딩 0.6. 줄어든 건 영어 2.4, 수학 1.2, 코딩 0.4시간. 제일 많이 하던 영어가 제일 많이 깎여요.
이서연 (평상)
이서연
(나)는 멈출 곳이 없어. 의학을 늘릴 때마다 세 과목이 같은 비율로 또 깎이니까, 결국 셋 다 0으로 가.

정리 (가) 영어 −2.4, 수학 −1.2, 코딩 −0.4시간. 같은 비율로 줄이면 원래 많이 하던 과목이 많이 깎인다. (나) 목표에 끝이 없으면 세 과목은 모두 0으로 간다. "4시간"처럼 목표가 값으로 정해져 있어야 멈출 곳이 생긴다.

문제 8 — 가장 믿던 답이 가장 세게 눌린다

"감기에 좋은 음식은?"이라는 질문 뒤 첫 토큰으로, 원래 모델은 「좋은」 0.6, 「감기」 0.3, 「답」 0.1 을 준다. 새 데이터는 모든 답을 「답: …」 형식으로 시작한다. (가) 이 위치에서 크로스 엔트로피의 로짓 그래디언트 ∂LCE/∂zv\partial\textcolor{#d62728}{\mathcal{L}_\text{CE}}/\partial\textcolor{#cc00ff}{z_v} 를 세 토큰에 대해 구하고, 어느 토큰의 로짓이 가장 많이 깎이는지 말하시오. (나) 학습이 진행되어 πθ(답)\textcolor{#1565c0}{\pi_\theta}(\text{답}) 이 0.9, 0.99 가 되었을 때 정답 토큰의 그래디언트는? 이 손실은 언제 멈추는가? (다) 목표를 원-핫 대신, 새 형식 90%에 원래 모델의 분포 10%를 섞은 분포 pT=0.9⋅(0,0,1)+0.1⋅(0.6, 0.3, 0.1)\textcolor{#2e7d32}{p_T} = 0.9\cdot(0, 0, 1) + 0.1\cdot(0.6,\ 0.3,\ 0.1) 로 바꾸면 세 토큰은 어디서 멈추는가? 「좋은」은 얼마나 남는가?

김민준 (자신만만)
김민준
손실이 −log⁡πθ(답)-\log\textcolor{#1565c0}{\pi_\theta}(\text{답}) 하나뿐이잖아요. 「답」만 올라가고 「좋은」이랑 「감기」는 손실에 안 나오니까 그대로예요.
선생님 (질문)
선생님
민준 학생, 소프트맥스에서 「답」의 확률을 올리면 세 확률의 합은 몇이어야 하죠?
김민준 (난처함)
김민준
여전히 1이죠… 그럼 누군가는 내려가야 해요. 식으로 보면 πθ(v)−1[v=y]\textcolor{#1565c0}{\pi_\theta}(v) - \mathbb{1}[v=\textcolor{#1c9c60}{y}] 니까 「좋은」 +0.6, 「감기」 +0.3, 「답」 −0.9. 경사하강은 반대로 가니까 「좋은」이 가장 많이 깎여요.
이서연 (평상)
이서연
가장 확신하던 옛 답이 제일 세게 눌리는 거네. 그래도 (나)는 괜찮을 것 같아. 「답」이 0.99 쯤 되면 충분히 배운 거니까 그래디언트가 0이 되고 멈추겠지.
선생님 (질문)
선생님
서연 학생, 0.99 에서 πθ(답)−1\textcolor{#1565c0}{\pi_\theta}(\text{답}) - 1 은 얼마예요?
이서연 (생각)
이서연
−0.01. 0.9 에서는 −0.1. 작아지긴 하는데 0은 아니에요. 확률이 정확히 1이 되기 전엔 0이 안 되고, 소프트맥스로는 1에 닿을 수도 없어요.
이서연 (아하)
이서연
멈추는 곳이 없어요. 계속 미는 동안 「좋은」, 「감기」를 누르는 항도 계속 살아 있고요. (다)는 pT=(0.06, 0.03, 0.91)\textcolor{#2e7d32}{p_T} = (0.06,\ 0.03,\ 0.91) 이고 그래디언트가 πθ(v)−pT(v)\textcolor{#1565c0}{\pi_\theta}(v) - \textcolor{#2e7d32}{p_T}(v) 라서, 모델이 이 분포에 닿으면 세 토큰 모두 정확히 0이 돼요. 「좋은」은 0으로 가지 않고 0.06 이 남아요.
선생님 (평상)
선생님
그래요. 민준 학생은 손실에 안 보이는 토큰은 안 움직인다고 봤고, 서연 학생은 작아지는 것과 멈추는 것을 같은 것으로 봤어요.
이서연 (평상)
이서연
급수 수업에서 항이 0으로 간다고 합이 수렴하는 건 아니라고 배운 거랑 같아요. 한 걸음이 작아져도 걸음이 끝나지 않으면 계속 멀어져요.
김민준 (평상)
김민준
아까 공부 시간표 문제랑 같네요. 합이 10시간으로 묶여 있으니 제일 많이 하던 영어가 제일 많이 깎였고, "계속 늘린다"는 목표에는 멈출 곳이 없었고요.

정리 (가) 「좋은」 +0.6, 「감기」 +0.3, 「답」 −0.9. 정답이 아닌 토큰은 자기 확률만큼 로짓이 깎이므로 가장 믿던 「좋은」이 가장 세게 눌린다. (나) −0.1, −0.01. 확률이 1이 되기 전에는 0이 아니므로 크로스 엔트로피에는 멈출 곳이 없다. (다) 분포 목표면 그래디언트가 πθ(v)−pT(v)\textcolor{#1565c0}{\pi_\theta}(v) - \textcolor{#2e7d32}{p_T}(v) 라 (0.06, 0.03, 0.91)(0.06,\ 0.03,\ 0.91) 에서 멈추고, 「좋은」은 0.06 이 남는다.