택시 MDP는 운전사가 지금 어느 구역에 있는지만 알면 다음을 셈할 수 있다고 두었고, 오늘 몇 번째 손님인지, 아침에 어느 구역을 돌았는지는 보지 않았다. 정말 그래도 될까? 실제 운전사는 「오늘은 손님 여덟 명만 태우고 들어간다」고 정해 두기도 하는데, 그런 날에는 같은 역에 서 있어도 첫 손님 앞과 여섯째 손님 앞의 처지가 같을 리 없다.
여덟 명이면 퇴근하는 하루
두 가지 하루를 견줘 보자. 하나는 지금까지처럼 손님을 내려 줄 때마다 1/10 확률로 퇴근하는 하루이고, 다른 하나는 손님 여덟 명을 태우면 퇴근하는 하루다. 두 하루 모두 운전사는 늘 배회한다. 하루를 수만 번 모의실험해, 운전사가 역에 있을 때 그날 앞으로 받을 요금 합의 평균을 손님 순번별로 모았다.
여덟 명이면 퇴근하는 하루에서는 같은 역인데도 첫 손님 앞에서 41.51, 여섯째 손님 앞에서 15.83이다. 남은 손님이 여덟 명이냐 세 명이냐가 앞날을 바꾸는데, 「역」이라는 정보에는 그것이 들어 있지 않다. 1/10 확률로 퇴근하는 하루에서는 51.80과 51.86으로 표준오차(모의실험을 다시 하면 평균이 달라지는 정도를 잰 표준편차. 각각 0.19, 0.23) 안에서 같다. 이 하루에서는 이미 몇 명을 태웠든 앞으로 이어질 손님 수의 확률이 똑같기 때문인데, 동전을 다섯 번 던져 뒷면만 나왔어도 다음 동전의 앞면 확률이 그대로인 것과 같다.
두 하루의 차이가 「지금만 보면 된다」는 가정이 무엇을 요구하는지 보여 준다. 지금 상태를 알 때 다음 상태와 보상의 확률이 그 이전의 상태와 행동에 더는 기대지 않으면, 그 상태는 마르코프 성질 (지금이 과거를 다 대신한다 / Markov property)을 가진다고 한다.
마르코프 성질은 세상의 성질이 아니라 무엇을 상태로 잡았느냐의 성질이다. 여덟 명이면 퇴근하는 하루에서 구역 하나는 마르코프 상태가 아니지만, (구역, 남은 손님 수)를 한 상태로 잡으면 다시 마르코프 상태가 된다. 다음 구역은 지금 구역과 행동으로 정해지고 남은 손님 수는 하나 줄어들 뿐, 그 밖에 과거에서 가져올 것이 없다. 대가는 상태의 수로, 구역 셋이 3 × 8 = 24가지 상태로 늘어난다. 상태를 고를 때는 앞날에 필요한 것을 빠짐없이 넣되, 필요 없는 것까지 넣어 상태의 수를 늘리지 않는 사이에서 줄을 탄다.
ML에서: 언어 모델의 상태는 늘 마르코프다
언어 모델의 상태를 「프롬프트 + 지금까지 쓴 토큰 전부」로 잡으면, 그 상태는 정의부터 마르코프 성질을 가진다. 과거가 전부 상태 안에 들어 있으니 상태 밖에 남은 과거가 없다. 상태가 엄청나게 크다는 것이 대가이고, 언어 모델은 그 큰 상태를 신경망 하나로 받아 다음 토큰 분포를 그때그때 계산한다.
마르코프 성질이 깨지는 곳은 모델이 보는 입력과 상태가 갈라질 때다. 대화가 문맥 창보다 길어져 앞부분을 잘라 내거나, 모델이 다루는 바깥 세상(파일, 웹 페이지, 다른 사람)의 일부만 보일 때다. 그때 모델이 받는 입력은 앞날을 셈하기에 모자란 요약이 되는데, 어떤 정보를 상태에 남겨야 하는지가 아래 문제 6이다.
문제 4: 커피 도장 카드
동네 카페는 커피 한 잔에 도장 하나를 찍어 주고, 도장 10개를 모으면 다음 잔을 무료로 준다. 서연은 도장이 7개 있다. (가) 하루 한 잔씩 산다면 무료 잔까지 며칠 남았는지 알려면, 지난 한 달 영수증이 모두 필요한가? (나) 카페가 규칙을 바꿔 「도장은 찍은 날로부터 30일이 지나면 하나씩 지워진다」로 했다. 이제도 도장 개수 하나로 충분한가?
선생님
민준 학생, (가)에 무엇이 필요하죠?
김민준
영수증을 다 보고 언제 몇 잔 샀는지 세야죠. 확실하게 하려면요.
선생님
영수증을 다 세고 나면 손에 남는 숫자는 무엇이죠? 무료 잔까지의 셈에 그 숫자 말고 쓰이는 게 또 있나요?
김민준
세고 나면 「도장 7개」예요. 남은 날은 10 − 7 = 3일이고, 영수증에서 그것 말고 더 쓸 게 없네요.
선생님
그래요. (나)는요?
이서연
이제는 같은 7개라도 다르죠. 7개를 모두 어제 찍었으면 30일 동안 안 지워지고, 7개 가운데 셋이 29일 전에 찍혔으면 내일 셋이 지워져요.
김민준
그럼 도장마다 찍은 날짜가 필요하네요. 개수 하나로는 다음 날 도장이 몇 개일지 안 정해져요.
선생님
영수증 전부가 필요한가요?
이서연
아니요, 지워지지 않은 도장의 날짜만 있으면 돼요. 30일이 지난 영수증은 다시 볼 일이 없으니까요. 규칙이 과거의 무엇을 묻느냐에 따라 들고 다닐 요약의 칸이 정해지네요.
김민준
학점 계산기에 이번 학기 평점만 넣으면 졸업 평점이 안 나오고, 들은 학점 수까지 넣어야 하는 거랑 같아요.
정리 (가) 도장 개수 하나면 충분하다(남은 날 3일). (나) 도장마다 찍은 날짜(지워지지 않은 것만)가 있어야 한다. 「지금만 보면 된다」가 맞는지는 상태에 무엇을 담았느냐에 달려 있고, 규칙이 바뀌면 담을 것도 바뀐다.
문제 5: 여덟 명이면 퇴근하는 날
운전사가 손님 여덟 명을 태우면 퇴근하고, 늘 배회한다. 배회할 때 이번 손님의 기대 보상은 역 5.50, 시장 4.50, 대학가 5.60이고, 역에서 배회하면 다음 구역의 확률은 (역 0.6, 시장 0.3, 대학가 0.1)이다. (가) 역에 있고 남은 손님이 1명일 때와 2명일 때, 앞으로 받을 요금 합의 기댓값을 구하시오. (나) 이번에는 1/10 확률로 퇴근하는 하루다. 지금 손님을 내려 준 뒤로 적어도 3명을 더 태울 확률은, 아침 첫 손님 뒤와 열다섯째 손님 뒤에 각각 얼마인가?
선생님
(가)에서 민준 학생은 무엇을 먼저 떠올렸어요?
김민준
역에 있다는 건 같으니까 둘 다 같은 값이어야 할 것 같았어요. 역의 가치 하나요.
선생님
남은 손님이 1명이면 앞으로 받을 것은 무엇이죠?
김민준
이번 손님 하나뿐이니까 5.50 이요.
선생님
2명이면 무엇이 더 붙죠?
김민준
이번 5.50 에 다음 손님이 더해지는데, 다음 손님은 어느 구역에서 태우느냐에 따라 달라요. 0.6 × 5.50 + 0.3 × 4.50 + 0.1 × 5.60 = 5.21 이니까 합이 10.71 이요.
김민준
같은 역인데 두 배 가까이 다르네요.
이서연
그러니까 「역」만으로는 상태가 모자라. (역, 남은 손님 1명)과 (역, 남은 손님 2명)이 다른 상태여야 해.
선생님
(나)는요? 서연 학생.
이서연
열다섯째 손님 뒤라면 이미 평균(10명)보다 많이 태웠으니까, 이제 곧 퇴근할 차례라 확률이 작을 것 같아요.
선생님
손님을 내려 줄 때마다 퇴근할 확률은 몇 번째 손님이냐에 따라 달라지나요?
이서연
아니요, 늘 1/10 이에요. 그럼 다음 세 손님 뒤에 모두 퇴근하지 않을 확률은 0.9³ = 0.729 로, 첫 손님 뒤든 열다섯째 손님 뒤든 같아요. 「이제 끝날 차례」라는 건 없네요.
선생님
그래서 이 하루에서는 구역 하나로 상태가 충분했어요. 끝나는 확률이 과거를 기억하지 않으니까요.
김민준
룰렛에서 빨강이 다섯 번 나왔으니 이번엔 검정이라고 거는 거랑 같은 실수였네요.
정리 (가) 남은 1명 5.50, 남은 2명 5.50 + 5.21 = 10.71. 같은 구역이라도 남은 손님 수가 앞날을 바꾸므로 (구역, 남은 손님 수)가 마르코프 상태다. (나) 둘 다 0.9³ = 0.729. 손님마다 같은 확률로 끝나는 하루는 지나온 손님 수를 기억하지 않으므로 구역 하나로 충분하다.
문제 6: 잘려 나간 대화
(가) 언어 모델이 최대 256개 토큰까지만 쓰도록 정해 두고 응답을 생성한다. 「프롬프트 + 지금까지 쓴 토큰」은 여전히 마르코프 상태인가? 남은 토큰 수는 어디에 들어 있나? (나) 어느 대화 앱은 모델에 마지막 4,096개 토큰만 넣는다. 사용자가 대화 첫머리에 자기 이름을 말했고, 대화가 5,000개 토큰으로 길어졌다. 「마지막 4,096개 토큰」은 이 대화의 마르코프 상태인가? 무엇을 고치면 되는가?
선생님
(가)부터요. 민준 학생은 어떻게 봤어요?
김민준
아니라고 봤어요. 256개 제한은 문장 안에 적혀 있지 않은 규칙이잖아요. 아까 택시의 「여덟 명이면 퇴근」처럼 숨은 숫자가 생긴 거죠.
선생님
택시에서는 몇 번째 손님인지가 「역」이라는 상태 어디에도 없었어요. 여기서는 몇 번째 토큰인지가 상태 어디에 있죠?
김민준
지금까지 쓴 토큰이 상태에 다 들어 있으니까 세면 나와요. 남은 개수는 256 에서 그걸 빼면 되고요. 상태가 과거 전부라서 길이도 그 안에 있네요. 그럼 마르코프예요.
선생님
그래요. (나)는요?
이서연
대화가 5,000개면 5,000 − 4,096 = 904개가 잘려 나가요. 이름은 첫머리에 말했으니까 그 904개 안에 있고요.
선생님
이름이 잘려 나간 게 다음 토큰을 고르는 데 문제가 될 때가 있을까요?
이서연
음… 다음에 「제 이름 기억하세요?」가 오면요. 답이 이름에 달려 있는데, 모델이 받는 4,096개만 보고는 이름을 알 수 없어요.
이서연
앞날에 쓰일 과거가 입력 밖에 남았으니 마르코프 상태가 아니에요.
선생님
고치려면 무엇을 넣어야 할까요? 지난 대화 전부를 넣을 수는 없다면요.
김민준
잘려 나가는 부분에서 앞으로 쓰일 것만 뽑아 요약해서 늘 앞에 붙여 두면 돼요. 이름, 사용자가 정한 조건 같은 것들이요. 아까 도장 날짜만 들고 다닌 것처럼요.
이서연
무엇이 앞으로 쓰일지 미리 알 수 없다는 게 어렵네. 커피 도장은 규칙이 정해져 있었는데, 대화는 다음에 무슨 질문이 올지 모르니까.
선생님
그 어려움 때문에 요약을 남기는 방법 자체가 따로 연구되고 있어요. 오늘은 「입력이 앞날에 쓰일 과거를 다 담고 있는가」를 묻는 눈만 가져가요.
정리 (가) 마르코프 상태다. 지금까지 쓴 토큰이 모두 상태에 있으므로 쓴 개수와 남은 개수(256 − 쓴 개수)가 상태에서 읽힌다. (나) 아니다. 잘려 나간 904개 토큰에는 앞날에 쓰일 정보(이름)가 있다. 잘려 나가는 부분에서 앞으로 쓰일 것을 요약해 입력에 남기면 그 요약까지 합친 입력이 상태 구실을 한다.