혼동하기 쉬운 점과 요약
토론 1. α를 검증 글로 고르면
n-그램 표에서 α = 1과 α = 0.01을 검증 글로 재 보고 0.01이 낫다고 골랐다. 그 0.01로 잰 검증 글의 바이트당 비트 1.2817을 이 표의 실력으로 발표해도 되는가?

7-그램을 발표한다면 몇 비트라고 적겠어요?

1.2817이요. 둘 중에 좋은 걸 고르는 거니까요.

그런데 0.01을 고른 근거가 검증 글 점수잖아. 검증 글을 보고 고른 다음 같은 검증 글로 점수를 매기면, 그 글에 맞춘 거 아냐?

둘 중 하나 고른 것뿐인데 그게 그렇게 큰일이야?

α를 두 개 말고 백 가지 시험해서 가장 좋은 걸 골랐다면요?

백 개 중에는 이 검증 글에 우연히 잘 맞는 것도 있겠네요. 그럼 그 점수는 새 글에서보다 좋게 나올 거고요.

학습 글로 표를 세고, 검증 글로 α를 고르고, 마지막 점수는 둘 다 안 쓴 글로 매겨야 해. 시험 문제를 미리 보고 공부한 점수가 실력이 아닌 것처럼.

그래요. 이 장의 α 두 개는 검증 글을 보고 고르지 않았고 결과를 나란히 적었을 뿐이지만, 둘 가운데 하나를 「골라서」 실력이라고 내세운다면 고르는 데 쓰지 않은 글로 다시 재야 해요.
혼동하기 쉬운 점
| 혼동하기 쉬운 생각 | 나온 문제 | 바로잡는 법 |
|---|---|---|
| 거의 다 맞히면 한 번 틀린 확률 0은 괜찮다고 봄 | 1 | −log 0은 무한대라 평균 전체가 무한대가 된다. 세지 못한 이어짐에도 α로 작은 확률을 남긴다 |
| α를 바꾸면 모든 모델의 점수가 크게 바뀐다고 봄 | 2 | 수만 번 센 행에서는 α가 거의 티가 나지 않는다. α가 움직이는 것은 몇 번 세지 못한 행이다 |
| 첫 손실은 클수록 「아직 배울 게 많다」는 정상 신호라고 봄 | 3 | 아무것도 모르는 모델의 손실은 ln V 근처다. 그보다 크면 틀린 글자에 확률을 몰아 준 것이니 초기화부터 본다 |
| 퍼플렉서티 9.81이면 자리마다 후보가 열 개라고 봄 | 4 | 놀람의 평균을 후보 수로 되돌린 값이다. 「q」 다음처럼 후보 하나인 자리와 수십 개인 자리가 섞여 있다 |
| 바이트당 비트가 낮은 언어를 더 잘 맞힌다고 봄 | 5 | 한국어는 글자 하나가 2.4바이트라 같은 놀람이 나뉘어 적힌다. 언어끼리는 같은 내용의 바이트 수부터 다르다 |
| 낱말 표도 글자 표와 같은 방법으로 재면 된다고 봄 | 5 앞 본문 | 검증 글에 처음 보는 낱말(0.1587%)이 있어 낱말 표는 무한대를 낸다. 무엇이든 적을 수 있는 단위가 필요하다 |
| 나올 수 있는 문맥을 다 세려면 글을 더 모으면 된다고 봄 | 6 | 문맥 수는 앞 글자 수에 대해 거듭제곱으로 늘어 글 모으는 속도를 앞지른다 |
| 앞을 더 보면 언제나 더 잘 맞힌다고 봄 | 7 | 진짜 확률이면 그렇지만, 세어서 얻은 표는 행마다 센 수가 줄어 어긋난다. 1MB 에서는 6-그램이 4-그램보다 나빴다 |
| 검증 글로 고른 설정의 검증 점수를 그대로 실력으로 낸다 | 토론 1 | 고르는 데 쓴 글의 점수는 그 글에 맞춘 점수다. 마지막 점수는 고르는 데 쓰지 않은 글로 잰다 |
요약
처음 보는 동화의 실제 다음 글자에 루나가 준 확률을 p라 하면, 그 글자에 놀란 정도는 −log₂ p비트이고 검증 글 전체의 평균이 크로스 엔트로피다. 학습 손실은 같은 값을 nat 로 잰 것이고, 아무것도 모르는 모델의 첫 손실은 ln V 근처에서 시작한다. 표가 세지 못한 이어짐에 확률 0을 주면 평균이 무한대가 되므로, 칸마다 α를 더해 작은 확률을 남긴다.
nat 를 ln 2로 나누면 비트이고, 2의 비트 제곱이 퍼플렉서티다. 퍼플렉서티는 놀람을 「매번 몇 개의 똑같이 그럴듯한 후보 가운데서 고르는 것만큼」의 후보 수로 되돌린 값이다. 맞히는 단위가 다른 모델은 놀란 비트의 합을 원래 글의 바이트 수로 나눈 바이트당 비트로 비교한다. 타이니스토리즈 검증 글에서 고른 분포는 8비트, 유니그램은 4.4150비트, 바이그램은 3.2940비트(퍼플렉서티 9.81)였다.
앞 글자를 더 보는 n-그램은 앞 다섯 글자쯤까지 놀람을 크게 줄여, α = 0.01의 7-그램이 1.2817비트까지 내려갔다. 그러나 문맥의 가짓수가 거듭제곱으로 늘어 행마다 센 수가 줄고, α = 1의 7-그램이나 1MB 로 센 6-그램처럼 앞을 더 보는데 오히려 나빠지는 표가 생긴다. 표는 비슷한 문맥끼리 아무것도 나눠 쓰지 못한다.
막힌 곳
앞 여섯 글자는 「Once upon a time」의 「upon a」 정도다. 동화 앞에 나온 이름을 기억해 뒤에서 다시 부르려면 수십, 수백 글자 앞을 봐야 하는데, 표로는 여섯 글자만 늘려도 학습 글이 모자랐다. 바이트 대신 더 큰 조각으로 글을 자르면 같은 표로 더 먼 앞을 볼 수 있을까? 그리고 「Lily saw a 」에서 배운 것을 「Lucy saw a 」에 나눠 쓰려면, 문맥을 표의 행 번호 말고 무엇으로 나타내야 할까?
루나 설정서 점검
서연은 설정서 첫째 줄 옆의 「옹알이」를 지우고 「3.29비트 → 1.28비트(7-그램)」라고 고쳐 적었다. 민준은 그 아래에 작게 「Lu」를 다시 써 넣었다.
| 설정서의 줄 | 이번 장 | 아직 빈 것 |
|---|---|---|
| 1. 말이 된다 | 「얼마나 말이 되나」를 바이트당 비트로 잰다. 바이그램 3.2940, 7-그램 1.2817 | 낱말과 문장. 표를 키우면 학습 글이 모자란다 |
| 2. 앞에서 한 말을 기억한다 | 앞 여섯 글자까지 본다 | 동화 앞에 나온 이름을 기억하기에는 턱없이 짧다 |

옛 루나는 어제 한 말도 기억했는데, 우리 루나는 여섯 글자 전이 한계네.

어제 한 말은 욕심이라고 했잖아. 일단 여섯 글자보다 멀리.