이 강의의 목표는 다음 토큰 예측으로 언어 구조를 배우는 법을 아주 기초부터 이해하는 것입니다.
먼저 오늘의 핵심 식을 봅니다.
L=−t∑logP(xt∣x<t)
이 식을 외우기 전에, 식 안의 말과 기호를 먼저 하나씩 풀어야 합니다.
| 말 |
뜻 |
| 토큰 xt |
텍스트를 나눈 작은 조각, t번째 조각 |
| x_ |
t번째 토큰 앞에 있는 모든 토큰 |
| P(xt∣x<t) |
앞 문맥이 주어졌을 때 정답 토큰의 확률 |
| pretraining |
큰 데이터로 먼저 학습하는 단계 |
| loss L |
정답을 낮게 예측할수록 커지는 값 |
| perplexity |
손실을 지수로 바꾼, 모델의 헷갈림 정도 |
| scaling law |
크기와 성능 관계의 경험 법칙 |
수학에서 어려운 부분은 계산보다 읽기입니다. 뜻을 모르고 계산하면 공식이 암호처럼 보입니다.
문장을 읽다가 다음 단어를 맞히는 게임을 엄청나게 많이 한다고 생각합시다. 이 단순한 게임을 큰 데이터로 반복하면 문법과 지식, 패턴을 함께 배우게 됩니다.
모델은 매 자리에서 다음 토큰의 확률분포를 내놓습니다. 그중 실제 정답 토큰에 준 확률이 P(xt∣x<t)입니다. 예를 들어 "나는 밥을 먹었다"라는 세 토큰을 봅니다. 앞 문맥을 보고 모델이 정답 토큰에 준 확률이 다음과 같다고 합시다.
P(x1)=0.5,P(x2∣x1)=0.4,P(x3∣x<3)=0.8
확률은 0과 1 사이라 로그를 취하면 음수입니다.
log0.5≈−0.693,log0.4≈−0.916,log0.8≈−0.223
로그확률을 모두 더하면 음수입니다. 앞에 마이너스를 붙여 양수 손실로 바꿉니다.
L=−(log0.5+log0.4+log0.8)=−(−0.693−0.916−0.223)=1.832
정답 확률이 1에 가까우면 log가 0에 가까워 손실이 작아지고, 정답 확률이 0에 가까우면 log가 음의 무한대로 가 손실이 커집니다. 즉 이 식은 "정답을 얼마나 자신 있게 맞혔는가"를 하나의 숫자로 잰 것입니다.
문장 전체의 확률은 조건부확률의 곱으로 씁니다(연쇄법칙).
P(x1,…,xT)=t∏P(xt∣x<t)
좋은 모델은 실제로 나온 문장에 높은 확률을 주는 모델입니다. 그래서 이 곱, 즉 우도(likelihood)를 가장 크게 만드는 파라미터를 찾고 싶습니다. 곱은 다루기 어려우므로 로그를 씌웁니다. 로그는 증가함수라 최댓값 위치를 바꾸지 않습니다.
logt∏P(xt∣x<t)=t∑logP(xt∣x<t)
이 로그우도를 최대로 만드는 것은, 부호를 뒤집은 값을 최소로 만드는 것과 같습니다.
θmaxt∑logP⟺θmin(−t∑logP)=θminL
따라서 핵심 식 L을 줄이는 학습은 곧 문장의 우도를 키우는 최대우도추정과 같은 일입니다. 또한 각 자리의 손실 −logP(xt∣x<t)는 정답 분포(정답 토큰만 1)와 모델 예측 분포 사이의 교차엔트로피(cross-entropy)와 정확히 같습니다.
다음 토큰 하나를 맞히는 과제는 사소해 보이지만, 잘 맞히려면 그 앞 문맥을 제대로 이해해야 합니다. "물이 얼면 ___"의 빈칸을 맞히려면 물의 성질을 알아야 하고, "철수가 사과를 먹었다. 그래서 그는 ___"를 이어가려면 대명사가 누구인지 추적해야 합니다. 즉 다음 토큰 예측이라는 단일 목표 안에 문법, 상식, 논리, 지식이 모두 필요합니다.
그래서 큰 데이터에서 이 단순한 손실 L만 줄여도, 모델은 부수적으로 언어의 여러 구조를 함께 배웁니다. 별도의 정답 라벨을 사람이 붙이지 않아도 텍스트 자체가 정답을 품고 있어(자기지도학습), 사실상 무한에 가까운 데이터를 쓸 수 있습니다. 이 강의에서는 pretraining을 "다음 토큰이라는 하나의 오라클로, 라벨 없이 언어 전체를 배우는 단계"로 이해합니다.
- 텍스트를 토큰으로 나눈다.
- 앞 토큰들 x<t를 입력으로 넣는다.
- 다음 토큰 확률분포를 예측한다.
- 정답 토큰의 손실 −logP(xt∣x<t)를 계산한다.
- 많은 데이터에서 손실 L을 줄이도록 반복 학습한다.
이 순서를 말로 설명할 수 있으면, 공식을 완전히 외우지 않아도 다시 만들어 낼 수 있습니다.
손실 L은 로그 단위라 감이 잘 오지 않습니다. 그래서 토큰당 평균 손실을 지수로 되돌린 값을 함께 씁니다. 이것이 perplexity입니다.
PPL=exp(TL)
여기서 T는 토큰 수입니다. 앞 예제에서 L=1.832, 토큰 수 T=3이므로 토큰당 평균 손실은 1.832/3≈0.611입니다.
PPL=exp(0.611)≈1.84
perplexity는 "모델이 다음 토큰을 고를 때 평균 몇 개의 후보 사이에서 헷갈리고 있는가"로 읽습니다. 값이 1이면 항상 정답을 확신하는 것이고, 값이 클수록 헷갈리는 것입니다. 만약 어휘 V개 중 아무것도 모르고 균등하게 찍는다면 각 확률이 1/V라 손실이 logV가 되고, perplexity는 exp(logV)=V가 됩니다. 즉 perplexity는 "실질적으로 몇 개 중에서 고르는 수준인가"를 뜻합니다.
경험적으로 모델 파라미터 수 N을 키우면 손실이 매끈한 거듭제곱 꼴로 줄어드는 것이 관찰되었습니다.
L(N)≈(NNc)α
여기서 Nc와 지수 α는 데이터에서 맞춘 상수입니다(α는 보통 0.1 근처의 작은 양수). 이 식의 쓸모는, 작은 모델 몇 개를 학습해 Nc,α를 추정해 두면, 훨씬 큰 모델을 실제로 돌리기 전에 손실을 미리 예측할 수 있다는 점입니다.
예를 들어 α=0.1일 때 파라미터를 10배 키우면 손실은 다음 비율로 줄어듭니다.
L(N)L(10N)=(101)0.1≈0.794
즉 10배 키워도 손실은 약 21%만 줄어듭니다. 거듭제곱 법칙은 "키울수록 좋아지지만 점점 더 많은 자원이 필요하다"는 수확 체감을 정량으로 말해 줍니다. 실제 scaling law는 파라미터 수뿐 아니라 데이터 양과 연산량에 대해서도 비슷한 꼴로 세워지며, 한정된 예산을 모델 크기와 데이터에 어떻게 나눌지 정하는 데 쓰입니다.
문제: 어떤 두 토큰 문장에서 모델이 정답 토큰에 준 확률이 0.25, 0.5입니다. 손실 L과 perplexity를 구하라.
풀이:
L=−(log0.25+log0.5)=−(−1.386−0.693)=2.079
토큰당 평균 손실은 2.079/2≈1.040입니다.
PPL=exp(1.040)≈2.83
정답 확률이 낮을수록 손실과 perplexity가 커집니다. 만약 두 토큰을 각각 확률 0.9, 0.9로 잘 맞혔다면 L=−2log0.9≈0.211, PPL =exp(0.105)≈1.11로 훨씬 작아집니다.
- 오늘 배운 핵심은 다음 토큰 예측으로 언어 구조를 배우는 법입니다.
- 각 항 −logP(xt∣x<t)은 정답 토큰의 로그확률에 마이너스를 붙인 것입니다.
- L을 줄이는 것은 문장의 우도를 키우는 최대우도추정과 같고, 교차엔트로피 최소화와도 같습니다.
- perplexity =exp(L/T)는 손실을 헷갈림 정도로 바꾼 값입니다.
- scaling law L(N)≈(Nc/N)α는 크기와 손실의 관계를 거듭제곱으로 예측합니다.
- 핵심 식은 다음과 같습니다.
L=−t∑logP(xt∣x<t)
- L을 줄이는 것이 왜 최대우도추정과 같은가?
- 교차엔트로피와 이 손실은 어떤 관계인가?
- perplexity 값이 크다는 것은 무슨 뜻인가?
- scaling law는 모델 설계에 어떻게 쓰이는가?