동화 쓰는 작은 GPT: 게이밍 GPU 한 장으로 17분
옹알이에서 동화까지: 체크포인트마다 샘플
손실 곡선은 루나가 얼마나 잘 맞히는지를 숫자 하나로 보여 주지만, 무엇을 먼저 배웠는지는 알려 주지 않는다. 학습 중간중간 남긴 체크포인트에서 같은 시작 문장 「Once upon a time」, 같은 온도 0.8, 같은 씨앗으로 샘플을 뽑아 나란히 놓으면 그 순서가 보인다. 아래는 train_tinystories.out 에서 그대로 옮긴 것이다(줄 바꿈은 \n 으로 적었고, 길면 「…」로 줄였다).
--- 샘플: 0 스텝 뒤
[1] Once upon a time sad� there haircut fier vegetables butterfly stourpnderRsyound rodeit pony sold picking really nam olive water cartoon …
--- 샘플: 50 스텝 뒤
[1] Once upon a time, the there was a vegetables with his,nder. Heound named Tom and said, "I have a were very friend, "IBob stop. …
--- 샘플: 200 스텝 뒤
[1] Once upon a time, there was a little girl named Lily. Lily was Lily loved to play with her friends. One day, Lily found a big box in the box. …
[2] … One day, Lily and Lily saw a little girl named Mia went to the park. … Lily and Lily and Lily wished she could not find her friends come. …
--- 샘플: 500 스텝 뒤
[1] Once upon a time, there was a little girl named Lily. She loved to learn new things. One day, Lily went for a walk in the park. She saw a big tree with lots of trees. …
--- 샘플: 2000 스텝 뒤
[1] Once upon a time, there was a smooth hill. On top of the hill, there was a little dog named Spot. Spot lived in a big yard with lots of brothers. He loved to play and run all day long. …
--- 샘플: 14000 스텝 뒤
[2] Once upon a time, there was a little girl named Lucy. She had a pretty scarf that her mom gave her. Lucy loved her scarf very much.\nOne day, Lucy was playing outside in the cold. She wore her scarf and it was very cold. Her friend, Tim, saw her scarf and felt envious. He wanted a scarf too. …
학습 전(0 스텝)의 루나는 어휘 4,096 개에서 토큰을 거의 아무렇게나 꺼낸다. 낱말 조각이 붙어 「stourpnderRsyound」 같은 덩어리가 생기고, 그 사이에 「vegetables」, 「butterfly」 같은 낱말이 섞인다. 50 스텝 뒤에는 쉼표, 따옴표, 「named Tom and said」 같은 짧은 낱말 이음이 나오지만 문장은 아직 이어지지 않는다. 200 스텝 뒤에는 「Once upon a time, there was a little girl named Lily.」라는 첫 문장이 한 번에 나온다. 학습 글의 60% 가 「Once upon a time」으로 시작하고 Lily 가 열 편에 한 편 넘게 나오니, 가장 흔한 첫 문장을 가장 먼저 배운 것이다. 다만 이름을 너무 아껴서 「Lily and Lily and Lily」가 된다.
500 스텝(1,638만 토큰)에서는 문장 하나하나가 문법에 맞고, 「Lily went for a walk in the park」처럼 사건이 시작된다. 「a big tree with lots of trees」처럼 앞뒤가 어긋난 곳은 남아 있다. 2,000 스텝의 샘플은 언덕 위의 개 Spot 을 소개하고 Spot 의 하루를 이어 가며, 끝의 14,000 스텝에서는 엄마가 준 스카프, 추운 날, 스카프를 부러워하는 친구 Tim 까지 이야기의 앞뒤가 이어진다.

개발 블로그에 올라왔던 시험판 루나도 이랬겠네. 「오늘의 날씨는 고양이입니다」에서 시작해서.

그 루나는 몇 달 걸렸다며. 우리 루나는 오후 한나절이고.
ML에서: 쉬운 것부터 배운다
샘플이 바뀌는 순서는 손실이 줄어드는 순서와 맞물린다. 처음 몇백 스텝에 손실이 8 근처에서 2 정도로 떨어질 때 루나는 낱말과 흔한 이음을 배우고, 그 뒤 손실이 천천히 줄어드는 긴 구간에서 이름을 이어 쓰고 사건을 끝맺는 법을 배운다. 맞히기 쉬운 것, 곧바로 손실을 크게 줄여 주는 것을 먼저 배운다고 짐작할 수 있다. 다만 「쉬운 것부터」는 샘플을 읽고 한 짐작이고, 어떤 능력이 언제 생기는지를 손실 곡선 위에서 재는 방법은 모델 속을 들여다볼 때 다룬다.
문제 4. 체크포인트 샘플로 배운 순서 매기기
위 샘플을 보고 다음 능력이 처음 보이는 스텝을 적어라. (가) 실제 영어 낱말 (나) 「Once upon a time, there was a … named …」 같은 문장 틀 (다) 한 문장 안의 문법 (라) 여러 문장에 걸쳐 같은 인물을 같은 이름으로 부르기 (마) 사건의 원인과 결과(무엇을 해서 무슨 일이 생겼다). 그리고 (라)는 200 스텝에서 이미 보인다고 해야 하는가?

(가)는 0 스텝부터 보여요. vegetables, butterfly, pony 가 있으니까요.

학습 전 모델이 낱말을 안다고 할 수 있을까요?

아, 그건 토크나이저 덕이네요. 어휘에 vegetables 가 토큰 하나로 들어 있으니 아무 토큰이나 뽑아도 낱말이 나와요. 모델이 배운 건 아니에요. 낱말이 제자리에 오는 건 50 스텝, 「named Tom and said」부터요.

(나)는 200 스텝, (다)는 500 스텝이요. 500 스텝 샘플은 문장마다 문법이 맞아요. (마)는 14,000 스텝의 「스카프를 보고 부러워서 자기도 갖고 싶었다」가 분명하고요.

마지막 물음은요? 200 스텝에서도 Lily 는 여러 문장에 계속 나와요.

같은 이름이 계속 나오긴 하는데, 「Lily and Lily and Lily」는 인물을 이어 부른 게 아니라 Lily 라는 토큰을 많이 쓴 것뿐이잖아요. 200 스텝 루나는 이야기와 상관없이 Lily 를 가장 흔한 이름으로 아는 거고요.

2,000 스텝의 Spot 은 달라. 첫 문장에서 지은 이름을 계속 쓰고, Lily 로 새지도 않아.

그래요. 이름이 반복되는 것과 이야기 앞에 나온 인물을 이어 부르는 것은 달라요. 둘을 어떻게 가를 수 있을까요?

Lily 처럼 흔한 이름 말고 학습 글에 한 번도 없는 이름을 넣어 보면 되겠네요. 그 이름을 끝까지 쓰면 앞을 보고 이어 부른 거고요.