루나에게 말 걸기: 같은 시작 문장에 왜 매번 다른 이야기가 나올까
혼동하기 쉬운 점과 요약
토론 1. 되풀이가 적을수록 다양하고 좋은 글인가
샘플 20개로 잰 4-토큰 되풀이 비율은 τ = 0.7 이 0.065, τ = 1.5 가 0.001 이었다. 되풀이가 65분의 1로 줄었으니 τ = 1.5 의 글이 더 다양하고 좋은 글이라고 말해도 되는가?

숫자로만 보면 1.5 가 제일 다양해요. 같은 네 토큰 묶음이 거의 다시 안 나오니까요.

같은 표의 평균 놀람 열도 볼까요?

5.851 이요. 0.7 은 0.971 이고… 모델 자신이 「여기에 이게 올 리 없다」고 본 토큰을 여섯 배 넘게 자주 골랐다는 거네요. 샘플도 「Min foc math laughed only few hours」였고요.

그럼 되풀이가 없는 이유가 다양해서가 아니라 말이 안 되는 조합이라서일 수도 있겠다. 엉터리 네 토큰 묶음은 두 번 나오기가 더 어려우니까. 되풀이 비율 하나로는 다양한 글과 엉망인 글을 구별 못 해.

그래서 숫자 둘을 같이 봐요. 되풀이가 적으면서 평균 놀람이 크게 오르지 않는 설정을 찾는 거죠. top-p = 0.9 는 0.041 과 1.268 이었어요.

그래도 1.268 이 적당한지는 숫자만으로 못 정하겠어요. 그 설정에서 탑 쌓는 아이한테 양파를 줬잖아요.

맞아요. 두 숫자는 나쁜 설정을 걸러 내는 데까지 쓰고, 마지막은 샘플을 읽어서 정해요.
혼동하기 쉬운 점
| 혼동하기 쉬운 생각 | 나온 문제 | 바로잡는 법 |
|---|---|---|
| 그리디 선택이 확률이 가장 큰 글을 낸다고 봄 | 1 | 스텝마다 1등을 이어 붙인 글(0.24)보다 첫 토큰에서 버린 글(0.36)이 더 그럴듯할 수 있다. 그리디 선택은 한 스텝 앞만 본다 |
| 시작 문장을 바꾸면 그리디 선택의 글도 끝까지 달라진다고 봄 | 2 | 500 토큰에서는 다섯 시작 문장 모두 이야기가 끝난 뒤 「Lily 와 다친 새」로 모였다. 같은 문맥이면 그리디 선택은 같은 토큰을 고른다 |
| 온도는 1등의 확률만 바꾼다고 봄 | 3, 4 | 온도는 확률을 1/τ 제곱해 다시 나눈다. 순서는 그대로이고, τ = 1.5 에서 girl 이 0.15 로 준 것은 꼬리가 분모에 더해졌기 때문이다 |
| top-k 는 어느 자리에서나 비슷한 양을 남긴다고 봄 | 5 | top-k = 10 이 남기는 확률 합은 「Once upon a」 뒤 1.0000, 「Lily found a」 뒤 0.5306 이다. top-p = 0.9 는 1개에서 166개까지 자리마다 바뀐다 |
| top-p 를 걸면 높은 온도도 안전하다고 봄 | 6 | 우리 코드는 온도를 먼저 걸어 표를 편 뒤 top-p 로 자른다. τ = 1.5 + top-p = 0.9 의 평균 놀람은 4.630 이었다 |
| KV 캐시는 공짜라고 봄 | 7 | 우리 GPT 의 캐시는 토큰 하나당 32,768 바이트, 500 토큰 배치 64 면 1 GB 를 넘는다 |
| KV 캐시를 쓰면 늘 크게 빨라진다고 봄 | 8 | GPU 배치 1 에서는 1.2배였다. 스텝마다 드는 시간의 대부분이 토큰 수와 상관없는 고정 비용이었다 |
| 되풀이가 적을수록 좋은 글이라고 봄 | 토론 1 | τ = 1.5 는 되풀이 0.001 이지만 평균 놀람 5.851 로 문장이 무너졌다. 되풀이 비율과 평균 놀람을 같이 보고 샘플을 읽는다 |
요약
모델은 다음 토큰의 확률표를 내놓을 뿐이고, 표에서 토큰 하나를 고르는 규칙은 생성할 때 우리가 정한다. 늘 1등을 고르는 그리디 선택은 같은 시작 문장에서 늘 같은 글을 쓰고, 우리 모델에서는 이야기가 끝난 뒤 어느 시작 문장에서든 「Lily 와 다친 새」 이야기로 빠졌다. 표대로 뽑되 온도 τ 로 확률을 1/τ 제곱해 다시 나누면 표가 오므라들거나 펴진다. 온도 0.7 은 매끄럽지만 같은 말을 자주 다시 살펴봤고, 1.0 은 다양했지만 이름이 흔들렸으며, 1.5 는 꼬리의 토큰이 뽑혀 문장이 무너졌다(평균 놀람 5.851).
꼬리를 자르는 방법으로 확률이 큰 k 개만 남기는 top-k(팬 팀, 2018)와 확률 합이 p 에 이를 때까지만 남기는 top-p(홀츠먼 팀, 2019)가 있다. top-p 는 표의 형태에 따라 후보 수를 1개에서 166개까지 바꾸었고, top-p = 0.9 의 평균 놀람은 1.268 이었다. 이어 쓰기마다 앞 토큰의 키와 값을 다시 계산하지 않도록 적어 두는 KV 캐시는 RTX 4090 배치 64 에서 8.0배, CPU 에서 3.6배 빨랐지만 GPU 배치 1 에서는 1.2배에 그쳤다.
막힌 곳
루나는 이제 같은 시작 문장에서도 매번 다른 동화를 쓰지만, 이야기 첫 문장에서 들은 이름조차 몇 문장 뒤에는 Minjune, Minjret 으로 바꿔 쓴다. 그런데 그리디 선택으로 쓰게 하면 「Seoyeon」을 끝까지 맞게 쓸 때도 있다. 모델 안의 무엇이 앞에 나온 토큰을 찾아 다시 쓰는 걸까? 그 계산은 확률표를 어떻게 뽑느냐와는 상관없이 표를 만드는 모델 안에서 일어나므로, 답을 찾으려면 이번에는 모델을 열어 봐야 한다.
루나 설정서 점검
온도 0.7 과 top-p 를 쓰자 루나는 같은 시작 문장에서도 매번 다른 동화를 썼다. 서연이 장난삼아 시작 문장 하나를 더 넣었다.
### Luna was a robot who lived on a star station. (온도 0.8, top-p 0.95, 씨앗 2026)
[3] Luna was a robot who lived on a star station. He was very fast and strong. He liked to race with his friends and play with them. … "Hi, I am Luna. I am a robot. I can race. Watch me!" the robot said. …

「Hi, I am Luna.」 자기소개를 했어. 밝고, 빠르고. 다섯째 줄은 이걸로 채운 거 아냐? KV 캐시로 말도 여덟 배 빨라졌고.

말이 빠르다는 게 토큰을 빨리 뽑는다는 뜻이었어? 그리고 여기서 루나는 「He」야. 달리기 시합하는 남자 로봇.

…그건 동화를 너무 많이 읽어서 그래.
| 설정서의 줄 | 이번에 | 남은 것 |
|---|---|---|
| 1. 말이 된다 | 온도 0.7~1.0 과 top-p 0.9 로 매번 다른 동화를 쓴다 | 이야기의 앞뒤가 맞지 않는다(탑을 쌓는데 양파) |
| 2. 앞에서 한 말을 기억한다 | 아직 | 앞에 나온 이름을 Minjune, Minjret, Serelon 으로 바꿔 쓴다 |
| 5. 밝고 말이 빠르다 | 토큰을 쓰는 속도는 배치 64 에서 8.0배 | 「말이 빠르다」는 그런 뜻이 아니라는 서연의 반대 |
서연은 둘째 줄에 밑줄을 그었다.