02-구조
02 · 토큰·임베딩·디코딩 루프 — LLM의 내부 파이프라인
섹션 제목: “02 · 토큰·임베딩·디코딩 루프 — LLM의 내부 파이프라인”한 단계씩 따라가는 생성 루프
섹션 제목: “한 단계씩 따라가는 생성 루프”사용자 입력이 들어와 첫 글자가 출력되기까지, LLM 내부에서는 대략 다음 순서가 일어난다.
- 정규화·전처리(Normalization & Pre-tokenization) — 공백·대소문자·유니코드 정규화 등을 거쳐 텍스트를 다듬는다.
- 토큰화(Tokenization) — BPE 같은 사전 규칙으로 텍스트를 토큰 ID 열로 변환한다.
- 임베딩 조회(Embedding Lookup) — 각 토큰 ID를 고차원 벡터로 바꾼다. 여기에 위치 정보(positional encoding)가 더해진다.
- 트랜스포머 블록 통과(Transformer Stack) — 어텐션과 피드포워드 층이 여러 번 반복되며 벡터들을 갱신한다.
- 로짓(Logits) 산출 — 마지막 층에서 사전(vocabulary) 크기만큼의 점수 벡터가 나온다.
- 소프트맥스(Softmax) — 점수를 확률 분포로 정규화한다.
- 샘플링(Sampling) — 디코딩 전략에 따라 다음 토큰 1개를 고른다.
- 이어붙이기(Append) → 1번으로 — 새로 뽑힌 토큰을 입력 끝에 붙이고 다시 처음부터 반복한다.
이 루프는 응답이 끝났다는 신호 토큰(EOS, end-of-sequence)이 나올 때까지, 혹은 max_tokens 한도에 닿을 때까지 계속된다. “한 글자씩 타자기처럼 흘러나오는 듯 보이는 응답” 의 정체가 바로 이 루프다.
인코더와 디코더, 그리고 GPT 계열의 선택
섹션 제목: “인코더와 디코더, 그리고 GPT 계열의 선택”Sebastian Raschka는 트랜스포머 계열을 세 가지로 정리한다.
원문: “Encoder-Only Models (BERT, RoBERTa) … excel at understanding and classification tasks but don’t generate text autoregressively. Decoder-Only Models (GPT series) mask future positions during self-attention to maintain autoregressive generation.”
의역: “BERT·RoBERTa 같은 인코더 전용 모델은 이해·분류에 강하지만 글을 한 토큰씩 만들어 내지는 않는다. GPT 계열 같은 디코더 전용 모델은 자기 미래 토큰을 가린 채 학습해 한 토큰씩 생성하도록 설계됐다.”
— Sebastian Raschka, Understanding Encoder And Decoder LLMs
Claude·GPT를 포함한 오늘날의 대화형 LLM은 사실상 모두 디코더 전용(decoder-only) 구조다. 미래 토큰을 보지 못하도록 가린(masked) 자기-어텐션을 써서 “지금까지의 토큰만 보고 다음을 예측”하는 학습 신호와 정확히 일치하게 만든다. 이 단순한 일관성이 GPT 계열이 압도한 결정적 이유 중 하나라고 Raschka는 말한다.
확률에서 토큰으로 — 디코딩 손잡이의 실제 효과
섹션 제목: “확률에서 토큰으로 — 디코딩 손잡이의 실제 효과”01장에서 정리한 디코딩 전략은 코드로 보면 한층 손에 잡힌다. Hugging Face 가이드의 GPT-2 예시를 살짝 변형하면 다음과 같다.
from transformers import AutoModelForCausalLM, AutoTokenizer
tok = AutoTokenizer.from_pretrained("gpt2")model = AutoModelForCausalLM.from_pretrained("gpt2", pad_token_id=tok.eos_token_id)inputs = tok("나는 귀여운 강아지와 산책하는 것을 좋아한다.", return_tensors="pt")
# 1) 탐욕 — 결정적이지만 반복되기 쉽다greedy = model.generate(**inputs, max_new_tokens=40)
# 2) 빔 — 상위 5개 가설을 유지beam = model.generate(**inputs, max_new_tokens=40, num_beams=5, no_repeat_ngram_size=2, early_stopping=True)
# 3) Top-p 샘플링 — 자연스러움 강화nucleus = model.generate(**inputs, max_new_tokens=40, do_sample=True, top_k=50, top_p=0.95)같은 모델·같은 입력이라도 2번과 3번의 출력은 톤·길이·창의성이 사뭇 다르다. 모델의 “성격”처럼 느껴지는 것의 상당 부분이 사실은 디코딩 손잡이다. Claude API에서도 같은 원리가 적용되며, 운영 환경에서 응답의 결정성을 높이고 싶다면 temperature=0을, 발산적 브레인스토밍이 필요하면 더 높은 값을 쓰는 것이 첫 번째 손잡이다.
학습은 어떻게 이뤄지나 — 다음 토큰 맞히기 게임
섹션 제목: “학습은 어떻게 이뤄지나 — 다음 토큰 맞히기 게임”LLM의 사전학습(pretraining)은 본질적으로 거대한 빈칸 채우기다. Understanding AI의 표현을 빌리면 모델은 “수십억 단어의 다음 단어를 맞히려고 시도하면서, 틀릴 때마다 매개변수를 조금씩 수정”한다. 이 과정을 역전파(backpropagation)라고 부른다.
원문: “Models learn through next-word prediction on billions of words, using a forward pass to check predictions and backpropagation to adjust parameters.”
의역: “모델은 수십억 단어 위에서 다음 단어 예측을 반복하며, 정방향 패스로 예측을 확인하고 역전파로 매개변수를 조정한다.”
핵심은 “이게 정답”이라는 외부 라벨이 따로 없다는 점이다. 텍스트 그 자체가 라벨이고, 모델은 자기 자신의 다음 토큰이 라벨이다. 그래서 거의 무한에 가까운 데이터로 학습할 수 있고, 이 단순한 목표만으로도 — 충분히 큰 규모에서는 — 번역·요약·코딩·수학 같은 능력이 “곁가지로” 떠오른다(emergent abilities). 같은 글이 강조하는 대목이다.
이 사실은 환각(hallucination, 05장)과 정렬(alignment, 03장)을 이해하는 토대가 된다. 모델은 진실 여부가 아니라 “학습 분포에서 그럴듯한 다음 토큰” 을 고르도록 만들어졌다. 진실성·정중함·안전성은 사후의 추가 학습으로 덧입혀지는 것이지, 사전학습이 그 자체로 보장하지 않는다.
- 생성 루프 = 토큰화 → 임베딩 → 트랜스포머 → 로짓 → 소프트맥스 → 샘플링 → 반복.
- Claude·GPT 등 현대 대화형 LLM은 디코더 전용 구조다.
- 디코딩 손잡이(temperature·top_p·top_k)가 모델의 “성격” 상당 부분을 결정한다.
- 사전학습의 목표는 단 하나, “다음 토큰 확률 잘 맞히기”.
- 진실성·안전성은 사전학습의 산물이 아니다 — 이후 단계에서 “정렬”되어야 한다.