문제는 진짜 V를 모른다는 것이다. 신경망으로 근사한 비평가 Vϕ(첨자 φ(파이, phi)는 비평가 신경망의 파라미터)를 쓸 수밖에 없다(학습법은 이 절 끝에서 본다). 그러면 어드밴티지를 계산할 때 비평가를 어디까지 믿어야 할까? 풀이가 끝날 때까지 기다려 실제 점수를 볼 수도 있고, 한 토큰만 더 본 뒤 나머지는 비평가의 예측에 맡길 수도 있다.
역사: 막대가 넘어진 뒤에야 오는 신호
비평가는 이 장과 똑같은 고민에서 나왔다. 1983년 매사추세츠 대학교의 배로(Andrew Barto), 서튼(Richard Sutton), 앤더슨(Charles Anderson)은 수레 위에 경첩으로 세운 막대를, 수레를 좌우로 밀어 쓰러지지 않게 하는 일을 기계에게 배우게 했다. 기계는 수레와 막대의 운동 방정식을 모르고, 받는 신호는 막대가 일정한 각도 넘게 기울거나 수레가 선로 끝에 닿았을 때 오는 「실패」 하나뿐이었다. 여러 번 민 끝에 온 실패를 어느 밀기 탓으로 돌릴 것인가? 그들은 신경 세포를 흉내 낸 소자 둘을 나란히 두었다. 하나는 밀 방향을 고르고, 다른 하나는 실패 신호만으로는 얻을 수 없는 더 촘촘한 평가를 스스로 만들었다. 둘째 소자의 이름이 적응 비평 소자(adaptive critic element)였다.
그 평가를 무엇으로 고치는지는 서튼이 1988년 논문 「Learning to Predict by the Methods of Temporal Differences」에서 따로 정리했다. 그가 든 예는 일기예보다. 월요일부터 금요일까지 날마다 「이번 토요일에 비가 올까」를 예보하는 사람이 있다. 흔한 방법은 토요일까지 기다렸다가 날마다의 예보를 실제 날씨와 견준다. 서튼의 방법은 날마다의 예보를 다음 날의 예보와 견준다. 월요일에 50%, 화요일에 75%를 예보했다면, 토요일을 기다리지 않고 화요일에 곧바로 「월요일 같은 날의 예보는 올려야 한다」고 배운다. 서튼은 나중의 예측으로 지금의 예측을 고치는 이 방법들을 시간차(temporal difference) 방법이라 부르고, 결과를 기다리는 방법보다 기억과 계산이 덜 들면서 대개 더 정확한 예측을 낸다고 보였다. 그 첫 쓰임으로 그는 새뮤얼(Arthur Samuel)의 1959년 체커 프로그램을 들었다. 이어지는 두 판면의 평가 차이로 앞 판면의 평가를 고친 프로그램이다.
몬테카를로 대 시간차
어드밴티지를 추정하는 두 극단이 있다.
몬테카를로(MC): 끝까지 기다려 실제 점수를 본다.
A^tMC=R−Vϕ(st)
시간차(TD, temporal difference): 한 걸음만 가고, 그 다음은 비평가의 예측을 믿는다.
A^tTD=δt=rt+γVϕ(st+1)−Vϕ(st)
δt(δ는 델타)를 TD 오차라 부른다. γ(감마)는 먼 미래의 보상을 깎는 할인율인데, 언어모델 RLHF(사람의 선호로 학습한 보상 모델의 점수를 강화학습으로 올리는 절차)에서는 보통 γ=1(할인 없음)을 쓴다.
MC: R−V(st)
TD: δt
무엇을 믿나
실제로 받은 점수
다음 상태에 대한 비평가의 예측
치우침
없음 (비평가가 틀려도 베이스라인일 뿐)
비평가가 틀리면 그대로 치우침
분산
큼 — 이후 모든 토큰의 운이 섞인다
작음 — 한 토큰의 운만 섞인다
“24” 오답에서 "10 × 3"의 추정
0−0.45=−0.45 (좋은 수가 벌을 받음)
0.70−0.45=+0.25 (정확히 짚음)
MC의 문제는 이 표의 마지막 줄이다. “10 × 3” 뒤에 우연히 "24"라는 실수가 나왔다는 이유로, 좋은 수가 벌을 받는다. 여러 샘플을 평균내면 결국 바로잡히지만 — “10 × 3” 뒤에 "21"이 나온 샘플들이 상쇄해 주므로 — 그만큼 샘플이 많이 든다. 이것이 분산이다.
TD의 문제는 반대다. 비평가가 정확하면 한 샘플만으로 범인을 짚는다. 하지만 비평가가 "10 × 3을 쓰면 오히려 불리하다"고 잘못 믿고 있다면, 그 오해가 어드밴티지에 그대로 들어간다. 샘플을 아무리 많이 모아도 사라지지 않는 이 오류가 치우침이다.
같은 오답 풀이의 네 토큰에 두 방법을 모두 대어 보면(비평가가 진짜 가치를 안다고 할 때) 차이가 한눈에 보인다. MC는 네 토큰을 모두 벌하고, TD는 "24"에 벌을 몰아준다.
ML에서: 비평가를 학습한다
진짜 V는 알 수 없으니 비평가를 학습한다. 보통 트랜스포머에 스칼라 하나를 출력하는 머리(value head)를 달고, 각 앞부분(프롬프트 + 지금까지 쓴 토큰)에 대해 "결국 받을 점수"를 회귀(숫자 하나를 예측해 목표값과의 제곱 오차를 줄이는 학습)로 맞춘다.
목표값 G^t 로는 끝까지 기다린 실제 점수 R 을 쓸 수도, 한 걸음 뒤의 예측 rt+Vϕ(st+1) 을 쓸 수도 있다. 위의 두 극단과 같은 선택이다. 한 번의 순전파로 모든 앞부분의 가치가 나온다는 점은 다행이다. 응답이 1,000토큰이어도 비평가를 1,000번 돌릴 필요는 없다.
문제 3 — 토요일 비 예보는 언제 고치나
예보관이 월요일부터 금요일까지 날마다 「이번 토요일에 비가 올 확률」을 발표했다. 월 0.5, 화 0.6, 수 0.3, 목 0.4, 금 0.8. 토요일에는 비가 왔다(1). (가) 토요일 날씨를 목표로 삼는 방법에서 월요일 예보와 수요일 예보의 오차(목표 − 예보)는 얼마인가? (나) 다음 날의 예보를 목표로 삼는 방법에서는? (다) 이번 주 토요일의 비가 운이 따른 결과였을 수도 있다면, 두 방법 가운데 어느 쪽 오차가 그 운을 더 많이 담고 있나?
김민준
토요일에 진짜로 비가 왔으니까 그걸 목표로 삼는 게 맞죠. 월요일은 1 − 0.5 = +0.5, 수요일은 1 − 0.3 = +0.7이에요. 다음 날 예보는 또 다른 짐작일 뿐이잖아요.
선생님
민준 학생, 수요일 예보를 0.7이나 올리라는 신호는 수요일에 이미 알 수 있던 것 때문일까요, 목·금·토에 벌어진 일 때문일까요?
김민준
수요일 뒤에 목요일 0.4, 금요일 0.8로 오르고 토요일에 비가 왔으니… 수요일 뒤에 벌어진 일이 다 섞여 있네요.
이서연
다음 날 예보를 목표로 삼으면 월요일은 0.6 − 0.5 = +0.1, 수요일은 0.4 − 0.3 = +0.1이야. 하루 사이의 변화만 담으니까 토요일의 운은 거의 안 들어가. 대신 목요일 예보가 늘 비관적이면 그 버릇이 그대로 수요일의 목표에 들어오겠지.
선생님
그래요. 결과를 기다리면 운이 다 섞이고, 다음 예측을 믿으면 다음 예측의 버릇이 섞여요.
김민준
시험 성적 하나만 보고 공부법을 고치면 그날 컨디션까지 공부법 탓이 되는 거랑 같네요.
정리 (가) 월요일 +0.5, 수요일 +0.7. (나) 월요일 +0.1, 수요일 +0.1. (다) 결과를 기다리는 방법(MC 쪽)이다. 그 오차에는 그날 뒤에 벌어진 모든 일의 운이 섞인다. 다음 날 예보를 믿는 방법(TD 쪽)은 하루치의 운만 담는 대신, 다음 날 예보가 틀리는 버릇을 그대로 물려받는다.
문제 4 — 사용자가 끼어들면
모델이 한 차례 말을 마치는 토큰 「[말 끝]」을 고르면, 사용자가 「네」나 「아니요」로 답한 뒤에야 모델이 다시 말한다. 사용자는 반반의 확률로 답한다. 대화가 결국 성공할 확률(가치)은 「네」 뒤 0.9, 「아니요」 뒤 0.3이고, 「[말 끝]」을 고르기 직전의 가치는 0.55다. 이번 대화에서 사용자는 「아니요」라고 답했다. 비평가는 진짜 가치를 안다고 하자(γ=1, 중간 보상 0). (가) 「[말 끝]」의 TD 오차 δt 를 구하시오. (나) 이 δt 는 「[말 끝]」의 어드밴티지 그 자체인가? 어드밴티지는 얼마인가? (다) 사용자 없이 모델 혼자 풀이를 써 내려갈 때와 무엇이 다른가?
김민준
0.3 − 0.55 = −0.25요. 언어모델은 토큰을 고르면 다음 상태가 정해지니까 δt 가 어드밴티지랑 정확히 같잖아요. 「[말 끝]」은 나쁜 수였어요.
선생님
민준 학생, 「[말 끝]」을 고른 순간 다음 상태가 하나로 정해졌나요? 모델이 다시 말할 때 앞에 무엇이 붙어 있죠?
김민준
사용자의 답이 붙어 있어요. 「네」가 붙을지 「아니요」가 붙을지는 모델이 고른 게 아니고요.
이서연
그럼 고른 뒤의 전망은 두 경우의 평균이야. Q=0.5×0.9+0.5×0.3=0.6 이고, 어드밴티지는 0.6−0.55=+0.05. 「[말 끝]」은 오히려 조금 좋은 수였어. −0.25는 「아니요」를 들은 운이 섞인 한 샘플이고, 「네」였다면 +0.35였겠지.
선생님
그래요. 두 샘플을 확률대로 평균하면 +0.05로 어드밴티지와 같아요. 무작위가 모델 밖에 있으면 δt 는 어드밴티지의 한 샘플이고, 평균을 내야 어드밴티지가 돼요.
이서연
모델 혼자 쓸 때는 다음 상태가 고른 토큰으로 정해져서 평균 낼 대상이 없었던 거네요. 확률론 수업에서 조건부 기대값 E[X | Y]가 X가 Y의 함수이면 그냥 X가 되는 거랑 같아요. 여기서는 다음 상태가 고른 토큰만의 함수가 아니라서 평균이 남고요.
김민준
검색이나 계산기를 부르는 에이전트도 그렇겠네요. 도구가 돌려주는 결과가 매번 다르면요.
정리 (가) δt=0.3−0.55=−0.25. (나) 한 샘플일 뿐이다. 어드밴티지는 (0.5×0.9+0.5×0.3)−0.55=+0.05 이고, 「네」였다면 δt=+0.35 로 두 경우의 평균이 +0.05다. (다) 모델 혼자 쓸 때는 고른 토큰이 다음 상태를 정하므로, 진짜 가치를 쓰면 δt 가 어드밴티지 그 자체다. 사용자나 도구처럼 모델 밖의 무작위가 끼면 δt 는 어드밴티지의 한 샘플이 되어, 비평가가 정확해도 흔들림이 남는다.