시간차 학습은 다음 상태의 값이 대충 맞을 때 이겼고, 다음 상태의 값이 틀렸을 때 치우쳤다. 모든 칸의 값을 0으로 두고 시작하는 비평가, 곧 아직 아무것도 모르는 비평가라면 어떨까? 시간차 학습으로는 오른쪽 끝의 보상 1이라는 소식이 에피소드마다 한 스텝씩만 뒤로 옮겨 가지만, 끝까지 기다리는 몬테카를로는 한 번에 소식을 다 받는 대신 운이 다 섞인다. 둘 사이 어딘가에서 멈출 수는 없을까?
역사: 몇 스텝까지 기다릴 것인가
한 스텝 뒤의 예측과 끝까지의 결과 사이를 「몇 스텝까지는 실제 보상을 더하고, 그 뒤는 예측을 믿는다」로 이은 생각은 크리스토퍼 왓킨스(Christopher Watkins)의 1989년 케임브리지 대학교 박사 논문으로 거슬러 올라간다. 서튼과 바토의 교과서 『Reinforcement Learning: An Introduction』(2판, 2018)은 n스텝 리턴이라는 생각을 왓킨스에게 돌리고, 그 오차가 줄어드는 성질을 처음 논한 것도 왓킨스라고 적는다. 서튼이 1988년 논문에서 쓴 TD(λ)도 결과와 예측을 섞는 다른 방법이었다. 어느 쪽이든 예측을 얼마나 믿고 결과를 얼마나 기다릴 것인가라는 물음은 같았다.
처음 값을 0으로
일곱 칸 랜덤 워크를 처음 값 0에서 시작한다(이때 RMS 오차는 0.559). 학습률 0.5로 에피소드 4 → 5 → 6 → 5 → 4 → 5 → 6 → 7 → 오른쪽 끝을 한 번 겪게 하자. 한 스텝 시간차는 칸 7만 0.5로 고친다. 몬테카를로는 칸 4, 5, 6, 7을 0.75, 0.875, 0.75, 0.5로 고친다. 그 사이에 「세 스텝까지는 실제 보상을 더하고, 세 스텝 뒤 칸의 값을 믿는」 목표를 쓰면, 오른쪽 끝까지 세 스텝 안에 있던 스텝들이 소식을 받아 칸 5, 6, 7이 0.5가 된다.
몇 스텝까지 실제 보상을 더할지를 n으로 두면 목표는 이렇게 적힌다. 이 목표로 값을 고치는 방법을 n스텝 시간차 (n스텝까지 기다리고 그 뒤는 예측을 믿는다 / n-step TD)라 한다.
n = 1이면 한 스텝 시간차, n이 에피소드보다 길면 몬테카를로다. n이 커질수록 목표에 실제 보상이 더 많이 들어가 편향이 줄고 운이 더 많이 섞인다. 에피소드 10개로 학습한 뒤의 RMS 오차를 300줄 평균해, n마다 학습률 0.05~1 가운데 가장 낮은 값을 골라 그렸다.
처음 값 0.5에서 시작하면 한 스텝(n = 1, 학습률 0.35)이 0.071로 가장 낮고, n이 커질수록 나빠져 몬테카를로가 0.191이다. 처음 값이 대충 맞으니 예측을 믿는 한 스텝 시간차가 이기는 것이다. 처음 값 0에서 시작하면 그림이 달라져, 한 스텝이 0.216, 몬테카를로가 0.242이고, 가운데의 n = 3(학습률 0.35)이 0.171로 가장 낮다. 예측이 크게 틀려 있을 때는 몇 스텝의 실제 보상으로 편향을 덜어 내는 가운데의 n이, 끝까지의 운을 다 받는 몬테카를로보다도 예측만 믿는 한 스텝 시간차보다도 낫다.
아래 위젯에서 n과 처음 값을 바꿔 가며 학습률에 따른 오차 곡선을 보자.
ML에서: 수백 토큰 뒤의 점수
언어 모델의 응답은 수백에서 수천 토큰이고, 점수는 대개 끝에 한 번 온다. 한 스텝 시간차로 가치 모델을 학습하면 끝의 점수라는 소식이 첫 토큰까지 가는 데 오래 걸리고, 몬테카를로로 학습하면 응답 하나의 운이 모든 토큰의 목표에 섞인다. n스텝 시간차는 한 스텝 시간차와 몬테카를로 사이에서 하나의 n을 고른다. 하나를 고르는 대신 여러 n의 목표를 비율로 섞어 쓸 수도 있다. 정책 그래디언트에 비평가를 붙일 때 널리 쓰는 GAE(일반화 어드밴티지 추정)가 그렇게 섞는 방법이다. 소식이 얼마나 빨리 가는지는 아래 문제 12에서 센다.
문제 10. 10km 달리기의 기록 예측
10km 달리기에서 출발 때 「완주 기록 60분」을 예측했고, 2km마다 지난 시간과 시계가 예측한 남은 시간은 다음과 같다. 2km: 11.5분 지남, 남은 예측 47.0분. 4km: 23.5분, 36.0분. 6km: 36.0분, 24.5분. 8km: 48.0분, 12.0분. 실제 완주는 61.0분. (가) 출발 시점의 예측을 고칠 목표를, 2km마다를 한 스텝으로 보고 n = 1, 2, 3, 4, 5에 대해 적으시오. (나) n이 커질수록 목표는 무엇을 더 많이 담는가?
선생님
민준 학생, n = 1의 목표는요?
김민준
첫 2km에 걸린 11.5분에, 2km에서 시계가 예측한 47.0분을 더한 58.5분이요.
선생님
n을 하나씩 늘려 볼까요.
김민준
n = 2는 23.5 + 36.0 = 59.5, n = 3은 36.0 + 24.5 = 60.5, n = 4는 48.0 + 12.0 = 60.0, n = 5는 실제 기록 61.0이에요.
선생님
n = 3이 60.5인데 n = 4는 60.0이에요. n을 늘리면 목표가 한쪽으로만 가는 건 아니네요?
김민준
6km에서 시계가 남은 시간을 24.5분으로 봤는데 실제로는 8km까지 12분이 걸렸고 8km에서 12분이 남았다고 했으니, 6km의 예측이 조금 길었던 거예요. 어느 지점의 예측을 믿느냐에 따라 목표가 오르내려요.
이서연
n이 커질수록 실제로 달린 구간이 늘고 시계의 예측에 기대는 부분이 줄어. n = 5면 예측이 하나도 없고 이번 경기의 운, 그러니까 마지막 2km에서 다리에 쥐가 난 것까지 다 들어가.
선생님
그래요. 실제 구간이 늘면 시계의 버릇은 덜 섞이고 이번 경기의 운은 더 섞여요.
김민준
학기 중 성적 예측을 중간고사 뒤에 고칠지, 기말 과제까지 보고 고칠지랑 같네요.
정리 (가) n = 1: 11.5 + 47.0 = 58.5, n = 2: 59.5, n = 3: 60.5, n = 4: 60.0, n = 5: 61.0(실제 기록). (나) 실제로 겪은 구간을 더 많이 담고 예측을 덜 믿으므로, 예측의 편향은 줄고 이번 한 번의 운(분산)은 더 섞인다. 목표가 n에 따라 한쪽으로만 움직이지는 않는다.
문제 11. 같은 에피소드, 다른 n
일곱 칸 랜덤 워크에서 칸의 값이 참값(k/8)이라 하자. 에피소드는 4 → 5 → 6 → 5 → 4 → 5 → 6 → 7 → 오른쪽 끝(보상 1)이다. (가) 첫 스텝(칸 4, 시점 0)의 n스텝 목표를 n = 1, 2, 3, 4, 8에 대해 구하시오. (나) 칸 4의 참값은 0.5다. 어느 목표가 0.5에서 가장 멀고, 왜 그런가? (다) 시점 6(칸 6)의 목표는 n = 1, 2, 3에서 각각 얼마인가? 위젯 수치판의 마지막 줄은 n을 바꿀 때마다 (가)의 목표를 보여 준다.
선생님
서연 학생, (가)의 목표들을 적어 볼까요.
이서연
보상이 끝에만 있으니까 n스텝 목표는 n스텝 뒤 칸의 값이에요. n = 1이면 칸 5의 0.625, n = 2면 칸 6의 0.75, n = 3이면 다시 칸 5의 0.625, n = 4면 칸 4의 0.5, n = 8이면 에피소드가 끝나서 리턴 1이에요.
선생님
민준 학생, 참값을 쓰는데도 목표가 0.5가 아니네요?
김민준
참값을 쓰니까 다 0.5가 나와야 하는 거 아니에요? 계산이 틀린 것 같아요.
선생님
n = 4의 목표는 0.5였어요. 그때 말은 어디에 있었죠? n = 2일 때는요?
김민준
n = 4일 때는 마침 칸 4로 돌아와 있었고, n = 2일 때는 칸 6에 가 있었어요.
선생님
그럼 참값 0.5는 이 목표들과 무슨 관계예요?
김민준
목표는 n스텝 뒤에 말이 어디 있느냐에 달려 있으니까 에피소드마다 달라요. 참값을 쓰면 평균이 0.5가 될 뿐이고요.
선생님
(나)에서 0.5에서 가장 먼 건요?
김민준
n = 8이요. 0과 1 둘 중 하나라 가장 멀어요.
이서연
(다)는 시점 6이면 끝까지 두 스텝 남았으니까 n = 1은 칸 7의 0.875, n = 2와 3은 n스텝 안에 끝나니까 그냥 리턴 1이야.
선생님
그래요. 참값을 써도 n스텝 목표는 n스텝 동안의 운만큼 흔들려요. n이 길수록 그 운이 커지고요.
이서연
확률 과정의 마팅게일이랑 같아요. 참값은 다음 값의 평균일 뿐이고, 한 번의 경로는 얼마든지 오르내려요.
정리 (가) 0.625, 0.75, 0.625, 0.5, 1. (나) n = 8의 리턴 1이 가장 멀다. 참값을 써도 목표는 n스텝 뒤 말이 있는 칸에 따라 달라지고, n이 길수록 그 사이의 운이 더 많이 섞인다. 참값은 목표들의 평균이다. (다) n = 1: 0.875, n = 2와 3: 1(에피소드가 n스텝 안에 끝나 리턴과 같다).
문제 12. 300토큰 뒤의 점수가 첫 토큰에 닿기까지
300토큰짜리 정답 응답의 끝에서 보상 1을 받는다(그 밖의 보상 0, γ = 1). 가치 모델이 표처럼 앞부분마다 따로 값을 적는다고 하자(실제 신경망은 비슷한 앞부분끼리 값을 나눠 쓰지만 여기서는 무시한다). 처음 값은 모두 0, 학습률은 1이다. 같은 응답을 되풀이해 학습하고, 한 번 훑는 동안에는 훑기 전의 값으로 목표를 셈한다. (가) 한 스텝 시간차로는 몇 번 훑어야 첫 토큰의 값이 0에서 벗어나는가? (나) n = 50이면? n = 300이면? (다) 그러면 n을 늘 크게 두면 되는가?
선생님
민준 학생, 한 스텝 시간차는 몇 번 훑어야 할까요?
김민준
학습률이 1이면 한 번에 덮어쓰니까 한 번이면 되지 않을까요?
선생님
첫 번째 훑기에서 첫 토큰의 목표는 무엇이죠? 그때 둘째 토큰의 값은 얼마였나요?
김민준
둘째 토큰의 값이 아직 0이라 목표도 0이에요.
선생님
그럼 첫 훑기에서 값이 바뀌는 토큰은 어디죠?
김민준
끝의 보상을 바로 받는 마지막 토큰뿐이에요. 훑을 때마다 한 토큰씩 앞으로 오니까… 300번이네요. 스크립트로 돌려도 300번이었어요.
선생님
(나)는요? 서연 학생.
이서연
n = 50이면 한 번에 50토큰씩 오니까 300 / 50 = 6번, n = 300이면 첫 토큰의 목표가 곧바로 끝의 보상이라 1번이야. 일곱 칸 길에서 에피소드를 끝 스텝부터 거꾸로 훑으면 1이 한 번에 처음 칸까지 흘러오는 것처럼 빨라.
선생님
그래요. (다)는요?
이서연
n = 300은 몬테카를로랑 같아요.
선생님
몬테카를로 목표는 무엇에 약했죠?
이서연
운이요. 이 응답이 운 좋게 맞은 거라도 모든 토큰이 그 운을 그대로 받아요. 응답이 매번 다르면 분산이 커지고요. 소식이 빨리 가는 것과 운이 덜 섞이는 것 사이에서 n을 골라야 해요.
김민준
공지를 반장이 한 줄씩 옆 사람에게 전하면 끝까지 가는 데 오래 걸리고, 전체 문자로 보내면 빠르지만 잘못된 공지도 그대로 다 퍼지는 거랑 같네요.
정리 (가) 300번. 한 스텝 시간차는 보상의 소식을 훑을 때마다 한 토큰씩 앞으로 옮긴다. (나) n = 50이면 6번, n = 300(몬테카를로)이면 1번. (다) 아니다. n이 크면 소식은 빨리 가지만 응답 하나의 운이 모든 토큰의 목표에 섞이므로, 긴 응답에서 n은 소식이 첫 토큰에 닿는 데 드는 훑기 수와 목표의 분산 사이에서 고른다.