MC는 편향이 없는 대신 분산이 크고, TD는 분산이 작은 대신 비평가가 틀린 만큼 편향된다. 학습은 응답마다, 토큰마다 이 추정을 되풀이하므로 편향과 분산 가운데 어느 오류를 받아들일지는 매번 따라오는 선택이다. 둘 중 하나만 골라야 할까, 아니면 가까운 미래는 실제 결과를 보고 먼 미래만 비평가에 맡기는 중간은 없을까?
역사: 버클리의 절충
MC와 TD 사이의 중간을 파라미터 λ 하나로 고를 수 있게 만든 것이 UC 버클리의 존 슐먼(John Schulman)과 동료들(모리츠 Philipp Moritz, 레빈 Sergey Levine, 조던 Michael Jordan, 아빌 Pieter Abbeel)이 2016년 ICLR에 발표한 GAE다. 그들이 겨냥한 것은 시뮬레이션 속 로봇이었다. 두 다리·네 다리 로봇이 관절에 주는 힘만으로 달리게 하고, 누운 자세에서 일어서게 하는 일이다. 정책 그래디언트로 이런 일을 배우려면 샘플이 너무 많이 든다는 것이 큰 걸림돌이었고, 그들은 가치함수로 분산을 크게 줄이는 대신 편향을 조금 받아들이기로 했다. 두 다리 로봇이 달리기를 배우는 데 든 시뮬레이션 경험은 실제 시간으로 1~2주 분량이었다. 같은 슐먼이 이듬해 내놓은 PPO(비평가를 쓰는 정책 그래디언트의 대표 방법)와 함께 쓰이며, GAE는 언어 모델 RLHF에서 어드밴티지를 계산하는 기본 방법이 됐다.
그림은 그 절충을 장난감 값으로 그린 것이다(GAE 논문의 수치가 아니다). λ를 1 쪽으로 올릴수록 비평가가 틀려서 생기는 편향은 줄고 보상 노이즈가 쌓이는 분산은 커져서, 둘을 더한 오차는 양 끝에서 크고 그 사이에서 가장 작다.
김민준
두 다리 로봇이 달리기를 배우는 데 1~2주 분량이면 생각보다 짧은데요? 사람 아기는 걷는 데만 1년쯤 걸리잖아요.
선생님
그 1~2주는 시뮬레이션 속 시간이에요. 실제 로봇 다리로 같은 경험을 쌓으려면요?
김민준
2주 내내 쉬지 않고 넘어지고 일어나야 하네요. 관절이 먼저 망가지겠어요.
이서연
그러니까 샘플을 줄이는 일이 계산 시간을 아끼는 정도가 아니었던 거네요. 그런데 λ로 섞는다는 생각은 GAE가 처음이에요?
선생님
λ로 섞는 생각은 서튼의 1988년 TD(λ)에 이미 있었어요. 다만 그건 가치를 예측하는 쪽의 이야기였어요. 정책을 고치는 어드밴티지에 그대로 넣으면 편향이 얼마나 생기는지는 따로 따져야 했죠.
이서연
몇 스텝까지는 실제 보상을 보고 그 뒤는 비평가에 맡긴다고 할 때, 그 경계를 한 곳에 딱 긋지 않고 부드럽게 섞을 수는 없어요?
λ로 더하는 TD 오차
GAE(Generalized Advantage Estimation)는 두 극단 사이를 연속적으로 잇는다. TD 오차를 앞으로 쭉 더하되, 멀어질수록 λ(람다)배씩 줄인다.
오답 응답, 비평가 완벽에서 λ를 1 → 0으로 내려 보라. λ=1에서는 모든 토큰이 벌을 받지만, λ=0에서는 "24"에만 큰 음수가 몰리고 "10 × 3"은 오히려 상을 받는다.
비평가 오차를 올리고 다시 λ=0을 보라. 마름모(진짜 기여도)와 막대가 어긋난다. λ=1 쪽 막대는 비평가 오차에 훨씬 덜 영향을 받는다.
ML에서: 언어 모델의 기본값
GAE를 처음 내놓은 논문도 λ 를 0부터 1까지 바꿔 가며 수레 위 막대 세우기를 배우게 해 보았다. 가장 빨리 배운 것은 양 끝이 아니라 0.92~0.98 사이였고, 언어 모델 RLHF의 흔한 기본값도 γ=1, λ=0.95다. 보상이 응답 끝에 한 번만 오므로 할인할 이유가 없고, λ 는 1 쪽에 두어 학습 초기의 부정확한 비평가에 덜 기댄다. 비평가를 학습할 때의 목표값도 보통 이 GAE 어드밴티지에 가치를 더한 G^t=A^t+Vϕ(st)(λ-리턴: GAE로 섞어 만든 '앞으로 받을 점수’의 추정)를 쓴다. 비평가를 학습하는 제곱 손실 ∑t(Vϕ(st)−G^t)2 의 목표값 G^t 가 바로 이 λ-리턴이다.
문제 4: 망원경처럼 접히는 합
γ=1, λ=1일 때 GAE가 R−V(st)가 됨을 보이시오. 정답 응답(R = 1, 풀이가 나아가며 가치가 0.45 → 0.70 → 0.80 → 0.95)의 첫 토큰 "10 × 3"으로 수치를 확인하시오. 위젯의 「문제 4 값」 단추로 같은 설정을 불러와 수치판의 “10×3” 값과 답을 비교해 보라.
김민준
코드로 해봤어요. λ=1이면 δ를 전부 더하는 거니까, 첫 토큰부터 끝까지 δ를 더하면… 0.55가 나와요. R − V(s₀) = 1 − 0.45 = 0.55랑 같네요.