17. RL이 작동하는 조건 — 스펙트럼, 적정 난이도, 그리고 한계

목표 분포의 엔트로피: 이름 짓기와 산수는 다르게 배운다

앞 절에서 넓히는 학습과 고르는 학습을 나눴다. 실제로 모델 하나를 만들 때는 소설 쓰기 데이터와 수학 풀이 데이터가 같은 파이프라인에 함께 들어가고, 데이터마다 SFT로 따라 쓰게 할지 RL로 고르게 할지를 정해야 한다. 그렇다면 어떤 데이터는 넓히는 쪽으로, 어떤 데이터는 고르는 쪽으로 가르쳐야 하지 않을까? 두 데이터셋을 떠올려 보자. 하나는 소설 속 인물을 소개하는 문장들이다 — “그녀의 이름은 엘라라였다”, “그녀의 이름은 김삼순이었다”, “그의 이름은 조엘이었다”. 다른 하나는 산수 문장들이다 — “1+1=2”, “sin 30° = 1/2”. 둘 다 다음 토큰 예측이고 손실도 같은 크로스 엔트로피다. 그런데 “그녀의 이름은 ___” 다음과 “1+1=” 다음은 모양이 정반대다.

역사: 섀넌의 다음 글자 맞히기

다음에 올 글자가 얼마나 불확실한가를 사람의 예측으로 잰 사람이 클로드 섀넌(Claude Shannon)이다. 1951년 논문 「Prediction and Entropy of Printed English」에서 그는 사람에게 처음 보는 글을 앞에서부터 보여 주며 다음 글자를 맞히게 했다. 틀리면 다시 맞히게 하고, 맞힐 때까지 몇 번 걸렸는지를 글자마다 적었다. 공백까지 한 글자로 친 102글자짜리 예에서 79글자는 첫 번에 맞혔고, 다섯 번이 넘게 걸린 글자는 여덟뿐이었다. 이런 횟수를 모아, 앞 문맥이 100글자쯤 주어진 영어 글자 하나의 불확실성이 약 0.6~1.3비트라고 어림했다. 알파벳 26자를 고르게 고른다면 4.7비트이니, 문맥이 불확실성의 대부분을 없앤다는 뜻이다.

글자마다 맞히기까지 걸린 횟수 (섀넌 1951) 1 T 1 H 1 E 5 R 1 E 1 ␣ 2 I 1 S 1 ␣ 2 N 1 O 1 ␣ 15 R 1 E 17 V 1 E 1 R 1 S 2 E ␣ = 공백 (원 논문 예의 앞 19글자)

중요한 것은 이 값이 자리마다 다르다는 점이다. 위 그림에서 횟수가 튀는 곳은 REVERSE의 R과 V처럼 단어가 시작되는 자리다. 섀넌도 틀린 추측이 단어와 음절의 첫머리, 생각의 줄기가 갈라질 수 있는 곳에 몰린다고 적었다. 단어 중간은 거의 정해져 있다.

두 데이터셋의 목표 분포

한 자리에서 다음 토큰의 불확실성을 엔트로피(entropy)로 잰다. 다음 토큰을 얼마나 고르게 나눠 고르는가를 재는 값으로, 한 토큰만 고르면 0이고 nn개를 똑같이 고르면 ln⁡n\ln n 이다.

“1+1=” 다음의 목표 분포는 “2” 하나에 확률 1이다. 엔트로피 0. 반면 “그녀의 이름은” 다음에는 옳은 답이 수천 개다. 장난감으로 흔한 이름 20개가 합쳐서 0.45, 드문 이름 2000개가 합쳐서 0.55를 나눠 갖는다고 하자(드문 이름 하나는 0.000275). 이 분포의 엔트로피는 약 6.2 nats(자연로그로 잰 단위)다. 엔트로피가 높은 자리의 손실에는 바닥이 있다.

LCE=Ey∼pdata[−log⁡πθ(y∣s)]=H(pdata)+KL(pdata ∥ πθ)  ≥  H(pdata)\textcolor{#d62728}{\mathcal{L}_\text{CE}} = \mathbb{E}_{\textcolor{#1c9c60}{y} \sim \textcolor{#2e7d32}{p_\text{data}}}\big[-\log \textcolor{#1565c0}{\pi_\theta}(\textcolor{#1c9c60}{y} \mid \textcolor{#0093b8}{s})\big] = \textcolor{#8c564b}{H}(\textcolor{#2e7d32}{p_\text{data}}) + \textcolor{#8c564b}{\mathrm{KL}}(\textcolor{#2e7d32}{p_\text{data}} \,\|\, \textcolor{#1565c0}{\pi_\theta}) \;\ge\; \textcolor{#8c564b}{H}(\textcolor{#2e7d32}{p_\text{data}})
LCE한 자리의 크로스 엔트로피 손실s상태: 프롬프트 + 지금까지 쓴 토큰 (예: 「그녀의 이름은」)y그 자리의 다음 토큰pdata목표 분포: 데이터에서 그 자리 다음에 오는 토큰의 분포πθ학습 중인 모델H목표 분포의 엔트로피 — 모델과 무관한 바닥KL순방향 KL: 데이터가 말한 토큰을 모델이 못 알아들은 정도 \small\begin{array}{ll} \textcolor{#d62728}{\mathcal{L}_\text{CE}} & \text{한 자리의 크로스 엔트로피 손실} \\ \textcolor{#0093b8}{s} & \text{상태: 프롬프트 + 지금까지 쓴 토큰 (예: 「그녀의 이름은」)} \\ \textcolor{#1c9c60}{y} & \text{그 자리의 다음 토큰} \\ \textcolor{#2e7d32}{p_\text{data}} & \text{목표 분포: 데이터에서 그 자리 다음에 오는 토큰의 분포} \\ \textcolor{#1565c0}{\pi_\theta} & \text{학습 중인 모델} \\ \textcolor{#8c564b}{H} & \text{목표 분포의 엔트로피 — 모델과 무관한 바닥} \\ \textcolor{#8c564b}{\mathrm{KL}} & \text{순방향 KL: 데이터가 말한 토큰을 모델이 못 알아들은 정도} \end{array}

KL은 0 아래로 내려가지 않으므로, 모델이 목표를 완벽히 따라 해도 이름 자리의 손실은 6.2에서 멈춘다. 그래서 창작 데이터에서 검증 손실이 바닥을 치고 평평해지는 것은 정상이다. 계속 내려간다면 문맥에서 이름을 맞히는 단서를 외우고 있거나(암기), 이름 분포를 좁히고 있다는(다양성 붕괴) 뜻이다. 산수 데이터에서는 바닥이 0이라 손실이 내려갈수록 좋다.

두 방향의 KL을 이 장에서도 한 줄씩 다시 적자. 순방향 KL(forward) KL(pdata ∥ πθ)\textcolor{#8c564b}{\mathrm{KL}}(\textcolor{#2e7d32}{p_\text{data}} \,\|\, \textcolor{#1565c0}{\pi_\theta}) 은 데이터가 한 말을 모델이 못 알아들으면 벌점을 주고, 그래서 모든 봉우리를 덮는다. SFT가 이것이다. 역방향 KL(reverse) KL(πθ ∥ pdata)\textcolor{#8c564b}{\mathrm{KL}}(\textcolor{#1565c0}{\pi_\theta} \,\|\, \textcolor{#2e7d32}{p_\text{data}}) 은 모델이 목표가 안 하는 말을 하면 벌점을 주고, 그래서 봉우리 하나를 고른다. 모델이 스스로 뽑은 답을 채점받는 RL, 그리고 학생 모델이 스스로 쓴 문장을 교사 모델이 토큰마다 채점하는 증류가 이쪽이다.

이름 자리 — 덮어야 한다. 이름의 봉우리들 사이에는 "중간값"이 없다. "엘라라"와 "김삼순"을 반씩 섞은 이름이 나올 일은 없고, 어느 이름을 뽑아도 다음은 "였다"로 끝난다. 봉우리가 한 토큰 안에서 시작하고 끝나니 넓게 덮어도 해가 없다. 오히려 드문 이름의 꼬리가 창작 데이터의 상품이다. 역방향은 그 꼬리를 싸게 버린다(아래 문제 3). 그래서 이 자리는 순방향이 맞다.

산수 — 골라야 한다. 답 토큰 "2"의 목표는 봉우리 하나라서, 덮든 고르든 같은 곳으로 간다. 방향이 문제 되는 곳은 답이 아니라 풀이 경로다. "sin 30°"를 푸는 길은 여럿이다 — 30°-60°-90° 직각삼각형의 변의 비, 단위원 위의 y좌표, 외운 값. 첫 토큰에서 목표는 봉우리가 여럿인 분포다. 그런데 이 봉우리들은 한 토큰에서 끝나지 않는다. 단위원으로 시작했으면 수십 토큰 뒤까지 단위원 이야기를 해야 한다. 모델이 두 경로를 넓게 덮으면 중간에 다른 경로의 토큰이 새어 나오고, 옳은 풀이 둘을 섞으면 틀린 풀이가 된다. 여기서 봉우리 사이의 골짜기는 오답 지대다. 모델이 끝까지 해낼 수 있는 경로 하나를 골라 강화하는 역방향이 맞다.

토큰마다 목표 분포의 엔트로피 (개념도, 단위 nats) 창작 데이터 — 인물 소개 0.8 0.4 6.2 0.1 그녀의 이름은 엘라라 였다 높은 엔트로피가 이름 한 자리에 몰려 있고, 그 자리에서 끝난다 산수 데이터 — 풀이 과정 1.4 0.2 0.15 0.02 단위원에서 30°의 y좌표는 1/2이다 높은 엔트로피가 경로를 고르는 첫 토큰에 있고, 이후 토큰들을 묶는다

위 그림에서 막대 높이가 그 자리 목표 분포의 엔트로피다. 이름 자리의 6.2는 앞의 장난감 분포 값이고, "단위원에서"의 1.4는 풀이 경로 네 개를 똑같이 고를 때의 ln⁡4≈1.39\ln 4 \approx 1.39 다. 나머지는 거의 정해진 자리다. 두 데이터셋의 차이는 엔트로피의 크기보다 자리와 그 뒤에 무엇이 묶이는가에 있다.

창작 데이터 (이름) 산수 데이터
목표 분포 봉우리가 많고 엔트로피가 높다 (~6 nats) 답은 봉우리 하나 (0 nats)
봉우리가 여럿인 곳 한 토큰 안 — 거기서 끝난다 풀이 경로 — 수십 토큰을 묶는다
봉우리 사이의 중간값 없다 (해가 없다) 오답
지켜야 할 것 분포 그 자체, 특히 꼬리 가장 확실한 답 하나
손실의 바닥 H(pdata)\textcolor{#8c564b}{H}(\textcolor{#2e7d32}{p_\text{data}}) — 0으로 못 간다 0
맞는 방향 순방향 (SFT) 역방향 (RL, 교사가 채점하는 증류)
반대로 하면 모두 같은 이름을 짓는다 풀이가 섞이고 틀린다
ML에서: 산수 안에도 갈림길이 있다

"산수는 전부 엔트로피가 낮다"는 말은 틀렸다. 위 그림의 "단위원에서"처럼 산수 풀이 안에도 경로를 가르는 자리, 곧 분기 토큰(forking token)이 있다. 추론 과정의 토큰 엔트로피를 재 보면 이런 자리는 소수(약 20%)이고, RLVR(정답을 자동으로 검증할 수 있는 보상으로 하는 RL)의 정책 그래디언트를 이 토큰들에만 주어도 전체 토큰에 줄 때만큼, 큰 모델에서는 그보다 잘 배웠다(Wang et al., 「Beyond the 80/20 Rule」, arXiv:2506.01939, 2025년 6월). 한 풀이 안에 엔트로피를 죽여도 되는 자리(계산)와 살려 두어야 할 자리(분기 토큰)가 섞여 있는 것이다. 무엇을 넓히고 무엇을 고를지의 단위는 데이터셋보다 작다.

문제 3 — 꼬리를 버리는 값

“그녀의 이름은” 다음의 목표 분포가 위 장난감이라고 하자. 흔한 이름 20개가 각 0.0225(합 0.45), 드문 이름 2000개가 각 0.000275(합 0.55). 모델 후보 둘을 본다. qhead\textcolor{#1565c0}{q_\text{head}} 는 흔한 이름 20개만 남겨 합이 1이 되게 키우고(각 0.0225/0.45 = 0.05), 드문 이름에는 각 10−810^{-8} 만 남긴다. qδ\textcolor{#1565c0}{q_\delta}(δ는 한 점에 몰린 분포에 흔히 붙이는 글자다)는 흔한 이름 하나에 확률 1을 몰아 준다. (가) 두 후보의 역방향 KL KL(q ∥ pdata)\textcolor{#8c564b}{\mathrm{KL}}(\textcolor{#1565c0}{q} \,\|\, \textcolor{#2e7d32}{p_\text{data}}) 를 구하시오. (나) qhead\textcolor{#1565c0}{q_\text{head}} 의 순방향 KL을 구하시오. (다) 창작 모델을 역방향 쪽 목적함수로 다듬으면 이름이 어떻게 되겠는가?

선생님 (질문)
선생님
민준 학생, 드문 이름 2000개를 다 버리는 q_head, 역방향으로는 벌점이 얼마던가요?
김민준 (평상)
김민준
코드로 돌렸어요. 0.80이요. q_δ는 log(1/0.0225) ≈ 3.79고요. 0.8이면 작으니까, 역방향으로 학습해도 꼬리는 거의 안 잃겠네요.
선생님 (질문)
선생님
그 0.8은 무엇을 버린 값이죠? 버린 꼬리는 확률로 얼마였어요?
김민준 (난처함)
김민준
0.55요. 확률의 절반 넘게 버렸는데 벌점은 0.8, 이름 하나로 몰아도 3.79… 거꾸로네요. 벌점이 작다는 건 꼬리를 싸게 버릴 수 있다는 뜻이에요. 역방향은 모델이 말한 흔한 이름만 채점하니까, 안 말한 드문 이름은 묻지를 않아요.
이서연 (평상)
이서연
순방향은 반대지. 0.55·log(0.000275/10⁻⁸)에 머리 쪽 0.45·log 0.45를 더하면 5.26.
이서연 (호기심)
이서연
그런데 이 값은 내가 정한 10⁻⁸에 달려 있어. 10⁻¹²로 줄이면 10.3이 되고, 0으로 보내면 한없이 커져. 순방향은 꼬리를 완전히 버리는 순간 파산하고, 역방향은 그 극한에서도 0.80 그대로야.
선생님 (흐뭇함)
선생님
그래요. 한쪽은 꼬리를 버리는 순간 파산하고, 한쪽은 꼬리를 헐값에 팔아요. (다)는요?
김민준 (평상)
김민준
역방향 쪽으로 다듬으면 흔한 이름으로 몰리겠네요. 소설마다 같은 이름이 나오고요. 조별 과제 발표에서 다들 무난한 주제 몇 개만 고르는 거랑 비슷해요. 특이한 주제는 틀릴 위험만 있고 가산점은 없으니까요.
이서연 (평상)
이서연
이상적분에서 적분 구간 끝을 0으로 보낼 때 로그가 발산하느냐를 따지던 거예요. 순방향 KL은 그 극한을 피할 수 없는 쪽에 있어요.

정리 (가) qhead\textcolor{#1565c0}{q_\text{head}}: log⁡(1/0.45)≈0.80\log(1/0.45) \approx 0.80, qδ\textcolor{#1565c0}{q_\delta}: log⁡(1/0.0225)≈3.79\log(1/0.0225) \approx 3.79. (나) 순방향 0.45log⁡0.45+0.55log⁡(0.000275/10−8)≈5.260.45\log 0.45 + 0.55\log(0.000275/10^{-8}) \approx 5.26 — 남긴 값이 10−1210^{-12} 이면 10.3, 0이면 한없이 커진다. 확률 0.55의 꼬리를 버리는 값이 역방향으로는 0.80뿐이다. (다) 역방향 쪽으로 다듬은 창작 모델은 흔한 이름으로 몰려 다양성을 잃는다. 이름 자리의 상품인 꼬리를 지키려면 순방향(SFT)으로 가르친다.

문제 4 — (킬러) 데이터셋으로 나눌까, 토큰으로 나눌까

작은 학생 모델을 학습시키는 코퍼스에 풀이가 정해진 데이터(수학 풀이 MATH, 여러 과제를 지시문과 답의 꼴로 모은 FLAN)와 지식 글(웹 문서, 위키백과)이 섞여 있다. 더 큰 교사 모델의 확률표를 쓸 수 있다. 세 가지 나눔을 비교한다. 모두 "교사 증류로 보낸 토큰은 역방향 KL로 교사를 따라 하고, 나머지 토큰은 그냥 크로스 엔트로피"다. ① 도메인 나눔: MATH·FLAN의 토큰은 증류, 웹·위키 글의 토큰은 크로스 엔트로피. ② 무작위 나눔: 토큰 20%를 무작위로 골라 증류. ③ 엔트로피 나눔: 배치 안에서 교사의 예측 엔트로피가 가장 낮은 20% 토큰을 증류. (가) 추론 점수가 가장 높을 나눔과 가장 낮을 나눔을 예측하시오. (나) 그 이유는? (다) 증류로 보낸 토큰에 역방향 KL을 쓰는 이유는?

김민준 (자신만만)
김민준
① 도메인 나눔이 제일 좋죠. 데이터가 어디서 왔는지는 정답이 붙은 정보잖아요. 이 절 표대로 산수는 고르고 나머지는 덮으면 되고요. 제일 나쁜 건 ② 무작위고요.
이서연 (평상)
이서연
나는 ③이 제일 나쁠 것 같아. ③은 교사가 스스로 매긴 엔트로피인데, 교사가 틀린 자리에서 확신하면 오히려 잘못 보내는 거잖아.
선생님 (질문)
선생님
민준 학생, 수학 데이터 안의 토큰은 전부 교사가 확신하는 자리인가요? "단위원에서"는요?
김민준 (생각)
김민준
아니요, 경로를 고르는 자리는 수학 안에서도 엔트로피가 높았어요. ①은 그 자리까지 역방향으로 조여 버리겠네요. 웹 문서 안에도 교사가 확신하는 자리가 있을 텐데 그건 증류를 못 받고요.
이서연 (깨달음)
이서연
도메인 이름표는 토큰마다 달라지는 확신을 통째로 뭉개는 거네요. 같은 수학 문장 안에서도 계산 토큰과 갈림길 토큰이 다른데, 이름표는 둘을 같은 칸에 넣어요.
선생님 (질문)
선생님
서연 학생이 걱정한 "교사가 틀린 자리에서 확신하는 경우"는 어때요?
이서연 (평상)
이서연
확신하면서 틀리는 자리보다는, 확신 없이 얼버무리는 자리에서 교사를 따라 하는 게 더 위험해 보여요. 확신 없는 교사를 따라 하면 학생도 그 확률에서 멈추니까요. ③은 그런 자리를 크로스 엔트로피로 돌려서 데이터의 정답을 끝까지 밀게 하고요.
선생님 (평상)
선생님
실제로 이 비교를 한 연구가 있어요. 교사의 엔트로피 하위 20% 토큰만 역방향 KL로 증류하고 나머지는 크로스 엔트로피로 둔 방법이 가장 좋았고, 도메인 나눔은 무작위 나눔보다도 조금 나빴어요.
김민준 (평상)
김민준
조교 배정 같네요. 과목별로 조교를 배정하는 것보다, 문항마다 자신 있는 조교가 채점하는 게 낫다는 거요.
이서연 (평상)
이서연
조건부 기댓값에서, 더 잘게 나눈 정보로 조건을 걸수록 예측이 나빠지지 않는 것과 같아요. 도메인은 거친 칸, 토큰의 엔트로피는 훨씬 잘게 나눈 칸이에요.
선생님 (흐뭇함)
선생님
그럼 (다)는요?
김민준 (평상)
김민준
증류로 보낸 토큰은 교사 분포가 뾰족한 자리니까, 봉우리 하나를 고르는 역방향이 그 봉우리를 그대로 강화해요. 덮어야 할 꼬리가 거기엔 없고요.

정리 (가) 가장 높은 것은 ③ 엔트로피 나눔, 가장 낮은 것은 ① 도메인 나눔이다. 「Knowledge Distillation During Mid-Training Favors Reasoning over Factual Recall」(He et al., arXiv:2609.01532, 2026년 9월)가 프리트레인과 미세조정 사이의 중간 학습 단계에서 제안한 Switch Distillation이 ③이다. 학생은 OLMo-2 1B, 교사는 OLMo-2 7B Instruct로 추론 점수 44.7을 냈고, 같은 설정에서 무작위 나눔은 6.5점, MATH·FLAN 토큰만 증류로 보낸 도메인 나눔은 7.2점 낮았다. (나) 교사가 확신하는 정도는 도메인 안에서도 토큰마다 다르다. 도메인 이름표는 그 차이를 버리고, 교사가 얼버무리는 자리까지 교사를 따라 하게 만든다. 교사를 따라 하는 목표는 교사가 준 확률에서 멈추므로, 그런 자리는 데이터의 정답을 끝까지 미는 크로스 엔트로피가 낫다. (다) 교사가 확신하는 자리는 봉우리가 하나라서 덮을 꼬리가 없다. 역방향 KL이 그 봉우리를 그대로 강화한다(같은 연구에서 순방향 KL로 바꾸면 추론 점수가 2.9점 낮았다).