Chapter 6: 시간차 학습: 끝까지 기다리지 않고 예측으로 예측을 고친다
의문
가치함수는 「이 상태에서 정책을 따르면 앞으로 받을 보상 합(리턴)의 평균」이다. 가치를 재는 가장 곧은 길은 그 상태에서 에피소드를 끝까지 여러 번 돌려 리턴을 평균 내는 것이었다. 기댓값을 직접 셈할 수 없을 때 샘플을 뽑아 평균 내는 몬테카를로 추정을 가치에 그대로 쓴 것이다. 이 방법은 한 번 재는 데 에피소드 하나를 끝까지 기다려야 하고, 한 번의 리턴이 크게 흔들려 많이 돌려야 한다.
다른 길도 있었다. 가치는 「지금 받는 보상 + 다음 상태 가치」의 평균으로 쪼개진다(벨먼 기대 방정식). 벨먼 기대 방정식을 쓰면 끝까지 기다릴 필요가 없다. 다만 「다음 상태 가치의 평균」을 셈하려면 다음 상태가 어디로 갈지의 확률, 곧 전이 확률
전이 확률을 모르는 채 겪어 보면서 가치를 배워야 한다면, 에피소드가 끝날 때까지 기다리는 수밖에 없을까?
기다리지 않는다면 결과 대신 무엇을 목표로 삼고, 그 목표가 틀렸다면 무슨 일이 생길까?
이 장은 두 물음에 답한다. 한 스텝 뒤의 예측을 목표로 삼는 학습, 그 학습이 치르는 값, 그 학습의 한가운데 있는 오차, 그리고 한 스텝과 끝까지 사이를 잇는 법이다.
시간차 학습: 다음 예측을 목표로 삼는다
토요일에 비가 올지를 월요일부터 날마다 예보하는 사람을 떠올려 보자. 월요일 예보가 잘 맞았는지는 토요일이 되어야 안다. 그런데 화요일에 새 구름 사진을 보고 예보를 크게 올렸다면, 토요일을 기다리지 않아도 「월요일의 예보가 너무 낮았던 것 같다」는 것은 화요일에 이미 알 수 있다. 결과가 아니라 다음 날의 예보와 견줘서 오늘의 예보를 고칠 수 있을까, 고친다면 무엇을 얻고 무엇을 잃을까?
역사: 체커 프로그램의 「델타」에서 토요일 비 예보까지
나중의 예측으로 지금의 예측을 고친 프로그램 가운데 가장 이른 예로 꼽히는 것은 IBM 의 아서 새뮤얼(Arthur Samuel)이 만든 체커(서양 장기의 한 가지) 프로그램이다. 새뮤얼은 1959년 『IBM 연구개발 저널(IBM Journal of Research and Development)』에 「Some Studies in Machine Learning Using the Game of Checkers」를 실었다. 프로그램은 판면마다 점수를 매기는 다항식을 갖고 있었고, 그 다항식의 계수를 스스로 고쳤다. 새뮤얼은 프로그램을 두 선수로 나눠 맞붙였다. 수마다 계수를 고쳐 가는 선수를 알파(Alpha), 한 판 동안 같은 다항식을 쓰는 선수를 베타(Beta)라 불렀고, 알파가 이기면 알파의 다항식을 베타에게 넘겼다. 알파는 수를 둘 때마다 앞 차례에 매겼던 판면 점수와, 지금 판면에서 몇 수 앞을 읽어 끌어올린 점수를 견줬다. 새뮤얼은 두 점수의 차이를 「델타(delta)」라 불렀다. 델타가 양수면 앞 판면을 너무 낮게 봤다는 뜻이므로, 앞 판면 점수를 올리는 데 기여한 항의 무게를 늘렸다.
이 생각을 일반적인 예측 문제로 정리한 사람이 리처드 서튼(Richard Sutton)이다. 1988년 『머신러닝(Machine Learning)』 3권에 실린 「Learning to Predict by the Methods of Temporal Differences」의 서론에 토요일 비 예보가 나온다. 흔한 방법은 날마다의 예보를 토요일의 실제 날씨와 견주고, 서튼의 방법은 날마다의 예보를 다음 날의 예보와 견준다. 월요일에 50%, 화요일에 75%를 예보했다면 서튼의 방법은 월요일 같은 날의 예보를 올리고, 흔한 방법은 토요일의 실제 날씨에 따라 올릴 수도 내릴 수도 있다. 서튼은 시간적으로 잇따르는 두 예측의 차이로 배우는 이런 방법들을 시간차(temporal difference, TD) 방법이라 부르고, 새뮤얼의 체커 프로그램을 가장 이르고 가장 잘 알려진 쓰임으로 꼽았다. 논문 요약에서 그는 실제 예측 문제 대부분에서 시간차 방법이 기억과 한 번에 드는 계산이 적으면서 더 정확한 예측을 낸다고 적었다.
서튼이 그 주장을 보이려고 고른 예가 가장 단순한 움직이는 세계, 양 끝이 막힌 랜덤 워크(무작위로 한 칸씩 걷는 길)다. 서튼의 랜덤 워크는 칸이 A부터 G까지 일곱 개였다. 말은 늘 가운데 D에서 출발해 반반의 확률로 왼쪽이나 오른쪽으로 한 칸 가고, 양 끝 A나 G에 닿으면 끝난다. G에서 끝나면 결과가 1, A에서 끝나면 0이다. 안쪽 다섯 칸 B~F의 참값(오른쪽 끝에서 끝날 확률)은 1/6, 2/6, …, 5/6이다.
일곱 칸 랜덤 워크
이 장 내내 쓸 예제를 서튼의 랜덤 워크를 본떠 만들자. 서튼의 랜덤 워크보다 안쪽 칸을 둘 늘려, 칸 1부터 7까지 일곱 칸이 늘어서고 양 끝에 왼쪽 끝과 오른쪽 끝이 있다. 말은 칸 4에서 출발해 동전을 던져 앞면이면 오른쪽, 뒷면이면 왼쪽으로 한 칸 가고, 오른쪽 끝에 들어가는 스텝에서만 보상 1을 받는다(그 밖의 스텝은 보상 0). 할인은 하지 않는다(
왜 하필 이 랜덤 워크일까? 정책이 고를 것이 없으니 가치를 배우는 일 하나만 남고, 참값을 손으로 셈할 수 있어 학습한 값이 얼마나 틀렸는지 잴 수 있다. 칸
모든 칸의 값을 0.5로 두고 시작해, 에피소드 하나(난수 씨앗 3)를 걸어 보자. 말은 4 → 5 → 6 → 5 → 4 → 5 → 6 → 7을 거쳐 오른쪽 끝에 닿았고, 받은 보상은 마지막 스텝의 1뿐이다.
몬테카를로 방법은 지나온 칸마다 그 뒤로 실제로 받은 리턴을 목표로 삼는데, 이 에피소드에서는 지나온 모든 칸의 리턴이 1이다. 각 칸의 값을 목표 쪽으로 학습률
다른 방법은 에피소드가 끝나기를 기다리지 않는다. 한 스텝 가서 받은 보상에 도착한 칸의 지금 값을 더한 것을 목표로 삼아, 스텝마다 곧바로 고친다. 칸 4에서 칸 5로 간 첫 스텝의 목표는 0 +
두 식은 대괄호 안의 목표만 다르다. 몬테카를로는 실제 리턴
시간차 학습은 칸 7 하나만 0.55로 고쳤다. 다른 칸들은 목표가 「0 + 옆 칸의 값 0.5」라서 처음 값 0.5와 같았기 때문에 움직이지 않았다. 몬테카를로는 지나온 칸 4, 5, 6, 7을 모두 1 쪽으로 올렸고, 두세 번 지난 칸은 더 많이 올렸다. 칸 4의 참값은 0.5인데도 0.595로 올라간 것은 이번 에피소드가 운 좋게 오른쪽으로 끝났기 때문이다.
한 에피소드만으로는 어느 쪽이 나은지 알 수 없다. 에피소드 100개를 차례로 겪게 하고, 일곱 칸의 값이 참값에서 얼마나 떨어져 있는지를 RMS 오차(칸마다의 차이를 제곱해 평균 낸 뒤 제곱근)로 쟀다. 에피소드 100개를 겪는 이 학습을 서로 다른 난수로 100번 되풀이해 평균 냈다(처음 값 0.5에서 RMS 오차는 0.250).
| 방법 | 에피소드 10 뒤 | 25 뒤 | 50 뒤 | 100 뒤 | |
|---|---|---|---|---|---|
| 시간차 | 0.05 | 0.202 | 0.146 | 0.082 | 0.035 |
| 시간차 | 0.10 | 0.163 | 0.081 | 0.043 | 0.052 |
| 시간차 | 0.15 | 0.131 | 0.049 | 0.061 | 0.068 |
| 몬테카를로 | 0.01 | 0.225 | 0.187 | 0.149 | 0.100 |
| 몬테카를로 | 0.02 | 0.211 | 0.155 | 0.124 | 0.093 |
| 몬테카를로 | 0.04 | 0.198 | 0.138 | 0.136 | 0.126 |
두 방법에서 저마다 가장 나은 학습률끼리 비교하면 시간차 학습이 더 빨리 내려간다(가장 작은 학습률끼리는 몬테카를로 0.04가 시간차 0.05보다 에피소드 25개까지 조금 낮지만, 100개 뒤에는 0.126과 0.035로 크게 뒤진다). 에피소드 25개 뒤 시간차 학습(
아래 위젯에서 두 학습률을 따로 밀어 보자. 위 그림은 한 줄의 학습에서 칸마다의 값이 에피소드마다 어떻게 바뀌는지를, 아래 그림은 100줄 평균의 오차 곡선을 보여 준다.
ML에서: 가치 모델의 목표값
언어 모델에서 가치는 「여기까지 쓴 풀이에서 결국 맞힐 확률」이었다. 이 가치를 매번 이어 쓰기로 재지 않으려면, 프롬프트와 지금까지 쓴 토큰을 받아 숫자 하나를 내는 모델(가치 모델, 비평가)을 따로 학습한다. 응답 하나를 생성해 끝의 점수를 받으면, 그 응답의 앞부분마다 학습 목표를 정해야 한다. 끝의 점수를 모든 앞부분의 목표로 쓰면 몬테카를로이고, 한 토큰 뒤 앞부분에 대한 가치 모델 자신의 예측을 목표로 쓰면 시간차 학습이다. 가치 모델은 순전파 한 번으로 응답의 모든 앞부분에 대한 예측을 내므로, 시간차 목표에 드는 추가 계산은 거의 없다. 두 목표가 실제로 어떻게 다른 값을 주는지는 아래 문제 3에서 셈한다.
문제 1. 토요일 비 예보는 언제 고치나
예보관이 월요일부터 금요일까지 날마다 「이번 토요일에 비가 올 확률」을 발표했다. 월 0.5, 화 0.6, 수 0.3, 목 0.4, 금 0.8. 토요일에는 비가 왔다(1). (가) 토요일 날씨를 목표로 삼는 방법에서 월요일 예보와 수요일 예보의 오차(목표 − 예보)는 얼마인가? (나) 다음 날의 예보를 목표로 삼는 방법에서는? (다) 이번 주 토요일의 비가 운이 따른 결과였을 수도 있다면, 두 방법 가운데 어느 쪽 오차가 그 운을 더 많이 담고 있나?







정리 (가) 월요일 +0.5, 수요일 +0.7. (나) 월요일 +0.1, 수요일 +0.1. (다) 결과를 기다리는 방법(몬테카를로 쪽)인데, 그 오차에는 그날 뒤에 벌어진 모든 일의 운이 섞인다. 다음 날 예보를 믿는 방법(시간차 쪽)은 하루치의 운만 담는 대신, 다음 날 예보가 한쪽으로 틀리는 편향을 그대로 물려받는다.
문제 2. 학습률의 두 끝
일곱 칸 랜덤 워크에서 모든 칸의 값을 0.5로 두고, 에피소드 4 → 5 → 6 → 5 → 4 → 5 → 6 → 7 → 오른쪽 끝(보상 1)을 겪는다. (가) 학습률
















정리 (가) 칸 7 하나만 1로 바뀐다. 나머지 칸의 목표는 「0 + 옆 칸의 값 0.5」라 값이 처음 값 0.5에서 바뀌지 않는다. (나) 지나간 칸 4, 5, 6, 7이 모두 1이 된다. 시간차 학습은 보상의 소식을 한 스텝씩 뒤로 옮기므로, 훑는 순서가 소식이 얼마나 멀리 가는지를 정한다. (다) 1. 학습률 1의 몬테카를로는 에피소드 하나의 리턴을 그대로 값으로 쓰므로 운에 따라 0과 1을 오간다. 학습률은 여러 에피소드의 목표를 얼마나 섞어 평균할지를 정한다.
문제 3. 가치 모델의 두 목표
수학 문제에 언어 모델이 다섯 토큰짜리 응답을 썼다. 가치 모델은 응답의 다섯 앞부분(첫 토큰을 쓰기 전, 첫 토큰 뒤, …, 넷째 토큰 뒤)에 대해 「결국 맞힐 확률」을 0.40, 0.50, 0.45, 0.60, 0.80으로 예측했다. 응답은 정답이었다(끝에 보상 1, 그 밖에는 0,














정리 (가) 몬테카를로 목표 1, 1, 1, 1, 1. 시간차 목표 0.50, 0.45, 0.60, 0.80, 1. (나) 몬테카를로 0.70, 0.75, 0.725, 0.80, 0.90. 시간차 0.45, 0.475, 0.525, 0.70, 0.90. 정답 응답에서도 다음 예측이 내려간 자리는 값이 내려간다. (다) 몬테카를로 목표는 모두 0이 되어 0.20, 0.25, 0.225, 0.30, 0.40. 시간차는 마지막 목표만 0으로 바뀌어 마지막 예측만 0.40이 되고 앞의 넷은 정답일 때와 같은 0.45, 0.475, 0.525, 0.70이다. 결과의 운이 몬테카를로에서는 모든 자리에, 시간차에서는 결과 바로 앞 자리에만 들어간다.