GPT는 실제로 어떻게 동작하는가

MNIST에서 이미지를 숫자로 분류하는 신경망을 이해했다면, GPT도 같은 원리라는 걸 알 수 있다. 이 글에서는 GPT가 실제로 어떻게 문장을 생성하는지 구체적으로 살펴본다.

핵심: 다음 토큰 예측

GPT는 대단해 보이지만 하는 일은 단순하다. 다음 단어(토큰) 맞추기다.

입력: "오늘 날씨가"
출력: "좋다" (다음 토큰 1개)

긴 문장이 나오는 건 이걸 반복하는 거다.

"오늘 날씨가" → "좋다"
"오늘 날씨가 좋다" → "산책"
"오늘 날씨가 좋다 산책" → "하러"
"오늘 날씨가 좋다 산책 하러" → "가자"

문장을 숫자로 바꾸기

신경망은 숫자만 처리한다. 문장을 숫자로 바꾸는 과정이 필요하다.

토큰화

문장을 조각(토큰)으로 나눈다. 단어 단위가 아니라 서브워드 단위다.

"unhappiness" → ["un", "happi", "ness"]
"프로그래밍" → ["프로", "그래", "밍"]

왜 단어 전체가 아니라 조각으로 나눌까? 세상의 모든 단어를 사전에 담을 수 없기 때문이다. 조각으로 나누면 5만~10만 개 토큰으로 거의 모든 텍스트를 표현할 수 있다.

"Anthropic" → 사전에 없음 → 처리 불가 ❌
"Anthropic" → ["Anthrop", "ic"] → 처리 가능 ✅
모델토큰 수
GPT-2약 50,000개
GPT-3/4약 100,000개

임베딩

각 토큰을 숫자 배열(벡터)로 변환한다.

"오늘" → 1523 → [0.2, -0.5, 0.8, 0.1, ...]  # 길이 수천
"날씨" → 892  → [0.1, 0.3, -0.2, 0.7, ...]

이 벡터에 단어의 "의미"가 담긴다.

MNIST와 비교

MNISTGPT
입력784개 픽셀토큰 벡터들
DenseTransformer 블록
출력10개 중 선택50,000개 중 선택
결과"5""좋다" (다음 토큰)

MNIST가 0~9 중 하나를 고르듯, GPT도 전체 토큰(5만 개) 중 하나를 고른다.

출력: [0.001, 0.002, ..., 0.15, ..., 0.003]
       "가"    "나"        "좋다"      "집"
                            ↑
                      가장 높음 → 선택

핵심 원리는 똑같다.

긴 문장 생성 = 모델 반복 실행

Transformer 레이어 수는 고정이다. GPT-3는 96개 층이다. 긴 문장이 나오는 건 레이어가 늘어나는 게 아니라 모델 전체를 여러 번 실행하는 거다.

토큰 1개 = 모델 1번 실행
토큰 100개 = 모델 100번 실행
실행 1: ["오늘"] → 모델 96층 통과 → "날씨"
실행 2: ["오늘", "날씨"] → 모델 96층 통과 → "가"
실행 3: ["오늘", "날씨", "가"] → 모델 96층 통과 → "좋다"
...

ChatGPT가 답변을 한 글자씩 보여주는 이유다. 실제로 토큰을 하나씩 생성하고 있다.

언제 멈춰?

종료 토큰 (EOS)

모델이 "여기서 끝"이라는 특수 토큰을 출력하면 멈춘다.

["안녕", "하세요", "!", "<EOS>"] → 종료

최대 길이 제한

설정된 토큰 수를 초과하면 강제 종료한다.

max_tokens=100  # 100개 넘으면 끊김

긴 답변이 중간에 끊기는 이유다.

매번 전체가 다시 들어간다

다음 토큰을 생성할 때마다 이전 토큰들이 전부 다시 입력된다.

실행 1: ["오늘"] → "날씨"
실행 2: ["오늘", "날씨"] → "가"
실행 3: ["오늘", "날씨", "가"] → "좋다"

Self-Attention이 모든 토큰 간의 관계를 봐야 하기 때문이다. 비효율적으로 보이지만, 실제로는 KV Cache라는 기법으로 이전에 계산한 결과를 저장해두고 새 토큰만 계산한다.

캐시 없음: 토큰 100개 생성 → 5,050번 계산
KV Cache: 토큰 100개 생성 → 100번 계산

기본 GPT vs ChatGPT

사전학습만 된 GPT는 질문에 답하지 않는다. 그냥 "다음 단어 예측"만 한다.

# 기본 GPT
입력: "한국의 수도는 어디야?"
출력: "라고 철수가 물었다."  ← 이야기를 이어감

ChatGPT처럼 동작하려면 추가 학습이 필요하다.

단계내용결과
사전학습다음 단어 예측문장 이어가기만 함
지시 학습질문-답변 데이터로 학습질문에 답하기 시작
RLHF인간 피드백으로 학습친절하고 유용한 답변

같은 모델 구조인데, 어떤 데이터로 학습했느냐에 따라 완전히 다르게 동작한다.

Transformer 블록 구조

GPT는 정말 Transformer 블록을 쌓은 게 전부다.

[임베딩] → [Transformer 블록] × 96개 → [출력]

각 블록 안에는 이게 들어있다.

입력
  ↓
[Self-Attention] ← 토큰 간 관계 파악
  ↓
[Feed-Forward Network] ← Dense 2개
  ↓
출력

사실상 Self-Attention + Dense 층이다. MNIST 신경망에서 본 Dense와 같은 개념이다.

파라미터는 몇 개?

GPT-3 (175B) 기준으로 계산해보면:

설정
레이어 수96개
임베딩 차원12,288
어텐션 헤드96개
Feed-Forward 크기49,152

한 블록의 파라미터

Self-Attention:
- Q, K, V 행렬: 12,288 × 12,288 × 3 ≈ 4.5억
- 출력 행렬: 12,288 × 12,288 ≈ 1.5억

Feed-Forward:
- 첫 번째 Dense: 12,288 × 49,152 ≈ 6억
- 두 번째 Dense: 49,152 × 12,288 ≈ 6억

한 블록 합계: 약 18억 개

전체

18억 × 96개 블록 ≈ 1,700억
+ 임베딩 레이어 ≈ 50억
─────────────────────────
총 약 1,750억 개 (175B)

모델별 비교

모델레이어파라미터
GPT-2 Small12개1.2억
GPT-2 Large36개7.7억
GPT-396개1,750억
GPT-4비공개추정 1조+

결국 이게 전부다

# GPT의 핵심 (개념적으로)
for i in range(96):
    x = self_attention(x)  # 관계 파악
    x = feed_forward(x)    # 변환

next_token = softmax(x)  # 다음 토큰 확률

구조는 놀라울 정도로 단순하다. 복잡한 건 구조가 아니라 규모다.

  • 파라미터 1,750억 개
  • 학습 데이터 수천억 토큰
  • 학습 비용 수백만 달러

정리

질문
GPT가 하는 일?다음 토큰 예측, 반복
문장을 어떻게 처리?토큰화 → 임베딩 → 숫자 배열
구조?Transformer 블록 96개 쌓기
각 블록 안에?Self-Attention + Dense
파라미터 수?블록당 18억, 전체 1,750억 (GPT-3)
ChatGPT가 되려면?지시 학습 + RLHF 추가

MNIST에서 이해한 "입력 → 층 통과 → 분류"와 같은 원리다. 규모만 어마어마하게 커진 것이다.

AI 입문: 머신러닝부터 GPT까지 글에서 전체 맥락을, MNIST 신경망 동작 원리에서 기본 개념을 함께 보면 도움이 된다.