LLM은 어떻게 문장을 만드는가: 다음 토큰 예측의 원리

대규모 언어 모델이 글을 생성하는 과정을 다음 토큰 예측이라는 하나의 원리로 설명합니다. 자기회귀 생성, 프롬프트의 역할, 같은 질문에 다른 답이 나오는 이유까지 다룹니다.

이 글의 목차

챗봇에 질문을 던지면 사람이 쓴 것 같은 문장이 돌아옵니다. 이 과정이 어떤 원리로 이루어지는지는 겉으로 드러나지 않기 때문에, 모델이 질문의 의미를 파악하고 답을 찾아 정리해 준다고 생각하기 쉽습니다. 실제 동작은 그보다 훨씬 단순하면서도, 그 단순함이 여러 특성과 한계를 그대로 설명해 줍니다.

대규모 언어 모델(LLM, Large Language Model)이 하는 일은 근본적으로 "지금까지의 글 다음에 올 조각 하나를 고르는 것" 입니다. 이 동작을 수없이 반복해 문장과 문단이 만들어집니다. 답을 미리 계획하고 쓰는 것이 아니라, 한 조각씩 이어 붙이는 방식입니다.

이 글에서는 언어 모델이 확률을 학습한다는 것이 무슨 뜻인지, 그 확률로 어떻게 글이 만들어지는지, 그리고 이 구조 때문에 생기는 특성들을 차례로 설명합니다. 개별 모델의 사양이나 성능 비교는 다루지 않습니다. 여기서 다루는 원리는 모델이 바뀌어도 그대로 유지되는 부분입니다.

언어 모델은 확률 분포를 학습합니다

언어 모델을 한 문장으로 정의하면 "앞의 텍스트가 주어졌을 때 다음에 올 토큰의 확률 분포를 계산하는 함수" 입니다. 토큰(token)은 모델이 텍스트를 다루는 최소 단위로, 단어보다 작을 때가 많습니다. 자세한 내용은 토큰과 토크나이저에서 다룹니다.

"오늘 날씨가 정말"이라는 입력이 들어오면, 모델은 어휘 사전에 있는 모든 토큰 각각에 대해 "이것이 다음에 올 확률"을 계산합니다. 결과는 이런 형태가 됩니다.

좋   0.31
춥   0.14
더   0.11
맑   0.08
...
고래 0.0000002

중요한 것은 모델이 "좋다"라는 답을 고른 것이 아니라, 가능한 모든 토큰에 대한 점수표를 한 번에 만들어 냈다는 점입니다. 이 점수표를 만드는 것이 모델이 학습한 전부입니다.

이 능력은 방대한 텍스트로 훈련하면서 얻어집니다. 학습 과정에서 모델은 문장의 일부를 보고 다음 토큰을 맞히는 연습을 반복하고, 틀릴 때마다 내부 파라미터를 조금씩 조정합니다. 이 과정을 충분히 반복하면 문법, 사실 관계, 문체, 추론 패턴 같은 것들이 파라미터 안에 통계적 규칙으로 자리 잡습니다. 학습 단계의 구분은 사전학습·파인튜닝·정렬에서 더 자세히 설명합니다.

다음 토큰 하나를 고르는 일의 반복

확률 분포를 얻었다면 그중 하나를 실제로 골라야 합니다. 그리고 고른 토큰을 입력 끝에 붙여서 같은 과정을 다시 실행합니다. 이렇게 자기 출력을 다시 입력으로 쓰는 방식을 자기회귀 생성(autoregressive generation) 이라고 합니다.

자기회귀 생성 루프프롬프트가 모델에 들어가 다음 토큰의 확률 분포가 나오고, 토큰 하나를 고른 뒤 그 토큰을 입력 끝에 붙여 같은 과정을 반복하는 순환 구조입니다.프롬프트모델다음 토큰확률 분포토큰 선택고른 토큰을 입력 끝에 붙여 처음부터 다시
그림 1. 모델은 토큰 하나를 고를 때마다 전체 입력을 다시 처리합니다.

여기서 눈여겨볼 점이 있습니다. 모델은 매번 전체 입력을 처음부터 다시 처리합니다. 앞서 무슨 말을 했는지 기억하는 별도의 저장소가 있는 것이 아니라, 지금까지의 대화 전체가 매번 입력으로 다시 들어가는 것입니다. 대화가 길어질수록 처리량이 늘고 비용이 오르는 이유가 여기에 있습니다.

생성이 멈추는 것도 같은 원리입니다. 모델은 "이제 끝"을 뜻하는 특별한 토큰을 출력할 수 있고, 이 토큰이 나오면 생성이 종료됩니다. 또는 지정한 최대 토큰 수에 도달하면 문장 중간이라도 잘립니다. 답변이 어중간하게 끊긴다면 대개 후자입니다.

참고

모델은 답변 전체를 미리 만들어 두고 한 글자씩 보여 주는 것이 아닙니다. 화면에 글자가 하나씩 나타나는 스트리밍은 실제로 그 순간에 계산이 진행되고 있다는 뜻입니다.

프롬프트는 명령이 아니라 조건입니다

이 구조를 이해하면 프롬프트의 역할이 달라 보입니다. 프롬프트는 모델에게 내리는 명령이 아니라, 다음 토큰의 확률 분포를 결정하는 조건입니다. "친절한 상담원처럼 답해 줘"라고 쓰면 모델이 그 지시를 이해하고 따르는 것이 아니라, 그런 문맥 뒤에 이어질 법한 토큰들의 확률이 높아지는 것입니다.

결과만 보면 둘은 비슷해 보이지만, 차이는 실패할 때 드러납니다. 지시가 길고 복잡할수록, 또는 학습 데이터에서 보기 드문 형태일수록 모델은 조건을 일관되게 반영하지 못합니다. 같은 요청이라도 표현을 바꾸면 결과가 달라지는 것도 이 때문입니다. 효과적인 작성법은 프롬프트 설계에서 다룹니다.

역할 지시(system prompt)가 대화 앞쪽에 놓이는 것도 같은 이유입니다. 앞에 놓인 텍스트가 이후 모든 토큰의 조건이 되기 때문입니다.

왜 같은 질문에 다른 답이 나오는가

확률 분포에서 토큰을 고르는 방법은 한 가지가 아닙니다. 가장 확률이 높은 토큰을 항상 고를 수도 있고, 확률에 비례해 무작위로 뽑을 수도 있습니다. 후자를 샘플링(sampling) 이라고 하며, 대부분의 서비스가 기본적으로 사용합니다.

무작위성을 넣는 이유는 품질 때문입니다. 항상 1위 토큰만 고르면 같은 표현이 반복되고 문장이 단조로워지는 경향이 있습니다. 적당한 무작위성은 자연스러운 문장을 만듭니다. 대신 같은 입력에 같은 출력이 보장되지 않습니다.

이 무작위성의 정도를 조절하는 값이 temperature이고, 후보 범위를 자르는 방식이 top-p와 top-k입니다. 각 값의 의미와 실무 기본값은 temperature와 top-p에서 설명합니다.

주의

재현성이 필요한 작업(테스트, 분류, 데이터 추출)에서는 무작위성을 최소로 낮춰야 합니다. 그래도 완전한 재현은 보장되지 않는 경우가 있으므로, 출력 검증 단계를 따로 두는 편이 안전합니다.

"이해한다"는 말의 함정

모델이 문맥을 파악하고 의도를 반영하는 것처럼 보이는 것은 사실입니다. 어텐션 구조 덕분에 앞부분의 특정 단어를 참조해 뒤를 결정할 수 있고, 이 메커니즘은 트랜스포머 구조에서 자세히 다룹니다. 이것을 "문맥을 처리한다"고 부르는 데는 무리가 없습니다.

다만 사람이 쓰는 의미의 "이해"와 같다고 단정하기는 어렵습니다. 모델에게는 사실을 조회하는 데이터베이스가 없고, 자신이 아는 것과 모르는 것을 구분하는 별도의 장치도 기본적으로는 없습니다. 아는 내용을 말할 때와 지어낼 때 모델 내부의 동작은 크게 다르지 않습니다. 둘 다 "그럴듯한 다음 토큰"을 고르는 일이기 때문입니다.

이것이 환각이 구조적으로 발생하는 이유입니다. 모델은 거짓말을 하는 것이 아니라, 사실 여부를 판단하는 기능 자체가 생성 과정에 포함되어 있지 않은 것입니다.

이 구조에서 나오는 특성들

다음 토큰 예측이라는 원리 하나로 여러 현상이 설명됩니다.

현상 원인
대화가 길어지면 느려지고 비싸진다 매번 전체 입력을 다시 처리하기 때문
같은 질문에 답이 달라진다 확률 분포에서 무작위로 샘플링하기 때문
없는 사실을 자신 있게 말한다 사실 검증이 생성 과정에 없기 때문
최근 사건을 모른다 학습 시점 이후 데이터가 파라미터에 없기 때문
계산 문제를 틀린다 계산을 수행하는 것이 아니라 답처럼 보이는 토큰을 잇기 때문
답을 길게 쓰라고 하면 품질이 오르기도 한다 중간 과정도 토큰으로 생성되어 이후 예측의 조건이 되기 때문

마지막 항목은 특히 실용적입니다. 모델에게 "단계별로 생각해 보라"고 요청하면 결과가 나아지는 경우가 있는데, 이는 중간 추론 과정이 출력으로 나오면서 그 자체가 다음 토큰의 조건이 되기 때문입니다. 생각할 공간을 텍스트로 확보해 주는 셈입니다.

흔한 오해

"모델이 인터넷을 검색해서 답한다." 기본적으로는 아닙니다. 검색 결과를 참조하는 것은 별도의 검색 기능이 붙어 있을 때뿐이고, 그 구조가 RAG 파이프라인입니다. 순수한 언어 모델은 학습 시점까지의 내용이 파라미터에 녹아 있을 뿐입니다.

"대화 내용을 기억한다." 모델 자체는 상태를 저장하지 않습니다. 이전 대화가 이어지는 것처럼 보이는 것은 서비스가 지난 대화를 매번 입력에 다시 넣어 주기 때문입니다. 입력 한도를 넘으면 앞부분이 잘리거나 요약되며, 그때 "앞에서 한 말을 잊어버리는" 현상이 나타납니다.

"확률이 높은 답 = 정확한 답." 확률은 "학습 데이터에서 이런 문맥 뒤에 자주 나왔는가"를 반영할 뿐 사실성과 직접 연결되지 않습니다. 널리 퍼진 오해는 높은 확률로 재생산될 수 있습니다.

정리

  • 언어 모델은 앞 텍스트를 조건으로 다음 토큰의 확률 분포를 계산하는 함수입니다.
  • 토큰 하나를 고르고 입력에 붙여 다시 처리하는 과정을 반복해 문장이 만들어집니다(자기회귀 생성).
  • 매번 전체 입력을 다시 처리하므로 대화가 길어질수록 비용과 지연이 늘어납니다.
  • 프롬프트는 명령이 아니라 확률 분포를 바꾸는 조건이며, 표현이 달라지면 결과도 달라집니다.
  • 샘플링의 무작위성 때문에 같은 질문에도 다른 답이 나오며, 필요하면 이 값을 낮출 수 있습니다.
  • 생성 과정에 사실 검증 단계가 없다는 점이 환각의 구조적 원인입니다.

참고 자료

  • #LLM
  • #언어 모델
  • #토큰