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와 비교
| MNIST | GPT | |
|---|---|---|
| 입력 | 784개 픽셀 | 토큰 벡터들 |
| 층 | Dense | Transformer 블록 |
| 출력 | 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 Small | 12개 | 1.2억 |
| GPT-2 Large | 36개 | 7.7억 |
| GPT-3 | 96개 | 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 신경망 동작 원리에서 기본 개념을 함께 보면 도움이 된다.