본문으로 건너뛰기

© 2026 Molayo

Dev.to헤드라인2026. 06. 23. 23:54

Transformer Decoder가 텍스트를 생성하는 방법 — 인과적 마스킹(Causal Masking)부터 디코딩(Decoding)까지

요약

Transformer Decoder의 자기회귀(Autoregressive) 생성 원리와 핵심 구조를 설명합니다. 인과적 마스킹을 통해 이전 토큰만을 참조하여 다음 토큰을 예측하는 과정을 다룹니다.

핵심 포인트

  • 자기회귀 생성: 이전 토큰을 입력으로 사용하여 다음 토큰을 순차적으로 예측
  • 인과적 마스킹: 미래의 토큰을 참조하지 못하도록 차단하여 학습 및 생성 제어
  • 생성 파이프라인: Decoder 레이어, LM Head, 디코딩 전략의 유기적 결합
  • Decoder 구조: 마스크드 셀프 어텐션, 크로스 어텐션, 피드포워드 네트워크 포함

Transformer Decoder는 문장을 한 번에 생성하지 않습니다.

하나의 토큰(token)을 예측합니다.

그 다음, 해당 토큰을 다시 입력으로 넣어 다음 토큰을 예측합니다.

이 단순한 루프가 현대 LLM 생성의 핵심입니다.

핵심 아이디어 (Core Idea)

Transformer Decoder는 자기회귀 생성 (autoregressive generation)을 위해 구축되었습니다.

즉, 다음과 같습니다:

이전 토큰들 → 다음 토큰 예측 → 반복

Decoder는 은닉 표현 (hidden representations)을 생성합니다.

LM Head는 이러한 표현들을 어휘 점수 (vocabulary scores)로 변환합니다.

디코딩 전략 (decoding strategy)은 실제 다음 토큰을 선택합니다.

이것이 중요한 이유는 생성 품질이 모델에 의해서만 결정되는 것이 아니기 때문입니다.

토큰이 어떻게 선택되는지 또한 영향을 미칩니다.

핵심 구조 (The Key Structure)

단순화된 생성 파이프라인은 다음과 같습니다:

입력 컨텍스트 (Input Context)

→ Decoder 레이어 (Decoder Layers)

→ 은닉 상태 (Hidden State)

→ LM Head

→ 로짓 (Logits)

→ 소프트맥스 (Softmax)

→ 디코딩 전략 (Decoding Strategy)

→ 다음 토큰 (Next Token)

더 간결하게 표현하면:

텍스트 생성 (Text Generation) = decoder 표현 (decoder representation) + 어휘 점수 산정 (vocabulary scoring) + 토큰 선택 (token selection)

Decoder는 다음 질문에 답합니다:

다음 표현은 무엇이어야 하는가?

LM Head는 다음 질문에 답합니다:

어떤 어휘 토큰들이 가능성이 높은가?

디코딩 전략은 다음 질문에 답합니다:

우리가 실제로 어떤 토큰을 출력해야 하는가?

의사 코드 관점 (Pseudo-code View)

자기회귀 디코딩 (Autoregressive decoding)은 다음과 같습니다:

context = prompt_tokens

while not stop:
...

핵심 루프는 다음과 같습니다:

예측 (predict) → 추가 (append) → 반복 (repeat)

이것이 LLM 추론 (inference)이 순차적인 이유입니다.

학습은 병렬화가 가능할지라도, 생성은 여전히 한 번에 한 단계씩 토큰을 만들어냅니다.

Transformer Decoder 구조 (Transformer Decoder Structure)

Transformer Decoder 레이어는 보통 다음을 포함합니다:

  • 마스크드 셀프 어텐션 (Masked Self-Attention)
  • 크로스 어텐션 (Cross-Attention)
  • 피드포워드 네트워크 (Feed-Forward Network)

마스크드 셀프 어텐션 (Masked Self-Attention)은 Decoder가 이전 토큰들만 볼 수 있게 합니다.

크로스 어텐션 (Cross-Attention)은 입력 시퀀스가 존재할 때 Encoder의 출력을 볼 수 있게 합니다.

피드포워드 네트워크 (Feed-Forward Network)는 각 토큰의 표현을 변환합니다.

Decoder-only LLM의 경우, 크로스 어텐션 (Cross-Attention)은 보통 제거됩니다.

모델은 현재 컨텍스트로부터 계속해서 이어 나갑니다.

인과적 마스킹 (Causal Masking)

Decoder는 부정행위를 해서는 안 됩니다.

토큰 5를 예측할 때, 토큰 6을 볼 수 없습니다.

그것이 인과적 마스크 (Causal Mask)의 역할입니다.

생성 확률 (Generation probability)은 다음과 같이 쓸 수 있습니다:

P(y₁, y₂, ..., yₜ | x) = Π P(yₜ | y₁, ..., yₜ₋₁, x)

각 토큰은 오직 이전의 출력 토큰들과 입력에만 의존합니다.

이것은 매우 중요합니다.

인과적 마스킹 (Causal masking)이 없다면, 모델은 훈련 (Training) 중에 미래의 정답을 미리 볼 수 있습니다.

그러면 실제 생성 (Generation) 시에는 실패하게 될 것입니다.

구체적인 예시 (Concrete Example)

대상 문장 (Target sentence):

I love you

훈련 (Training) 동안, 디코더 (Decoder) 입력은 오른쪽으로 시프트 (Shifted right) 됩니다:

입력 (Input):

I love

대상 (Target):

I love you

따라서 모델은 다음과 같이 학습합니다:

→ I

I → love

I love → you

추론 (Inference) 시에는 대상 문장이 없습니다.

모델은 자신의 이전 출력을 사용해야 합니다.

이것이 생성 중에 오류가 누적될 수 있는 이유입니다.

교사 강요 (Teacher Forcing)

교사 강요 (Teacher forcing)는 훈련 (Training) 중에 사용됩니다.

모델의 잘못된 예측을 다음 단계로 다시 피드백하는 대신, 올바른 이전 토큰을 입력으로 넣어줍니다.

이는 훈련을 더 안정적으로 만듭니다.

훈련 (Training):

input = 올바른 이전 토큰들

추론 (Inference):

input = 모델이 생성한 이전 토큰들

이 차이는 중요합니다.

모델은 훈련 중에는 잘 작동할 수 있지만, 생성 중에는 경로를 이탈 (Drift)할 수 있습니다.

그렇기 때문에 실제 시스템에서는 디코딩 전략 (Decoding strategy)과 평가 (Evaluation)가 중요합니다.

LM Head 및 로짓 (Logits)

디코더 (Decoder)는 은닉 벡터 (Hidden vectors)를 출력합니다.

하지만 은닉 벡터는 토큰이 아닙니다.

LM Head는 은닉 벡터를 어휘 사전 (Vocabulary) 크기의 점수로 매핑합니다.

이 점수들을 로짓 (Logits)이라고 부릅니다.

어휘 사전 크기가 50,000이라면, LM Head는 50,000개의 점수를 출력합니다.

각 점수는 가능한 다음 토큰 하나에 대응합니다.

로짓 (Logits)은 아직 확률이 아닙니다.

소프트맥스 (Softmax)가 이를 확률로 변환합니다.

파이프라인은 다음과 같습니다:

은닉 상태 (Hidden state) → 로짓 (Logits) → 확률 (Probabilities) → 선택된 토큰 (Selected token)

온도 스케일링 (Temperature Scaling)

온도 (Temperature)는 확률 분포 (Probability distribution)가 얼마나 날카로워지거나 평평해지는지를 제어합니다.

공식은 다음과 같습니다:

pᵢ(τ) = exp(zᵢ / τ) / Σ exp(zⱼ / τ)

낮은 온도 (Lower temperature):

  • 더 날카로운 분포 (Sharper distribution)
  • 더 결정론적인 출력 (More deterministic output)
  • 더 적은 무작위성 (Less randomness)

높은 온도 (Higher temperature):

  • 더 평탄한 분포 (flatter distribution)
  • 더 다양한 출력 (more diverse output)
  • 더 많은 무작위성 (more randomness)

예시:

Logits [2, 1, 0]의 경우:

temperature = 0.5는 상위 토큰을 훨씬 더 강력하게 만듭니다.

temperature = 2는 순위가 낮은 토큰들의 확률을 더 높입니다.

이는 실제 적용 시 매우 중요합니다.

온도 (Temperature)는 창의성을 조절하는 가장 간단한 방법 중 하나입니다.

디코딩(Decoding)의 의미

디코딩 (Decoding)은 확률로부터 다음 토큰을 선택하는 것을 의미합니다.

모델은 분포 (distribution)를 제공합니다.

디코딩 알고리즘은 선택을 내립니다.

그 선택은 다음 요소들에 영향을 미칩니다:

  • 정확성 (correctness)
  • 창의성 (creativity)
  • 반복 (repetition)
  • 다양성 (diversity)
  • 결정론적 특성 (determinism)
  • 지연 시간 (latency)

따라서 디코딩은 사소한 세부 사항이 아닙니다.

이는 생성 동작 (generation behavior)의 일부입니다.

탐욕적 디코딩 (Greedy Decoding)

탐욕적 디코딩 (Greedy decoding)은 항상 가장 확률이 높은 토큰을 선택합니다.

확률이 다음과 같다면:

A = 0.70

B = 0.20

C = 0.10

탐욕적 디코딩은 항상 A를 선택합니다.

단순하고 빠릅니다.

하지만 반복적일 수 있습니다.

또한 전체 문장을 더 나쁘게 만드는, 국소적으로만 좋은 토큰을 선택할 수도 있습니다.

빔 서치 (Beam Search)

빔 서치 (Beam search)는 여러 개의 후보 시퀀스를 유지합니다.

단지 최선의 다음 토큰 하나만을 유지하는 대신, 최선의 k개 경로를 유지합니다.

만약 빔 크기 (beam size)가 3이라면, 모델은 세 개의 후보 연속 문장을 추적합니다.

이는 구조화된 생성 (structured generation)을 개선할 수 있습니다.

하지만 다양성을 감소시킬 수도 있습니다.

k = 1일 때, 빔 서치는 탐욕적 디코딩과 같아집니다.

Top-k 샘플링 (Top-k Sampling)

Top-k 샘플링 (Top-k sampling)은 가장 확률이 높은 k개의 토큰만을 유지합니다.

그 다음 그 더 작은 집합 내에서 샘플링을 수행합니다.

예시:

k = 3

상위 3개의 토큰만 선택될 수 있습니다.

이는 모델이 극도로 확률이 낮은 토큰을 선택하는 것을 방지합니다.

하지만 여전히 어느 정도의 무작위성을 허용합니다.

Top-k는 제어된 다양성을 원할 때 유용합니다.

Top-p 샘플링 (Top-p Sampling)

Top-p 샘플링 (Top-p sampling)은 핵 샘플링 (nucleus sampling)이라고도 불립니다.

고정된 수의 토큰을 유지하는 대신, 누적 확률이 p를 초과하는 가장 작은 토큰 집합을 유지합니다.

예시:

토큰 확률:

honeycomb = 0.45

gingerbread = 0.20

donut = 0.12

cupcake = 0.04

만약 p = 0.6라면:

honeycomb + gingerbread = 0.65

따라서 이 두 토큰만이 샘플링 집합에 포함됩니다.

Top-p는 모델의 확신도(confidence)에 따라 적응합니다.

덕분에 고정된 Top-k 방식보다 더 유연합니다.

결정론적 디코딩(Deterministic) vs 확률적 디코딩(Stochastic)

결정론적 디코딩 (Deterministic decoding):

  • greedy decoding (탐욕적 디코딩)
  • beam search (빔 서치)
  • 동일한 입력은 대개 동일한 출력을 생성함
  • 예측 가능한 작업에 유용함

확률적 디코딩 (Stochastic decoding):

  • Top-k sampling (Top-k 샘플링)
  • Top-p sampling (Top-p 샘플링)
  • 서로 다른 출력을 생성할 수 있음
  • 창의적인 작업에 유용함

차이점은 간단합니다:

결정론적 = 가장 좋아 보이는 경로를 선택

확률적 = 가능성 있는 경로들로부터 샘플링

코딩 작업의 경우, 결정론적 설정이 유용한 경우가 많습니다.

브레인스토밍의 경우, 확률적 설정이 더 나은 경우가 많습니다.

인코더-디코더(Encoder-Decoder) vs 디코더 전용(Decoder-Only) 모델

인코더-디코더 (Encoder-Decoder) 모델은 입력 이해와 출력 생성을 모두 사용합니다.

번역과 같은 작업에 유용합니다.

인코더 (Encoder)는 소스 시퀀스(source sequence)를 읽습니다.

디코더 (Decoder)는 타겟 시퀀스(target sequence)를 생성합니다.

디코더 전용 (Decoder-only) 모델은 생성 스택(generation stack)만을 사용합니다.

이들은 이전 문맥(context)으로부터 다음 토큰을 예측합니다.

대부분의 GPT 스타일 LLM은 디코더 전용 모델입니다.

이 구조는 개방형 텍스트 생성(open-ended text generation)에 더 단순합니다.

구현 관점 (Implementation Perspective)

실제 추론(inference) 코드에서 생성은 단순히 다음과 같지 않습니다:

model(prompt)

그보다는 다음과 것에 더 가깝습니다:

tokenize prompt (프롬프트 토큰화)

run decoder (디코더 실행)
...

이것이 중요한 이유는 작은 디코딩 변화가 매우 다른 출력을 만들어낼 수 있기 때문입니다.

모델은 디코딩 설정에 따라 정밀하거나, 지루하거나, 창의적이거나, 불안정하거나, 혹은 반복적이라고 느껴질 수 있습니다.

모델은 확률(probabilities)을 제공합니다.

여러분의 디코딩 파이프라인(decoding pipeline)이 그 확률을 동작(behavior)으로 바꿉니다.

순진한 관점 vs 실무적인 관점

순진한 관점 (Naive view):

LLM = 텍스트 입력, 텍스트 출력

실무적인 관점 (Practical view):

LLM = 토큰 루프(token loop) + 로짓(logits) + 디코딩 정책(decoding policy)

순진한 사고방식:

모델에게 질문
답변을 받음

실무적인 사고방식:

문맥(context) 관리
온도(temperature) 조절
디코딩 전략 선택
...

이것이 개발자들이 디코더(Decoder)를 이해해야 하는 이유입니다.

생성은 단일 함수 호출이 아니라 하나의 시스템입니다.

중요한 조건과 한계

디코더 생성은 순차적(sequential)입니다.

각각의 새로운 토큰은 이전 토큰들에 의존합니다.

이로 인해 추론 (inference) 속도가 느려질 수 있습니다.

미래 토큰의 누출 (leakage)을 방지하기 위해서는 인과적 마스킹 (Causal masking)이 필요합니다.

교사 강요 (Teacher forcing)는 학습을 돕지만, 추론 시에는 모델 자신의 예측값을 사용합니다.

디코딩 전략 (Decoding strategy)은 출력의 동작을 변화시킵니다.

온도 (Temperature), Top-k, 그리고 Top-p는 단순한 미적 옵션이 아닙니다.

이들은 생성된 텍스트의 형태를 직접적으로 결정합니다.

요약 (Takeaway)

Transformer Decoder는 한 번에 하나의 토큰을 예측함으로써 텍스트를 생성합니다.

마스크드 셀프 어텐션 (Masked Self-Attention)은 미래 토큰에 대한 접근을 차단합니다.

LM Head는 은닉 상태 (hidden states)를 어휘 로짓 (vocabulary logits)으로 변환합니다.

Softmax는 로짓을 확률로 변환합니다.

디코딩 (Decoding)은 실제 다음 토큰을 선택합니다.

가장 짧은 버전은 다음과 같습니다:

디코더 생성 = 인과적 어텐션 (causal attention) + LM Head + 디코딩 루프 (decoding loop)

이 루프를 이해한다면, LLM이 실제로 텍스트를 생성하는 방식을 이해하는 것입니다.

토론 (Discussion)

LLM 출력을 튜닝할 때, 보통 어떤 설정을 가장 먼저 조정하시나요?

Temperature, Top-k, Top-p, 아니면 프롬프트 (prompt) 자체인가요?

Originally published at zeromathai.com.
Original article: https://zeromathai.com/en/transformer-decoder-lm-head-decoding-en/

GitHub Resources
AI diagrams, study notes, and visual guides:
https://github.com/zeromathai/zeromathai-ai

AI 자동 생성 콘텐츠

본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0