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

베이스라인: 모두에게서 같은 숫자를 빼라

보상에 5를 더했을 뿐인데 같은 정확도에 샘플이 43배 필요해졌다. 상수가 흔들림을 키운다면, 거꾸로 알맞은 숫자를 빼면 흔들림이 줄지 않을까? 그리고 빼도 방향이 틀어지지 않을까?

역사: 분석으로는 고를 수 없던 베이스라인

1992년 로널드 윌리엄스(Ronald J. Williams)가 REINFORCE라고 이름 붙인 학습 규칙들에는 처음부터 베이스라인의 자리가 있었다. 파라미터가 한 번에 움직이는 양이 「학습률 × (보상 − 베이스라인) × 로그확률의 그래디언트」였고, 베이스라인에는 조건이 하나뿐이었다. 이번에 뽑힌 행동에 기대지 말 것. 이 조건만 지키면 베이스라인을 무엇으로 두든, 평균적으로 기대 보상이 오르는 쪽으로 간다는 그의 정리가 그대로 성립했다.

그런데 바로 그 정리 때문에, 그의 분석은 베이스라인을 고르는 데 아무 도움이 되지 않았다. 무엇을 넣어도 평균은 같았기 때문이다. 그는 논문 끝에서 이 한계를 인정하고, 대신 「많은 실험에서 피할 수 없는 결론」을 적었다. 지난 보상들의 이동평균을 베이스라인으로 쓰는 방법(리처드 서튼(Richard S. Sutton)이 1984년에 「강화 비교(reinforcement comparison)」라고 부른 것)이 수렴을 크게 빠르게 하고, 어떤 때는 학습이 어디에 닿는지까지 바꾼다는 것이다. 닿는 곳이 바뀌는 예로 그는 출력이 둘뿐이고 보상이 늘 양수인 가장 단순한 경우를 들었다. 그 계산은 아래 문제에서 직접 해 본다. 흔들림을 가장 작게 만드는 베이스라인도 따져 봤는데(그 자신의 1986년 글과 피터 데이언(Peter Dayan)의 1990년 연구), 그 값은 평균 보상이 아니라 추정하기 더 까다로운 다른 양이었다.

그 이름 REINFORCE는 규칙의 모양을 그대로 옮긴 약자다.

RE·I REward Increment 한 번에 움직이는 양 Δθ N·F Nonnegative Factor 음이 아닌 계수 (학습률) = α (알파) O·R Offset Reinforcement 베이스라인을 뺀 보상 × (R − b) C·E Characteristic Eligibility 로그확률의 그래디언트 × ∇log πθ

이름 한가운데에 이미 Offset, 즉 베이스라인을 빼는 연산이 들어 있다. 이 절의 결론이 30여 년 전 이름 안에 적혀 있는 셈이다.

베이스라인을 빼도 방향은 그대로

해결책은 단순하다. 보상에서 베이스라인 b\textcolor{#00897b}{b}를 뺀다.

g^b=1N∑i(R(yi)−b) ∇θlog⁡πθ(yi)\textcolor{#993600}{\hat g_b} = \frac{1}{\textcolor{#5f970c}{N}} \sum_{i} \big(\textcolor{#d9670b}{R}(\textcolor{#1c9c60}{y_i}) - \textcolor{#00897b}{b}\big)\, \nabla_\theta \log \textcolor{#1565c0}{\pi_\theta}(\textcolor{#1c9c60}{y_i})
g^b베이스라인을 뺀 그래디언트 추정치b베이스라인: 점수에서 빼는 기준값R(yi)i번째 응답의 점수πθ학습 중인 정책 \small\begin{array}{ll} \textcolor{#993600}{\hat g_b} & \text{베이스라인을 뺀 그래디언트 추정치} \\ \textcolor{#00897b}{b} & \text{베이스라인: 점수에서 빼는 기준값} \\ \textcolor{#d9670b}{R}(\textcolor{#1c9c60}{y_i}) & \text{}i\text{번째 응답의 점수} \\ \textcolor{#1565c0}{\pi_\theta} & \text{학습 중인 정책} \end{array}

이렇게 해도 치우침이 생기지 않는다. 빼는 항의 기대값이 0이기 때문이다.

Ey∼πθ[ b ∇θlog⁡πθ(y) ]=b∑yπθ(y)∇θπθ(y)πθ(y)=b ∇θ∑yπθ(y)=b ∇θ1=0\mathbb{E}_{\textcolor{#1c9c60}{y} \sim \textcolor{#1565c0}{\pi_\theta}}\big[\, \textcolor{#00897b}{b}\, \nabla_\theta \log \textcolor{#1565c0}{\pi_\theta}(\textcolor{#1c9c60}{y}) \,\big] = \textcolor{#00897b}{b} \sum_{\textcolor{#1c9c60}{y}} \textcolor{#1565c0}{\pi_\theta}(\textcolor{#1c9c60}{y}) \frac{\nabla_\theta \textcolor{#1565c0}{\pi_\theta}(\textcolor{#1c9c60}{y})}{\textcolor{#1565c0}{\pi_\theta}(\textcolor{#1c9c60}{y})} = \textcolor{#00897b}{b}\, \nabla_\theta \sum_{\textcolor{#1c9c60}{y}} \textcolor{#1565c0}{\pi_\theta}(\textcolor{#1c9c60}{y}) = \textcolor{#00897b}{b}\, \nabla_\theta 1 = 0
b응답에 의존하지 않는 베이스라인πθ(y)학습 중인 정책이 y를 뽑을 확률 (합이 1)\small\begin{array}{ll} \textcolor{#00897b}{b} & \text{응답에 의존하지 않는 베이스라인} \\ \textcolor{#1565c0}{\pi_\theta}(\textcolor{#1c9c60}{y}) & \text{학습 중인 정책이 }\textcolor{#1c9c60}{y}\text{를 뽑을 확률 (합이 1)} \end{array}

이 증명에는 조건이 하나 숨어 있다. b\textcolor{#00897b}{b}를 합 기호 밖으로 꺼냈다는 것 — 즉 b\textcolor{#00897b}{b}는 뽑힌 응답 y\textcolor{#1c9c60}{y}에 의존하면 안 된다. 프롬프트에 의존하는 것은 괜찮다.

베이스라인을 빼면 가중치(로그확률 앞에 곱하는 수 — 신경망 파라미터가 아니다)의 부호가 의미를 갖는다.

보상이 전부 0 이상이어도 나쁜 답은 음수 가중치를 받는다. 흔히 "나쁜 예(negative example)를 넣으면 SFT가 RL이 된다"고 하는데, 베이스라인이 나쁜 예를 자동으로 만들어 준다.

흔들림은 얼마나 줄까? 앞 절의 세 답 장난감에서 평균 보상 J≈0.29\textcolor{#d62728}{J} \approx 0.29를 베이스라인으로 빼 보면:

설정 추정치 평균 표준편차 신호 대 잡음비 잡음보다 신호가 커지려면 필요한 샘플 수
보상 그대로 (b=0\textcolor{#00897b}{b} = 0) 0.098 0.307 0.32 10개
평균 보상을 뺌 (b=J\textcolor{#00897b}{b} = \textcolor{#d62728}{J}) 0.098 0.209 0.47 5개

앞 절의 그림처럼 샘플 하나의 추정치를 펼쳐 보면, 베이스라인을 뺀 쪽은 「서울입니다」가 뽑힐 때의 큰 값이 줄고 세 값이 서로 가까워진다.

보상 그대로 (b = 0) 서울입니다 · 0.14 +0.86 부산입니다 · 0.61 0 서울이요 · 0.25 −0.08 평균 +0.098 · 표준편차 0.31 평균 보상을 뺌 (b ≈ 0.29) 서울입니다 · 0.14 +0.62 부산입니다 · 0.61 +0.04 서울이요 · 0.25 −0.04 평균 +0.098 · 표준편차 0.21

위젯에서 확인할 것:

어떤 b\textcolor{#00897b}{b}를 쓰는가
베이스라인 계산 장점 한계
고정 상수 b=0.5\textcolor{#00897b}{b} = 0.5 같은 값 공짜 보상의 규모가 학습 중 바뀌면 틀어진다
이동평균 최근 배치들의 평균 보상 고전적 REINFORCE의 기본값 모든 프롬프트에 같은 기준을 쓴다
같은 프롬프트의 다른 샘플 평균 프롬프트마다 N\textcolor{#5f970c}{N}개를 뽑아 자기를 뺀 평균 프롬프트 난이도를 반영 프롬프트당 샘플이 여러 개 필요
학습된 가치함수 V(st)\textcolor{#00897b}{V}(\textcolor{#0093b8}{s_t}) (이 시점까지 쓴 풀이에서 앞으로 받을 점수의 평균) 별도 모델이 예측 토큰마다 다른 기준 모델을 하나 더 학습해야 한다

분산을 가장 많이 줄이는 최적 베이스라인도 계산할 수 있다(위버와 타오(Lex Weaver, Nigel Tao) 2001, 그린스미스(Evan Greensmith)와 동료들 2004). 그래디언트 크기의 제곱으로 가중한 평균 보상 b∗=E[R ∥∇log⁡π∥2]/E[∥∇log⁡π∥2]\textcolor{#00897b}{b^*} = \mathbb{E}[\textcolor{#d9670b}{R}\, \|\nabla \log \textcolor{#1565c0}{\pi}\|^2] / \mathbb{E}[\|\nabla \log \textcolor{#1565c0}{\pi}\|^2]이다. 답이 셋뿐인 앞 절의 예제(점수 1, 0, 0.6에 확률 약 0.14, 0.61, 0.25)에서 “서울입니다” 성분만 보면 b∗≈0.89\textcolor{#00897b}{b^*} \approx 0.89이고, 베이스라인 없이 0.3070.307이던 표준편차가 0.0350.035까지 내려간다. 하지만 이 값은 파라미터 성분마다 다르고 추정하기도 번거롭다. 그래서 실무에서는 평균 보상을 쓴다. 최적은 아니지만 거의 공짜로 대부분의 이득을 얻는다.

ML에서: 인과성 — 언어모델이 받지 못하는 선물

한 가지 더 공짜로 줄일 수 있는 흔들림이 있다. 토큰 tt에서 한 선택은 그보다 앞서 이미 받은 보상을 바꿀 수 없으니, 토큰 tt의 가중치에서 그 과거 보상을 빼도 치우침이 생기지 않는다. 정책 그래디언트의 빈칸 Φt\textcolor{#8e44ad}{\Phi_t}에 넣는 값이 「보상 − 베이스라인」에서 「시점 tt 이후에 받은 보상의 합 − 베이스라인」으로 바뀌는 것이다. 로봇이나 게임처럼 매 순간 보상이 들어오는 환경에서는 이 덕을 크게 본다. 그런데 언어모델은 보통 보상이 마지막에 한 번 들어오므로 뺄 과거 보상이 없다. 인과성이 줘야 할 선물을 언어모델은 받지 못한다.

문제 3 — 칭찬 스티커

조교가 과제마다 점수 대신 칭찬 스티커를 준다. 잘 쓴 과제에는 2장, 못 쓴 과제에도 1장이다. 민준은 이번 달 과제 넷 가운데 셋을 급하게 써서 못 쓴 과제가 되었고, 하나는 꼼꼼히 써서 잘 쓴 과제가 되었다. 민준은 「스티커를 더 많이 받은 방식을 다음 달에 더 쓴다」는 규칙을 따른다. (가) 방식별로 받은 스티커는 모두 몇 장인가? 다음 달에는 어느 방식이 늘어나는가? (나) 조교가 스티커 수에서 1.5장씩 빼서 적어 준다면(잘 쓴 과제 +0.5, 못 쓴 과제 −0.5) 방식별 합은?

선생님 (평상)
선생님
민준 학생, 이번 달에는 어느 방식이 더 칭찬받았어요?
김민준 (자신만만)
김민준
꼼꼼히요. 한 번에 2장이니까요.
선생님 (질문)
선생님
방식별로 모두 더하면요?
김민준 (평상)
김민준
급하게 쓴 게 1장씩 세 번이라 3장, 꼼꼼히 쓴 건 2장…
김민준 (당황)
김민준
급하게 쓴 쪽이 더 받았네요. 제 규칙대로면 다음 달엔 더 급하게 써요.
이서연 (평상)
이서연
못 쓴 과제도 스티커를 받으니까 많이 한 쪽이 이기는 거야. 1.5장씩 빼면 급하게 쓴 건 −0.5가 세 번이라 −1.5, 꼼꼼히는 +0.5. 이제야 꼼꼼히 쓰라는 말이 돼.
이서연 (평상)
이서연
통계 수업에서 원점수 대신 평균과의 차이를 보는 거랑 같네.

정리 (가) 급하게 쓴 방식 3장, 꼼꼼히 쓴 방식 2장. 규칙대로면 급하게 쓰는 방식이 늘어난다. (나) 급하게 −1.5, 꼼꼼히 +0.5. 칭찬이 늘 양수면 자주 한 쪽이 이기고, 기준을 빼야 못한 쪽에 음수가 붙는다.

문제 4 — 보상이 늘 양수일 때

답이 둘인 프롬프트가 있다. 정답은 2점, 오답은 1점이라 보상이 늘 양수다. 지금 모델은 두 답을 0.5씩 고른다. 오답 로짓에 대한 ∇log⁡π(y)\nabla \log \textcolor{#1565c0}{\pi}(\textcolor{#1c9c60}{y}) 는 뽑힌 답이 오답이면 1−0.5=+0.51 - 0.5 = +0.5, 정답이면 0−0.5=−0.50 - 0.5 = -0.5 다. 응답 네 개를 뽑았더니 오답, 오답, 오답, 정답이 나왔다. (가) 베이스라인 없이(b=0\textcolor{#00897b}{b} = 0) 네 샘플의 평균으로 오답 로짓의 그래디언트를 추정하라. 이 한 걸음에서 오답의 확률은 오르는가, 내리는가? (나) b=1.5\textcolor{#00897b}{b} = 1.5 이면? (다) 네 응답이 어떻게 나오든 한 걸음마다 오답이 내려가게 하려면 b\textcolor{#00897b}{b} 를 어느 범위에 두어야 하는가?

선생님 (평상)
선생님
넷 가운데 셋이 오답이에요. 베이스라인 없이 한 걸음 가면 오답은 어떻게 될까요?
김민준 (자신만만)
김민준
정답 점수가 더 높으니까 어떻게 뽑히든 정답 쪽으로 가죠.
선생님 (질문)
선생님
그건 기대값 이야기예요. 이 배치 하나로 계산해 볼까요?
김민준 (평상)
김민준
오답 샘플은 1 × 0.5 = +0.5가 셋, 정답 샘플은 2 × (−0.5) = −1이 하나. 합이 0.5, 넷으로 나누면 +0.125…
김민준 (당황)
김민준
오답 로짓이 올라가요.
이서연 (평상)
이서연
아까 스티커 문제랑 같네. 오답도 1점짜리 칭찬을 받으니까, 세 번 뽑힌 오답이 한 번 뽑힌 정답을 이긴 거야.
선생님 (평상)
선생님
이런 배치가 얼마나 자주 나올까요?
김민준 (평상)
김민준
네 응답이 나오는 16가지를 다 세면 오답이 셋 이상인 게 다섯 가지예요. 5/16, 세 걸음에 한 번꼴로 오답이 올라가요. 그래도 16가지를 확률로 평균 내면 −0.25라 치우침은 없고요.
선생님 (질문)
선생님
그럼 b = 1.5면 오답 샘플의 가중치는 부호가 어떻게 되죠?
이서연 (평상)
이서연
1 − 1.5 = −0.5니까 오답 샘플은 (−0.5)(+0.5) = −0.25, 정답 샘플은 (+0.5)(−0.5) = −0.25.
이서연 (깨달음)
이서연
어느 쪽이 뽑혀도 −0.25예요. 이 배치도, 다른 어떤 배치도 −0.25.
선생님 (미소)
선생님
흔들림이 0까지 간 건 두 확률이 0.5씩이라서 생긴 우연이에요. 그런데 오답이 늘 내려가는 건 우연이 아니에요. 오답 확률이 0.3이어도 그럴까요?
이서연 (평상)
이서연
정답 샘플은 (2 − b)(−0.3), 오답 샘플은 (1 − b)(0.7)이에요. b가 1과 2 사이면 앞은 양수 곱하기 음수, 뒤는 음수 곱하기 양수라 둘 다 음수예요. 확률이 얼마든 마찬가지고요.
김민준 (평상)
김민준
그럼 (다)는 b를 1보다 크고 2보다 작게. 정답 점수와 오답 점수 사이에만 두면 되네요.

정리 (가) 오답 샘플 +0.5+0.5 셋, 정답 샘플 −1-1 하나로 평균 +0.125+0.125. 오답이 오른다. 오답이 셋 이상 나오는 배치는 5/165/16의 확률로 나온다. 모든 배치를 확률로 평균 내면 −0.25-0.25라 치우침은 없다. (나) 샘플마다 −0.25-0.25, 어느 배치든 −0.25-0.25로 오답이 내려간다. (다) 1<b<21 < \textcolor{#00897b}{b} < 2. 보상이 늘 양수인데 b=0\textcolor{#00897b}{b} = 0이면 뽑힌 답을 늘 올리므로, 운 나쁜 배치에서는 나쁜 답이 오른다.

문제 5 — 자기 자신을 기준으로

민준은 "베이스라인은 가까울수록 좋으니, 각 응답의 베이스라인을 그 응답 자신의 보상으로 하자"고 제안했다. 즉 bi=R(yi)\textcolor{#00897b}{b_i} = \textcolor{#d9670b}{R}(\textcolor{#1c9c60}{y_i}). 무슨 일이 일어나는가? 이 장의 치우침이 없다는 증명에서 어느 줄이 깨지는가?

김민준 (자신만만)
김민준
베이스라인이 보상이랑 가까울수록 R − b가 작아지니까 분산이 줄잖아요. 자기 보상이면 R − b = 0, 분산도 0이에요. 완벽하죠.
선생님 (질문)
선생님
분산 0인 추정기네요. 그럼 그 추정기가 가리키는 그래디언트는요?
김민준 (평상)
김민준
전부 0… 이요. 아.
김민준 (당황)
김민준
학습이 아예 안 되네요.
이서연 (평상)
이서연
증명에서 b를 합 기호 밖으로 꺼낸 줄이 깨져. b가 y마다 다르면 Σ π(y) b(y) ∇log π(y) 에서 b(y)를 못 꺼내니까, 기대값이 0이라는 보장이 사라져.
선생님 (평상)
선생님
그래요. 분산이 0이 됐지만 대신 치우침이 전부가 됐어요. "흔들리지 않는다"와 "맞는 곳을 가리킨다"는 다른 이야기예요.
김민준 (평상)
김민준
조교님이 자기 채점을 자기가 하면 안 된다는 거랑 같네요. 제가 제 과제를 채점하면 항상 기준이랑 딱 맞으니까 피드백이 없어요.

정리 bi=R(yi)\textcolor{#00897b}{b_i} = \textcolor{#d9670b}{R}(\textcolor{#1c9c60}{y_i})이면 모든 가중치가 0 — 분산은 0이지만 그래디언트도 0이다. 치우침이 없다는 증명의 “b\textcolor{#00897b}{b}를 합 밖으로 꺼내는” 단계는 b\textcolor{#00897b}{b}가 뽑힌 응답에 의존하지 않을 때만 성립한다.