“한 번에 맞히는 비율(pass@1)은 올라가는데, 아주 많이 뽑아 보면 오히려 베이스 모델이 더 많은 문제를 푼다. 하나의 답을 잘 내는 모델이 왜 여러 번 시도할 기회를 주면 베이스보다 못하게 되는가?”
비유
라디오의 수신 폭을 너무 좁혀 하나의 주파수에 완벽하게 맞췄다고 하면, 수신 품질은 최고지만 다른 채널이 잡히던 자리가 조용해진다. 전에는 스캔을 오래 돌리면 가끔 잡히던 먼 방송이 이제는 아무리 돌려도 안 잡힌다.
원인: 정책 그래디언트의 엔트로피 동역학
Cui 외(2025)는 추론 언어 모델의 강화학습에서 이 현상을 정리했다. 정책 엔트로피는 훈련 초반에 급격히 떨어지고, 그 뒤의 성능은 떨어진 엔트로피로 거의 결정된다(경험식 R = −a·eH + b. R 은 검증 문제에서 잰 성능(수학·코드 문제의 정답률), H 는 정책 엔트로피, a·b 는 실험마다 맞춘 상수다. 엔트로피가 0 까지 떨어지면 성능은 −a + b 에서 멈춘다). 엔트로피가 왜 떨어지는지도 식으로 보였다. 정책 그래디언트는 보상의 기댓값이 커지는 방향으로 정책의 파라미터를 그래디언트를 따라 옮기는 방법이고, 자연 정책 그래디언트는 정책 그래디언트의 한 스텝을 피셔 정보로 보정해 출력 분포가 달라지는 정도로 스텝 크기를 재는 방법이다. 답마다 로짓 하나를 두는 소프트맥스 정책을 자연 정책 그래디언트로 한 스텝 옮기면
ΔH(π)≈−lr⋅Covy∼π(logπ(y),A(y))
HπylrA정책의엔트로피정책정책에서뽑은답변학습률어드밴티지 (평균보다얼마나좋은답인가)
이미 확률이 높은 답이 보상도 높으면 공분산이 양수이고, 엔트로피가 준다. 숫자로 보면, 답 셋에 π = (0.6, 0.3, 0.1) 을 주는 정책에서 가장 흔한 답 0 만 정답(보상 1)이면, 평균 보상이 0.6 이라 어드밴티지는 A = (0.4, −0.6, −0.6) 이고 공분산은 0.232 로 양수다. 이런 정책에서 자연 정책 그래디언트 한 스텝은 로짓을 lr·A 만큼 옮기므로, lr = 0.1 로 한 스텝 가면 엔트로피는 0.898 에서 0.874 로 준다. 엔트로피 변화 식으로 낸 근삿값(−0.1 × 0.232 = −0.023)과 실제 변화(−0.024)가 거의 같다. 모델이 잘하는 답을 더 자주 내므로 강화학습에서는 대개 공분산이 양수다. 주목할 점은 이 논문의 실험이 KL 계수를 0으로 두었다는 것, 다시 말해 KL 벌칙이 없어도 엔트로피는 무너진다는 것이다. 그러니 "reverse KL(모델 쪽에 무게를 둔 KL(π‖πref))이 봉우리를 눌러서"는 원인 설명으로 맞지 않다. KL(π‖πref) 는 오히려 π 를 넓은 참조 쪽으로 붙잡아 두는 항이고, 엔트로피를 무너뜨리는 원인은 보상 항에 있다.
기울이기 절의 닫힌꼴 π* ∝ πref·er/β 로도 같은 것이 보인다. β를 줄일수록 π* 는 e-측지선을 따라 참조에서 멀어지고, 엔트로피는 정답 집합의 조건부 엔트로피까지 내려간다. KL 항을 빼는 것은 β = 0, 그 끝으로 곧장 가는 것이다.
코드 모델을 어떻게 채점할까
pass@k 라는 지표는 코드를 짜는 언어 모델을 채점하려던 고민에서 나왔다. 기계 번역처럼 정답 코드와 글자가 얼마나 겹치는지(BLEU 점수)로 재면, 글자는 달라도 똑같이 동작하는 코드를 틀렸다고 보게 된다. 같은 일을 하는 프로그램은 셀 수 없이 많기 때문이다. 그래서 코드 생성 연구들은 코드가 미리 써 둔 시험(단위 테스트)을 통과하는지로 채점하기 시작했다. 사람 개발자가 코드를 받아들이는 방식도 그렇다. 쿨랄(Kulal) 외(2019)는 문제마다 코드를 k 개 뽑아 하나라도 테스트를 통과하면 그 문제를 푼 것으로 쳤고, 이것이 pass@k 다. 「k 번 안에 통과(pass at k)」라고 읽는 한 덩어리 이름이다. 깃허브 코드로 학습한 Codex 를 내놓은 첸(Chen) 외(2021)는 문제 164개를 손으로 새로 써서 같은 방식으로 쟀다. 그런데 문제마다 꼭 k 개만 뽑아 세면 결과가 크게 흔들려서, 200개를 뽑아 그 가운데 통과한 개수로 pass@k 를 셈하는 식을 따로 마련했다. 아래 pass@k 식의 두 번째 줄이 200개 샘플로 셈하는 식이다.
pass@k: 무엇을 재는가
문제 하나에서 모델의 정답 확률이 s 라고 하자. k번 독립으로 뽑아 하나라도 맞으면 성공이다.
같은 모델에서 pass@k 는 k가 커질수록 줄어들 수 없고 늘 pass@1 이상이므로, "한 모델의 pass@1 곡선과 pass@k 곡선이 교차한다"는 일은 일어나지 않는다. 교차하는 것은 두 모델의 pass@k 곡선이다.
Yue 외(2025)의 관찰이 그것이다. “RLVR로 학습한 모델은 작은 k(예: k = 1)에서 베이스 모델을 이기지만, k가 클 때는 베이스 모델이 더 높은 pass@k 를 얻는다.” 강화학습이 베이스가 가끔 풀던 문제의 정답 확률을 0 가까이 눌러 버렸기 때문이다. 기울이기 절의 조건부화 그림과 같다(이진 보상에서 β → 0 이면 π* 는 참조를 정답 집합으로 조건부화한 분포가 된다). 참조에 없던 정답은 생기지 않고, 참조에 드물던 정답은 더 드물어질 수 있다.
두 가지를 구분해 두자. pass@k 는 "k번 기회를 주면 풀 수 있는 문제의 비율"이어서, 답변의 다양성 자체를 재는 지표가 아니다. 다양성이 줄면 큰 k의 pass@k 가 떨어지기 쉽다는 관계가 있을 뿐이다. 그리고 pass@k 가 떨어지는 이 일은 catastrophic forgetting(새 태스크를 배우며 옛 태스크 성능을 잃는 것)과도 달라서, 같은 태스크 안에서 드문 정답이 더 드물어지는 일이다.
직접 움직여 보기
불러오는 중…
Best-of-N과의 연결
Best-of-N 샘플링은 “N번 생성해서 가장 좋은 것을 고른다.” N번 생성 = OR (다양한 가능성을 열어둠). 가장 좋은 것을 선택 = AND (조건을 충족하는 것만). 정답 검사기가 있으면 Best-of-N의 성공률이 곧 pass@N 이다. 그래서 강화학습 뒤에 Best-of-N을 붙이려면, 강화학습이 드문 정답을 지우지 않았는지가 중요해진다.
파이썬
import numpy as np
from math import comb
# 불편추정량 1 − C(n−c,k)/C(n,k) 와 순진한 추정량 1 − (1 − c/n)^k 비교
n, k, s = 16, 4, 0.2
rng = np.random.default_rng(0)
c = rng.binomial(n, s, size=20000)
unbiased = np.mean([1 - comb(n - ci, k) / comb(n, k) for ci in c])
naive = np.mean(1 - (1 - c / n)**k)
print(f"참값 {1 - (1 - s)**k:.4f} 불편추정량 {unbiased:.4f} 순진한 추정량 {naive:.4f}")
# 참값 0.5904 불편추정량 0.5924 순진한 추정량 0.5548
# 두 모델의 pass@k: 베이스와, 정답 확률의 로짓을 0.1 기준으로 두 배 벌린 "RL 모델"
lg = lambda x: np.log(x) - np.log1p(-x)
from scipy.stats import beta as Beta
s_base = Beta.ppf((np.arange(50) + 0.5) / 50, 0.4, 1.2) # 문제 50개의 정답 확률
s_rl = 1 / (1 + np.exp(-(2 * (lg(s_base) - lg(0.1)) + lg(0.1))))
for kk in [1, 4, 8, 16, 64, 256]:
print(f"k={kk:<3} 베이스 {np.mean(1 - (1 - s_base)**kk):.3f} RL {np.mean(1 - (1 - s_rl)**kk):.3f}")
# k=1 베이스 0.250 RL 0.381
# k=4 베이스 0.485 RL 0.529
# k=8 베이스 0.594 RL 0.587
# k=16 베이스 0.686 RL 0.638
# k=64 베이스 0.817 RL 0.722
# k=256 베이스 0.894 RL 0.788
순진한 추정량은 참값보다 작게 나오는데, 왜 그런지는 아래 문제에서 따진다. 장난감 RL 모델은 k = 1 에서 베이스를 크게 앞서지만, k = 8 근처에서 역전된다.
호기심 상자: 병합, OR의 질이 AND의 가능성을 결정한다
“왜 어떤 파인튜닝은 병합이 잘 되고 어떤 파인튜닝은 병합이 안 되는가?”
강화학습은 베이스가 이미 가진 정답을 추려낼 뿐이었는데, 그렇다면 프리트레인(OR)이 깔아 둔 풍경의 질은 다른 좁히기에도 영향을 줄까? 모델 병합이 좋은 시험대인데, 두 모델의 가중치 "중간"을 취하면 두 능력이 합쳐지는 경우가 있고 갑자기 무너지는 경우가 있다. "잘 되는 병합"과 "안 되는 병합"의 차이는 어디에 있는가?
보고된 발견
Rahamim 외(2026)는 LoRA(가중치 변화를 작은 행렬 둘의 곱으로 제한하는 파인튜닝) 업데이트들을 대상으로 한 실험에서 "베이스 모델이 태스크나 파인튜닝 데이터를 더 잘 알수록 병합 가능성이 높다"고 보고했다. 그리고 병합 가능성은 무엇과 함께 병합하느냐보다 LoRA 업데이트 자체의 성질에 주로 달려 있다고 했다. Yadav 외(2024)도 따로 학습시키지 않고 바로 시킨 성능(제로샷 성능)이 좋은 강한 베이스 모델에서 만든 전문가 모델일수록 병합이 잘 된다고 보고했다. 다만 병합 가능성이 병합 방법과 함께 묶는 태스크에 따라 달라진다는 반론 연구도 나왔으니, 아직 정리된 법칙이라기보다 경향이다.
교재의 도구로 읽기
프리트레인(OR)이 해당 영역의 봉우리를 이미 품고 있으면, 파인튜닝은 그 봉우리 근처에서 좁히는 것이다. 파라미터 변화가 작고, 출력 분포의 변화도 작다. 피셔 계량(파라미터를 바꿀 때 출력 분포가 얼마나 달라지는지로 거리를 재는 규칙)으로 재면 “가까운” 거리.
가중치끼리 평균하는 것은 파라미터 공간의 직선 보간이다. 가중치 직선 보간을 m-측지선(분포의 혼합)과 헷갈리지 말자. 가중치끼리의 평균이 만드는 분포는 두 분포의 혼합이 아니다. 신경망의 가중치는 θ 좌표도 η 좌표도 아니어서, 가중치 직선은 e-측지선도 m-측지선도 아니다.
두 파인튜닝이 모두 베이스 근처에 있으면, 어느 직선을 따라가든 분포 공간에서 크게 벗어나지 않는다. 짧은 구간에서는 곡선과 직선의 차이가 작기 때문이다. 반대로 베이스 모델이 모르는 태스크는 파라미터를 멀리 끌고 가야 하고, 먼 두 점을 잇는 가중치 직선의 중간은 분포 공간에서 엉뚱한 분포에 닿을 수 있다.
피셔로 가중한 병합
피셔 계량을 병합에 직접 쓰는 방법으로 Matena와 Raffel(2022)의 피셔 가중 평균이 있는데, 각 모델의 가중치를 그 모델의 (대각) 피셔 정보에 비례한 비중으로 평균한다.
w⋆=(i∑Ii)−1i∑Iiwi
wiIiw⋆i번째모델의가중치i번째모델의피셔정보 (대각근사)병합한가중치
어떤 가중치가 모델 A의 출력 분포에 민감하면(피셔가 크면) 병합에서 A의 값을 더 따른다. 각 모델의 사후분포를 피셔 정보를 정밀도(분산의 역수)로 쓰는 정규분포로 근사하고, 그 곱을 최대화한 결과라는 해석이 붙는다. 정규분포끼리 곱하니 여기서도 확률을 곱한다.
이 절의 결론
“엔트로피 붕괴의 원인은 보상을 올리는 정책 그래디언트이고, KL 없이도 일어난다. pass@k 는 k가 커질수록 줄지 않으므로, 교차하는 것은 두 모델의 곡선이다. 강화학습은 참조가 가진 정답을 추려낼 뿐, 드문 정답은 오히려 잃을 수 있다.”
“프리트레인의 OR이 깔아놓은 풍경의 질이 이후 AND의 가능성에 영향을 준다. 베이스가 이미 아는 곳의 파인튜닝은 파라미터를 조금만 옮기는 일이라 병합이 쉽다는 보고가 있다. 가중치끼리의 평균은 m-측지선이 아니지만, 피셔 정보로 가중하면 분포 공간의 피셔 계량을 병합에 들일 수 있다.”
문제 10. 슛 테스트의 기회 횟수
농구 동아리 입단 시험에서는 두 자리에서 슛을 던지는데, 자리마다 k 번 던져 한 번이라도 넣으면 그 자리는 통과다. 지원자 A 는 자유투 자리에서 90%, 하프라인에서 1% 를 넣고, 지원자 B 는 자유투 자리에서 60%, 하프라인에서 15% 를 넣는다. (가) k = 1 일 때 두 사람이 통과하는 자리의 평균 비율을 구하라. (나) k = 2 와 k = 5 이면 어떤가? (다) 기회가 늘 때 누가 더 이득을 보며, 왜 그런가?
슛 테스트의 두 자리(자유투 자리, 하프라인)와 두 지원자가 한 번 던져 넣을 확률
함께 풀기
김민준
k = 1 이면 A 가 (0.9 + 0.01)/2 = 0.455, B 가 (0.6 + 0.15)/2 = 0.375 예요. A 가 더 잘 쏘는 사람이니까 기회를 늘려도 A 가 계속 앞서겠죠.
선생님
k = 5 로 계산해 봐요.
김민준
A 는 자유투가 1 − 0.1⁵ = 0.99999, 하프라인이 1 − 0.99⁵ = 0.049 라서 평균 0.525. B 는 1 − 0.4⁵ = 0.990, 1 − 0.85⁵ = 0.556 이라서 평균 0.773 이요.
김민준
뒤집혔네요. k = 2 만 돼도 A 0.505, B 0.559 로 벌써 B 가 앞서요.
이서연
A 는 자유투를 이미 거의 다 넣으니까 기회가 늘어도 더 얻을 게 없고, 하프라인은 1% 라 다섯 번 던져도 5% 남짓이야. B 는 15% 짜리를 다섯 번 던지면 절반을 넘어.
선생님
그러면 기회가 많을 때 점수를 정하는 건 무엇이죠?
이서연
확률이 작아도 0 은 아닌 자리를 얼마나 가졌느냐요. 한 번에 잘하는 것과 여러 번 기회가 있을 때 잘하는 것은 다른 능력이네요.
문제 11. pass@k 를 어떻게 셈할까
(가) 한 모델에서 pass@k 가 k에 대해 줄지 않음을 보여라. (나) n = 20개 중 c = 3개가 맞았을 때 pass@5 를 추정하라. 1 − (1 − c/n)k 를 쓰면 왜 안 되는가?
뽑은 샘플 20개 가운데 맞은 3개. 이 20개에서 5개를 고르는 상황이다
함께 풀기
이서연
(가)는 쉬워요. 한 번에 맞힐 확률이 s 면 기회가 k 번이니까 k·s, k에 비례해서 늘어요.
선생님
s = 0.2, k = 10 이면요?
이서연
2요… 확률이 1을 넘네요. 두 번 이상 맞은 경우를 겹쳐 셌어요.
선생님
겹쳐 세지 않으려면 어느 쪽 사건을 세는 게 쉬울까요?
이서연
전부 틀릴 경우요. 하나라도 맞을 확률은 전부 틀릴 확률을 빼서 1 − (1−s)k 이고, 0 ≤ 1−s ≤ 1 이니까 (1−s)k 가 k에 대해 줄어요. 문제마다 그러니 평균을 내도 그대로고요.
김민준
(나)는 c/n = 3/20 을 넣으면 1 − (17/20)⁵ = 0.556 이요.
선생님
그 추정량을 여러 번 뽑아서 평균 내면 참값이 나와요?
김민준
시뮬레이션해 봤어요. s = 0.2, n = 20, k = 5 로 2만 번. 참값 0.672 인데 제 방식은 평균 0.634 요. 계속 낮게 나와요.
김민준
c/n 은 편향이 없는데 왜 그걸 넣은 결과는 편향되죠?
이서연
1 − (1−x)k 가 x 에 대해 오목하니까. 젠센 부등식으로 E[f(c/n)] ≤ f(E[c/n]) 이야. 편향 없는 걸 비선형 함수에 넣으면 편향이 생겨.
선생님
그래서 Chen 외(2021)는 20개 중 5개를, 한 번 고른 것은 다시 고르지 않고(비복원) 고를 때 전부 틀릴 확률 C(17, 5)/C(20, 5) 를 셌어요.
김민준
6188/15504 = 0.399 니까 pass@5 추정값은 0.601 이요. 시뮬레이션에서도 이 방식은 평균 0.674 로 참값에 붙어요.
김민준
뽑은 20개를 "모집단"으로 보고 거기서 5개를 뽑는 거네요. 조교가 채점할 때 제출물 전부에서 다섯 개를 무작위로 골라 검사하는 것처럼.
문제 12. 드문 정답에 보상을 주면
답 셋에 π = (0.7, 0.2, 0.1) 을 주는 정책이 있다. 정답은 가장 드문 답 2 하나다(보상 1, 나머지 0). (가) 어드밴티지 A 와 Cov(log π, A) 를 구하라. (나) lr = 0.1 인 자연 정책 그래디언트 한 스텝(로짓에 lr·A 를 더함) 뒤 엔트로피는 늘어나는가, 줄어드는가? (다) 정답이 가장 흔한 답 0 이었다면 어떻게 되는가?
답 셋에 π = (0.7, 0.2, 0.1) 을 주는 정책과 정답인 답 2. 점선 상자는 (다)에서 정답을 답 0 으로 바꾼 경우다
함께 풀기
김민준
정답에 보상을 주면 정책이 정답인 답 2 로 몰리니까 엔트로피는 당연히 줄죠. 강화학습은 엔트로피를 깎는 거잖아요.