3. REINFORCE — 샘플로 추정하고, 베이스라인을 빼다

자주 하는 실수와 요약

자주 하는 실수
실수 나온 문제 바로잡는 법
평균이 절반이 되면 필요한 샘플도 두 배면 된다고 봄 1 필요한 수는 (표준편차 ÷ 평균)²이다. 평균이 절반이면 네 배가 든다
점수 규모를 키워도 방향이 같으니 아무 문제 없다고 봄 2 방향은 같아도 보폭이 커진다. 사실상 학습률을 올린 것과 같다
규모를 키우면 분산이 커지니 추정이 나빠졌다고 봄 2 평균도 같은 배수로 커진다. 신호 대 잡음비는 그대로다
한 번에 많이 받는 쪽이 이긴다고 봄 3 칭찬이 늘 양수면 합은 횟수를 따른다. 기준을 빼야 못한 쪽에 음수가 붙는다
정답 점수가 더 높으면 어느 배치에서나 정답 쪽으로 간다고 봄 4 보상이 늘 양수이고 b=0\textcolor{#00897b}{b} = 0이면 오답이 여러 번 뽑힌 배치에서 오답이 오른다. b\textcolor{#00897b}{b}를 두 점수 사이에 두면 한 걸음마다 오답이 내려간다
자기 보상을 베이스라인으로 쓰면 분산이 0이라 좋다고 봄 5 그래디언트도 0이 된다. b\textcolor{#00897b}{b}는 뽑힌 응답에 의존하면 안 된다
쉬운 시험의 높은 점수를 더 잘 본 것으로 봄 6 시험마다 그 시험의 평균을 빼야 난이도가 지워진다
여러 개를 섞은 평균이면 자기 보상이 들어가도 괜찮다고 봄 7 자기를 포함한 평균은 기대값을 N−1N\frac{\textcolor{#5f970c}{N}-1}{\textcolor{#5f970c}{N}} 배로 줄인다. 방향은 맞고 크기가 치우친다
전역 평균과 그룹 평균 중 하나가 늘 낫다고 봄 7 문제 난이도가 제각각일수록 그룹 평균이 이긴다. 대가는 프롬프트당 여러 샘플이다
요약

기대값을 계산할 수 없으니 지금의 모델로 응답 N\textcolor{#5f970c}{N}개를 뽑아 R⋅∇log⁡π\textcolor{#d9670b}{R} \cdot \nabla \log \textcolor{#1565c0}{\pi} 를 평균낸다. 이 추정은 치우침이 없지만 흔들리고, 보상에 상수를 더하면 흔들림이 커진다. 흔들림은 곧 샘플 수, 곧 GPU 비용이다. 보상에서 베이스라인 b\textcolor{#00897b}{b}를 빼면 방향은 그대로이고 흔들림만 준다. 단 b\textcolor{#00897b}{b}는 뽑힌 응답에 의존하면 안 된다. 베이스라인을 빼면 보상이 전부 양수여도 기준보다 못한 답이 음수 가중치를 받아, 나쁜 예가 저절로 생긴다. 베이스라인 없이 보상이 늘 양수이면 뽑힌 답이 늘 올라가서, 나쁜 답이 여러 번 뽑힌 배치에서는 나쁜 답이 오른다. 문제마다 난이도가 다르면 같은 프롬프트에서 여러 응답을 뽑아 그 평균을 기준으로 삼는 편이 낫다. 자기를 뺀 평균은 치우침이 없고, 자기를 포함한 평균은 크기만 N−1N\frac{\textcolor{#5f970c}{N}-1}{\textcolor{#5f970c}{N}} 배로 줄어든다. 모든 응답의 보상이 같으면 그 프롬프트에서는 배울 것이 없다.

막힌 곳

REINFORCE에 베이스라인까지 더했다. 그래도 두 가지가 남는다.

  1. 문장 전체에 숫자 하나. 풀이의 한 토큰만 틀렸어도 보상은 문장 끝에 하나뿐이라, 모든 토큰이 똑같은 음수 가중치를 받는다. 잘 쓴 앞부분까지 함께 벌을 받고, 어느 토큰이 문제였는지는 여러 샘플을 평균내야 겨우 드러난다. 그래서 샘플이 많이 필요하다.
  2. 베이스라인이 상태를 모른다. 프롬프트별 베이스라인은 "이 문제의 평균"은 알지만, "여기까지 쓴 풀이가 얼마나 유망한가"는 모른다. 풀이 중간마다 기준을 다시 매길 수는 없을까?