혼동하기 쉬운 점과 요약
토론 1. 앞 256 토큰을 다 볼 수 있으면 앞 이야기를 다 기억하는가
작은 GPT 의 문맥 길이는 256 토큰이라서, 이야기 첫 문장에 나온 이름은 200 토큰 뒤에서도 어텐션이 읽을 수 있다. 그러면 이 모델은 앞 256 토큰 안의 이야기를 다 기억한다고 말해도 되는가?

마스크 표에서 마지막 행은 앞 칸이 다 1 이었잖아요. 읽을 수 있으면 기억하는 거죠.

위치마다의 손실 그림을 다시 볼까요? 앞 100 토큰과 앞 250 토큰은 어떻게 달랐죠?

거의 같아요. 1.6 정도에서 평평해요. 100 토큰 넘게 앞은 볼 수는 있는데 맞히는 데 별로 안 쓴다는 거네요.

샘플도 그래. Bounce 는 끝까지 이어 썼지만 친구 이름까지 Bounce 로 썼어. 이름이 있었다는 건 쓰는데, 그 이름이 누구였는지는 구별 못 한 거지.

마스크는 「무엇을 볼 수 있는가」만 정해요. 무엇을 실제로 골라 읽는지는 학습이 정하고요. 볼 수 있는 범위를 넓혀도 모델이 그 범위를 쓰도록 배우지 못하면 손실은 1.6 정도에서 더 내려가지 않아요.

그럼 모델을 키우거나 더 오래 학습하면 평평해지는 자리가 뒤로 밀릴까요?

좋은 물음이에요. 같은 코드로 모델을 키워서 직접 재 보면 알 수 있어요.
혼동하기 쉬운 점
| 혼동하기 쉬운 생각 | 나온 문제 | 바로잡는 법 |
|---|---|---|
| 학습 손실이 낮을수록 좋은 모델이라고 봄 | 1 | 마스크 없이 학습하면 손실은 0.0165 까지 내려가지만 「time time time」만 쓴다. 손실은 학습 때와 같은 조건에서만 뜻이 있다 |
| GPT 가 MLP 보다 문제를 더 많이 풀어서 낫다고 봄 | 2 | 둘 다 스텝당 16,384 문제를 푼다. 다른 것은 문제마다 보는 문맥(평균 128.5 토큰 대 5.94 토큰)이다 |
| 헤드 수를 늘리면 파라미터도 는다고 봄 | 3 | 쿼리·키·값 행렬은 d × 3d 하나이고 헤드는 그 출력을 나눠 쓴다. 층 하나는 12d² + 13d 로 폭만으로 정해진다 |
| 임베딩 공유는 어디서나 비슷한 양을 아낀다고 봄 | 4 | 아끼는 양은 어휘 × 폭이다. 작은 GPT 에서는 24.5%, 동화 GPT 에서는 7.6% 였다 |
| GPT 가 모든 위치에서 고르게 낫다고 봄 | 5 | 차이의 93% 가 앞 32 토큰 넘게 볼 수 있는 위치에서 나왔다. 위치 0 에서는 두 모델이 같다 |
| 볼 수 있는 문맥은 다 쓴다고 봄 | 토론 1 | 작은 GPT 의 손실은 앞 100 토큰쯤부터 평평하다. 마스크는 볼 수 있는 범위만 정한다 |
요약
앞 토큰을 이어 붙이는 MLP 는 창을 넓힐수록 자리마다 가중치가 따로 늘었다. 셀프 어텐션은 쿼리와 키의 내적으로 앞 토큰을 내용에 따라 골라 읽고, 가중치를 모든 위치가 함께 쓴다. 다음 토큰을 맞히는 언어 모델에는 위치 t 가 위치 0~t 만 읽게 하는 마스크를 더한다. 마스크 덕분에 학습 조건이 생성 조건과 같아지고, 256 토큰 조각 하나가 문맥 길이 1~256 의 문제 256 개가 된다. 마스크 없이 학습한 모델은 손실이 0.0165 까지 내려갔지만 글을 쓰지 못했다.
GPT 한 벌은 토큰 임베딩과 위치 임베딩을 더한 벡터에서 출발해, 층마다 「정규화 → 어텐션 → 더하기, 정규화 → MLP → 더하기」를 거친 뒤 마지막 정규화와 출력 행렬로 다음 토큰의 점수를 낸다. 층 하나의 파라미터는 12d² + 13d 이고, 출력 행렬은 토큰 임베딩과 같은 행렬을 쓴다. 이 형태는 래드퍼드와 동료들의 GPT-1(2018)과 GPT-2(2019)를 따른 것이다. 폭 256, 4층, 문맥 256, 파라미터 4,273,664 개인 우리 GPT 는 MLP 언어 모델과 같은 4,000 스텝을 RTX 4090 한 장에서 100초 동안 학습해 바이트당 비트 0.6129 가 되었다(MLP 0.9326). 차이 대부분은 앞 32 토큰 넘게 볼 수 있는 위치에서 나왔다.
루나 설정서 점검
| 설정서의 줄 | 이번 장에서 |
|---|---|
| 1. 말이 된다 | 조금 더. 문장이 대체로 맞고 토끼는 끝까지 hop 한다(바이트당 비트 0.6129). 그러나 Bounce 의 친구도 Bounce 다 |
| 2. 앞에서 한 말을 기억한다 | 볼 수는 있다. 앞 256 토큰이 다 보이고 이름을 이어 쓰지만, 손실은 앞 100 토큰쯤부터 더 줄지 않는다 |

둘째 줄은 연필로 반만 칠해 둘게.

100초 만에 여기까지 왔으면, 모델을 키워서 한 시간 돌리면 어디까지 갈까?
막힌 곳
4층, 폭 256 짜리 GPT 는 학습 글의 12% 가 못 되는 양만 보고 멈췄고, 손실은 마지막 평가까지도 내려가는 중이었다. 같은 코드에서 숫자 다섯 개만 바꾸면 모델은 몇 배로 커지고, 게이밍 GPU 한 장으로도 학습 글 전체에 가까운 양을 읽힐 수 있다. 모델과 학습량을 키우면 Bounce 의 친구는 다른 이름을 얻을까? 그리고 그만큼 키운 모델이라도 동화밖에 읽지 않았다면, 그 모델이 쓰는 글은 어디까지 「말이 된다」고 할 수 있을까?