[Daily morning study] GPT 모델 동작 방식과 토크나이저 이해

#daily morning study

Image


GPT란

GPT(Generative Pre-trained Transformer)는 OpenAI가 개발한 Decoder-only Transformer 기반 언어 모델이다. Transformer의 인코더-디코더 구조 중 디코더 파트만 사용하고, 방대한 텍스트 데이터로 사전학습(pre-training)한 뒤 다양한 태스크에 활용할 수 있도록 설계됐다.


Decoder-only 구조

Transformer 원 논문에는 인코더(입력 이해)와 디코더(출력 생성) 두 파트가 있다.

구조대표 모델주된 용도
Encoder-onlyBERT분류, NER, 감성 분석
Encoder-DecoderT5, BART번역, 요약
Decoder-onlyGPT, LLaMA텍스트 생성, 대화

GPT는 Decoder-only를 선택했다. 디코더는 Masked Self-Attention을 사용해 각 토큰이 자신보다 앞에 있는 토큰들만 참조할 수 있다. 덕분에 “다음 토큰이 무엇인지”를 예측하는 자기회귀 생성에 자연스럽게 맞아떨어진다.


사전학습: 다음 토큰 예측

GPT의 사전학습 목표는 간단하다. 주어진 시퀀스에서 다음 토큰을 예측하는 것이다.

입력: "The cat sat on the"
목표: "mat"

이 과정을 수십억 개의 텍스트 문서에 대해 반복하면, 모델은 자연스럽게 문법, 사실 지식, 추론 능력을 압축해 파라미터에 저장한다.

수식으로 표현하면 다음 토큰의 조건부 확률을 최대화한다:

L = Σ log P(token_t | token_1, ..., token_{t-1})

텍스트 생성: 자기회귀(Autoregressive) 방식

학습 후 텍스트를 생성할 때는 다음과 같이 동작한다:

  1. 사용자 입력(프롬프트)을 토큰 시퀀스로 변환
  2. 모델이 다음 토큰의 확률 분포를 출력
  3. 샘플링 전략(greedy, top-k, nucleus 등)으로 토큰 하나를 선택
  4. 선택한 토큰을 시퀀스에 추가한 뒤 2번으로 돌아감
  5. EOS(End Of Sequence) 토큰이 나오거나 최대 길이에 도달하면 종료
"오늘 날씨가" → "좋" → "아" → "서" → "기분이" → "좋다" → [EOS]

토큰 하나씩 생성하기 때문에 생성 속도는 시퀀스 길이에 비례한다.


토크나이저(Tokenizer)

토크나이저는 텍스트를 모델이 처리할 수 있는 정수 ID 시퀀스로 바꿔주는 전처리 모듈이다. 단순히 공백으로 나누지 않고, 서브워드(subword) 단위로 쪼갠다.

왜 서브워드인가

  • 단어 단위: 어휘 사전이 너무 커지고 미등록 어(OOV) 문제 발생
  • 문자 단위: 시퀀스가 너무 길어지고 의미 단위가 깨짐
  • 서브워드: 두 극단의 절충 — 자주 쓰이는 단어는 통째로, 희귀 단어는 조각으로

BPE (Byte Pair Encoding)

GPT 시리즈가 채택한 방식이다.

  1. 모든 텍스트를 문자 단위로 시작
  2. 가장 자주 함께 등장하는 인접 쌍을 하나의 심볼로 병합
  3. 원하는 어휘 사전 크기에 도달할 때까지 반복
# 초기 어휘
"l o w" "l o w e r" "n e w e s t" "w i d e s t"

# 'e'+'s' 쌍이 가장 빈번 → 'es'로 병합
# 's'+'t' 쌍이 다음 빈번 → 'st'로 병합
# ... 반복
# 최종적으로 "lowest", "newest"처럼 빈출 단어는 통째로 남음

GPT-4에서는 cl100k_base 인코딩을 사용하며 약 10만 개의 토큰을 보유한다.

토큰화 예시

import tiktoken

enc = tiktoken.get_encoding("cl100k_base")

text = "Hello, world! 안녕하세요."
tokens = enc.encode(text)
print(tokens)
# [9906, 11, 1917, 0, 220, 97, 102, 98, 104, 99, 107, 104, 49424, 13]

print([enc.decode([t]) for t in tokens])
# ['Hello', ',', ' world', '!', ' ', '안', '녕', '하', '세', '요', '.']

한국어는 영어보다 토큰 효율이 낮다. 영어 단어 하나가 1~2토큰인 반면 한국어 음절 하나가 1~3토큰을 쓰는 경우가 많다.


컨텍스트 윈도우

모델이 한 번에 처리할 수 있는 최대 토큰 수다.

모델컨텍스트 윈도우
GPT-21,024 tokens
GPT-34,096 tokens
GPT-48,192 / 32,768 tokens
GPT-4o128,000 tokens

컨텍스트 윈도우를 초과한 내용은 모델이 참조하지 못한다. 대화 맥락이 길어지면 초반 내용이 잘려나가는 이유다.

Self-Attention의 계산 복잡도는 O(n²)이기 때문에 컨텍스트가 길어질수록 메모리와 연산량이 제곱으로 증가한다. 최근 모델들이 이를 해결하기 위해 Sliding Window Attention, Flash Attention, Ring Attention 등 다양한 최적화를 적용하고 있다.


정리

  • GPT는 Decoder-only Transformer이며 자기회귀 방식으로 한 번에 토큰 하나씩 생성한다.
  • 사전학습 목표는 “다음 토큰 예측”이며, 이 단순한 목표를 대규모로 반복해 언어 이해 능력을 획득한다.
  • 토크나이저는 텍스트를 서브워드 단위의 정수 ID로 변환하며, BPE가 GPT 계열의 표준 방식이다.
  • 컨텍스트 윈도우는 모델이 한 번에 볼 수 있는 토큰의 한계이며, 이 범위 밖의 내용은 모델에게 존재하지 않는 것과 같다.