
LLM은 왜 다음 토큰 하나만 예측할까
- 1LLM은 왜 다음 토큰 하나만 예측할까읽는 중
- 2Transformer는 왜 Q, K, V 셋으로 나눴을까
- 3토큰은 왜 단어가 아닐까
- 4LLM은 왜 가장 확률 높은 토큰을 고르지 않을까
- 5Positional Encoding에서 RoPE까지, 어텐션에 순서를 부여하는 법
지금 나오는 LLM들은 코드를 짜고 번역하고 논리 문제를 풀고 수학 증명의 빈틈을 짚습니다. 이 능력은 한 번의 학습으로 완성되지 않습니다. 웹 텍스트, 코드, 논문, 합성 데이터 등을 배합한 사전학습 위에, 지시를 따르게 하는 파인튜닝과 답의 질을 끌어올리는 강화학습이 차곡차곡 쌓입니다.
그런데 이 모든 것의 토대인 사전학습에서 모델이 푸는 문제는 하나뿐입니다. 텍스트를 읽으면서 매 위치마다 다음에 올 토큰 하나를 맞힙니다. 아키텍처가 바뀌고 파라미터가 수천억 개를 넘기는 동안에도 이 과제는 그대로였고, 지금 프론티어 모델도 여전히 이 방식으로 학습합니다.
왜 하필 다음 토큰 하나였을까요? 누가 취향으로 고른 게 아닙니다. 문장에 확률을 매기겠다고 마음먹는 순간 절반은 수학이 정해주고, 나머지 절반은 그 형태가 글을 쓰는 절차와 그대로 겹친다는 사실이 정해줍니다. 이번 글에서는 거기서부터 시작해, 확률을 직접 세는 방식이 어디서 막혔는지, 신경망이 무엇을 바꿨는지, 그리고 목적함수 하나에서 어떻게 여러 능력이 나왔는지까지 짚어봅니다.
문장에 확률을 매기려면
언어 모델(Language Model)의 정의는 생각보다 좁습니다. 토큰 시퀀스를 받아서 그 시퀀스가 나타날 확률을 돌려주는 함수입니다. 이게 전부고요. 여기서 토큰은 텍스트를 쪼개는 단위로, 단어 하나일 수도 있고 단어의 일부일 수도 있습니다.
생성기가 아니라 채점기처럼 들릴 텐데, 실제로 그렇게 쓰였습니다. 음성 인식기가 “같이 가자”와 “가치 가자” 중 무엇을 들은 건지 결정하지 못할 때, 기계 번역기가 후보 문장 열 개를 놓고 어느 문장이 더 자연스러운지 골라야 할 때, 그 판정을 맡은 부품이 언어 모델이었습니다. 텍스트를 직접 만들어내는 역할은 나중의 일이었고요.
그렇다면 을 통째로 모델링하면 될까요? 안 됩니다. 길이가 제각각인 문장에 하나하나 확률을 매긴 표를 만들어야 하는데, 그런 표는 만들 수가 없습니다. 그래서 확률의 연쇄 법칙(chain rule)으로 쪼갭니다.
는 번째 토큰이고, 조건 자리의 은 그 앞에 나온 토큰 전부입니다(이하 ). 각 항은 “앞을 전부 본 상태에서 다음에 무엇이 올 확률”이고, 결합확률은 이 항들을 곱한 값과 같습니다.
이 식에 가정은 없습니다. 조건부 확률의 정의인 를 반복 적용한 것뿐이라, 어떤 언어든 어떤 분포든 성립합니다.
그러니까 문장 전체에 확률을 매기는 일과 다음 토큰 하나를 예측하는 일은 같은 문제입니다. 남은 건 을 어떻게 구하느냐뿐이고, 이후 수십 년간 연구자들이 이 항 하나에 매달렸습니다.
다만 연쇄 법칙이 정해주는 건 여기까지입니다. 쪼갠다는 것까지는 등식이 강제하지만, 얼마씩 쪼갤지는 강제하지 않습니다. 처럼 두 개씩 묶어도 조건부 확률의 정의를 반복 적용한 것이라 등식은 똑같이 성립합니다.
토큰 하나씩으로 간 이유는 두 가지입니다. 첫째, 조건 자리에 손해가 없습니다. 한 칸씩 나아가면 앞선 토큰이 빠짐없이 조건으로 남습니다. 반면 두 개씩 묶으면 을 정하는 시점에 가 무엇인지 모르는 채로 둘을 한꺼번에 내놔야 하고, 그만큼 쓸 수 있는 조건이 줄어듭니다. 둘째, 이 형태가 글을 쓰는 순서와 그대로 겹칩니다. 프롬프트 뒤를 이어 쓰는 일이 곧 이 분해를 왼쪽부터 따라가는 일이 됩니다.
여러 토큰을 한꺼번에 예측하는 변형이 없지는 않습니다. 그쪽은 학습 신호를 늘리거나 추론을 앞당기려고 예측 대상을 덧붙인 것이고, 확률을 정의하는 축은 여전히 토큰 하나씩입니다.
세는 방식이 무너진 곳
을 추정하는 가장 단순한 방법은 세는 겁니다. 말뭉치(corpus)에서 다음에 가 온 횟수를 세고, 이 나온 전체 횟수로 나눕니다. 대충 만든 규칙이 아닙니다. 최대우도추정(MLE)이 이 상황에서 내놓는 정답이 정확히 이 방식입니다.
그런데 분모가 거의 항상 0입니다. 어휘 크기를 5만으로 잡고 문맥 길이별로 가능한 조합을 세어 보면 바로 알 수 있습니다.
| 문맥 길이 | 가능한 문맥의 수 |
|---|---|
| 2토큰 | 약 |
| 3토큰 | 약 |
| 4토큰 | 약 |
| 10토큰 | 약 |
지금 프론티어 모델이 쓰는 학습 말뭉치가 수십조 토큰, 약 규모입니다. 문맥이 3토큰만 되어도 경우의 수가 말뭉치 전체를 넘어서고, 4토큰이면 수십만 배로 벌어집니다.
이 조합 대부분은 물론 문장이 아닙니다. “사료를 빌렸다 파리에서 그래서” 같은 것들이죠. 문제는 그런 걸 걷어내도 실제로 쓰일 법한 문맥마저 대부분 관측되지 않는다는 데 있습니다.
그래서 문맥을 잘랐습니다. 직전 개만 조건으로 삼는 게 마르코프 가정(Markov assumption)이고, 여기서 n-gram 모델이 나왔습니다.
그렇다고 n-gram을 조악한 임시방편으로만 기억하면 곤란합니다. 2007년 구글의 기계 번역 논문 제목이 “Large Language Models in Machine Translation”이었는데, 거기서 말하는 대형 언어 모델은 웹 텍스트 최대 2조 토큰으로 만든 5-gram 카운트 테이블이었습니다. 데이터를 키울수록 번역 품질이 올라간다는 것도 이때 확인됐습니다. 신경망보다 먼저였습니다.
문맥을 잘라서 잃는 것 말고도, 성격이 다른 한계가 둘 더 있었습니다. 첫째, 희소성은 여전합니다. 문맥을 5토큰으로 잘라도 대부분의 조합은 말뭉치에 없고, 확률 0이 매겨지면 문장 전체 확률이 0이 됩니다. Kneser-Ney를 비롯한 스무딩(smoothing) 기법이 이 빈자리를 메우려고 나왔습니다.
더 근본적인 건 스무딩으로는 손댈 수 없는 문제입니다. 일반화가 없습니다. “고양이가 사료를 먹는다”를 백 번 봐도 “강아지가 사료를 먹는다”의 확률은 올라가지 않습니다. 두 문자열은 표에서 서로 다른 칸을 차지할 뿐이고, 고양이와 강아지가 비슷한 단어라는 정보를 적을 곳이 없습니다. 단어를 원자적 심볼로 다루는 한, 을 몇으로 잡든 이 문제는 남습니다.
신경망이 바꾼 것
2003년 벤지오 연구팀의 “A Neural Probabilistic Language Model”이 이 지점을 정면으로 겨냥했습니다. 논문은 자기가 택한 길을 “차원의 저주와 싸운다(fight the curse of dimensionality)“고 표현했습니다.
방법은 두 가지를 동시에 학습하는 것이었습니다. 각 단어에 분산 표현(distributed representation) 벡터를 하나씩 붙이고, 그 벡터를 입력으로 받아 다음 토큰의 확률 분포를 내놓는 신경망을 얹었습니다. 표에 값을 채우는 대신 함수의 파라미터를 맞추는 쪽으로 문제를 옮긴 겁니다.
효과는 두 방향으로 나타났습니다. 파라미터 수가 문맥 길이에 따라 지수적으로 늘어나지 않습니다. 개 칸 대신 어휘 크기에 비례하는 임베딩 행렬과 신경망 하나면 되고요. 더 중요한 건, 비슷한 단어가 비슷한 벡터를 갖게 되면서 한 문장에서 배운 것이 본 적 없는 문장으로 옮겨간다는 점입니다. 고양이 문장으로 loss를 낮추면 강아지 문장의 확률도 같이 올라갑니다. n-gram 표에서는 일어날 수 없던 일이죠.
참고
임베딩이 “단어의 의미를 담는다”는 설명은 순서가 거꾸로입니다. 임베딩 벡터는 다음 토큰을 맞히려고 학습된 부산물이고, 비슷한 맥락에 등장하는 단어들이 비슷한 벡터를 갖게 된 결과입니다. 의미를 넣어준 적은 없고, 예측에 도움이 되는 방향으로 자리를 잡았을 뿐입니다.
2003년의 모델에도 문맥 창이 고정 길이라는 제약은 남아 있었습니다. RNN이 이 제약을 원리적으로 풀었지만 순차 계산이라 병렬화가 안 되고 먼 곳의 정보가 갈수록 흐려지는 문제가 따라왔습니다. 지금 주류인 Transformer는 두 문제를 한꺼번에 비켜갑니다. 각 위치가 앞선 모든 위치를 직접 참조하니 거리가 멀어져도 정보가 희석되지 않고 위치마다의 계산이 서로를 기다리지 않으니 학습을 통째로 병렬화할 수 있습니다.
분명히 해둘 것이 있습니다. 연쇄 법칙의 등식과 각 항을 정확히 계산할 수 있느냐는 별개의 문제입니다. 실제 모델은 유한한 문맥 창 안의 토큰만 조건으로 받으니, 문맥을 자른다는 점에서는 n-gram과의 차이가 종류가 아니라 정도입니다. 앞에서 본 일반화는 여전히 종류의 차이로 남고요. 다만 그 창이 5토큰이 아니라 수십만에서 백만 토큰 이상이고, 원리적으로는 창 안의 어떤 토큰도 조건에서 빠지지 않습니다. 계산을 아끼려고 일부 레이어에서 창 안의 토큰을 골라 읽는 구현들이 있지만, 그건 정의가 아니라 효율의 문제입니다.
무엇을 최소화하는가
세는 방식이 하던 일도 최대우도추정이었습니다. n-gram에서 지금까지 최대화 대상은 그대로였고, 바뀐 것은 확률을 내놓는 함수의 정체뿐입니다. 목표는 여전히 단순합니다. 학습 말뭉치에 실제로 나온 토큰에 모델이 높은 확률을 주도록 만드는 것, 즉 로그 가능도를 최대화하는 것입니다. 부호를 뒤집어 최소화 문제로 쓰면 이렇습니다.
는 모델 파라미터 전체, 는 학습에 쓴 토큰 수, 는 모델이 내놓는 확률 분포입니다. 각 위치에서 실제로 나온 토큰에 모델이 매긴 확률의 로그를 전부 더하고 토큰 수로 나누고 부호를 뒤집은 값입니다. 정답 토큰에만 1을 주는 분포와 모델 분포 사이의 교차 엔트로피이기도 합니다.
이 값을 그대로 읽기는 불편해서, 보통 지수를 씌워 perplexity로 바꿉니다. perplexity가 20이면 매 위치에서 후보 20개짜리 균등 분포로 찍는 것과 같은 수준의 불확실성이라는 뜻입니다. 작을수록 모델이 다음 토큰 후보를 그만큼 좁게 잡았다는 얘기고요.
예측과 압축은 같은 문제다
확률 인 사건을 최적으로 부호화하면 비트가 듭니다. 그래서 loss를 낮추는 일은 같은 텍스트를 더 적은 비트로 적는 일과 같습니다. 섀넌이 1951년에 영어 텍스트의 엔트로피를 측정할 때 쓴 방법도 사람에게 다음 글자를 맞혀보게 하는 것이었습니다. 예측 능력과 압축 효율이 같은 양이라는 걸 이용한 거죠.
“압축을 잘하니까 이해하는 것이다”라는 주장은 전혀 다른 이야기입니다. 예측과 압축이 같다는 건 정보이론의 결론이지만, 압축과 이해가 같다는 건 아직 보인 적이 없습니다.
왜 양방향이 아닌가
분해에는 방향이 하나 더 열려 있습니다. 을 끝에서부터 쪼개도 등식은 그대로 성립하고, 사실 어떤 순서로 쪼개든 성립합니다. 그런데 지금 쓰는 목적함수는 왼쪽에서 오른쪽으로 하나씩 예측하는 자기회귀(autoregressive) 구조입니다.
2018년 BERT가 다른 길을 택했습니다. 문장 토큰의 15%를 가린 뒤 양쪽 문맥을 함께 보고 맞히는 마스킹 언어 모델링(masked language modeling)인데, 분류 같은 이해 과제에서는 2021년 무렵까지 이쪽이 앞섰습니다.
대신 BERT는 두 가지를 포기합니다. 마스킹 방식은 가려진 토큰들 사이의 의존 관계를 무시하기 때문에, 시퀀스의 결합확률을 정의하지 못합니다. 그리고 고정 비율로 가리는 한 생성 절차가 나오지 않습니다. 자기회귀에서는 토큰을 하나 뽑아 조건에 넣고 다음을 뽑는 것 자체가 그 분포에서 정확하게 표본을 뽑는 절차입니다. BERT의 마스킹에는 여기에 대응하는 것이 없습니다.
마스킹이 원리적으로 생성을 못 한다는 뜻은 아닙니다. 15%에 고정하지 않고 마스킹 비율 전 구간에 걸쳐 학습시키면 전부 가린 상태에서 조금씩 벗겨내는 방식으로 생성이 됩니다. 확산 언어 모델이 이 길로 갔고 서비스되는 제품도 나와 있습니다. 로그 가능도를 직접 최대화하는 대신 그 하한을 최적화하는 구조이고, 프론티어 모델의 자리는 아직 자기회귀가 지키고 있습니다.
스케일과 전이
이 목적함수에는 사람이 만든 라벨이 필요 없습니다. 다음에 올 토큰이 곧 정답이고, 그건 텍스트 자체에 들어 있으니까요. 사람이 붙여줄 것이 없으니 학습 데이터의 상한이 “라벨링 예산”이 아니라 “확보할 수 있는 텍스트의 양”이 됩니다.
물론 라벨이 필요 없기는 카운트 테이블도 마찬가지였습니다. 2조 토큰짜리 5-gram이 그 증거고요. 갈린 지점은 부은 데이터를 무엇이 받아내느냐입니다. 카운트 테이블은 데이터를 부어도 칸이 채워질 뿐, 한 번도 못 본 문맥에는 여전히 답을 못 냅니다. 신경망은 데이터가 늘면 함수 자체가 정교해지고 정교해진 함수는 본 적 없는 문맥에서도 그럴듯한 확률을 냅니다. 앞에서 본 일반화가 규모와 맞물리는 지점이 여기입니다. 커진 것은 파라미터, 학습 데이터, 그리고 그 둘을 감당하는 연산이고, Large는 여기서 붙습니다.
목적함수 하나, 여러 능력
loss를 더 낮추려면 다음 토큰을 더 잘 맞혀야 하는데, 그러기 위해 필요한 지식이 문맥마다 다릅니다.
| 문맥 | 다음 토큰을 맞히려면 |
|---|---|
1 + 1 = |
덧셈 |
프랑스의 수도는 |
사실 관계 |
def add(a, b): return |
파이썬 문법과 변수명 관례 |
추리소설 마지막 장의 범인은 |
300페이지에 걸친 서사 추적 |
목적함수는 하나인데, 그 하나를 잘 풀려면 필요한 능력이 여러 갈래입니다. 조건 자리에 제한이 없으니, 이 과제를 제대로 풀기 위해 모델이 알아야 할 것에도 끝이 없습니다.
2019년 GPT-2는 태스크별 학습 데이터 없이도 독해에서 지도학습 베이스라인에 필적하는 점수를 냈습니다. 하지만 같은 논문에서 요약과 번역 성적은 초라했습니다. 판이 뒤집힌 건 2020년 GPT-3입니다. 예시 몇 개를 프롬프트에 넣는 것만으로도 성능이 크게 올랐고, 태스크마다 모델을 따로 만들던 관행이 이 무렵부터 흔들리기 시작했습니다.
앞에서 언어 모델이 원래 채점기였다고 했는데, 뒤집힌 것이 그 자리이기도 합니다. 음성 인식기와 번역기가 내놓은 후보를 골라주던 부품이 이제 태스크 자체를 떠맡습니다. 채점하던 그 분포에서 표본을 뽑기만 하면 되니, 채점기와 생성기는 애초에 같은 물건이었던 셈입니다.
추론도 마찬가지였습니다. 2022년, 모델이 충분히 크면 프롬프트에 풀이 과정 예시를 넣는 것만으로도 수학 같은 다단계 추론 성능이 크게 올랐습니다. 추론 과제를 따로 학습시킨 적이 없는데 프롬프트만으로 끌어냈습니다. 2025년 DeepSeek-R1-Zero는 여기서 더 나갔습니다. 사람이 작성한 풀이 과정 없이, 정답 여부와 출력 형식만을 규칙으로 채점하는 강화학습에서 모델이 스스로 풀이를 점검하고 되짚는 행동을 만들어냈습니다.
목적함수가 답하지 않는 것
여기까지를 “스케일만 키우면 다 된다”로 축약하면 빠지는 게 있습니다. 사전학습만 마친 모델은 지시를 따르지 않습니다. “이 문서를 요약해줘”를 넣으면 요약 대신 비슷한 질문을 이어 씁니다. 인터넷 텍스트의 분포에서는 그쪽이 더 그럴듯한 이어쓰기니까요.
지시를 따르는 형식 자체는 예시를 모아 학습시키면 풀립니다. 그러나 무엇이 좋은 답인지 같은 판단은 그렇게 풀리지 않습니다. 다음 토큰 예측이라는 목적함수에 “좋다”는 개념이 아예 없기 때문입니다. 2022년 InstructGPT가 이 문제를 붙들었습니다. 지금 제품으로 나오는 모델이 사전학습 다음에 포스트트레이닝을 따로 거치는 이유도 여기 있습니다.
주의
“다음 토큰 예측만으로 충분하다”는 쪽도, “통계적 흉내에 불과하다”는 쪽도 성급합니다. 확립된 것은 두 가지뿐입니다. 목적함수 하나에서 태스크 전이가 일어났다는 것, 그리고 그 목적함수만으로는 사람이 원하는 행동이 나오지 않는다는 것. 이 관찰들이 모델의 이해에 관해 무엇을 말해주는지는 아직 열려 있습니다.
마치며
수십 년의 연구가 하나에 매달린 이유는 그 항이 좁아서가 아니라 조건 자리가 열려 있어서였습니다. 방금 본 것처럼, 그 항을 잘 맞히는 일과 사람이 원하는 답을 내놓는 일이 같지는 않습니다. 이 글이 세울 수 있는 문제 정의는 거기까지입니다.
다음 글에서는 그 확률을 계산하는 함수인 Transformer가 왜 그 구조여야 했는지를 Q, K, V의 정의부터 짚어봅니다.
함께 보면 좋은 글
- Prefill과 Decode로 이해하는 LLM 추론 과정
- 정보이론으로 보는 DL 손실함수: 엔트로피, KL 발산, 교차 엔트로피
- 최대우도추정(MLE)과 적률법(MoM): 추정량을 체계적으로 찾는 두 가지 방법
참고자료
- Speech and Language Processing (3rd ed. draft), Ch.3 N-gram Language Models
- A Neural Probabilistic Language Model (Bengio et al., JMLR 2003)
- Large Language Models in Machine Translation (Brants et al., EMNLP-CoNLL 2007)
- BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding (Devlin et al., 2018)
- Language Models are Unsupervised Multitask Learners (Radford et al., 2019)
- Language Models are Few-Shot Learners (Brown et al., 2020)
- Chain-of-Thought Prompting Elicits Reasoning in Large Language Models (Wei et al., 2022)
- Training language models to follow instructions with human feedback (Ouyang et al., 2022)
- DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning (DeepSeek-AI, 2025)