GPT-2: Language Models are Unsupervised Multitask Learners
개요
GPT-2는 OpenAI가 2019년 2월 발표한 15억 파라미터 규모의 자기회귀 언어 모델이다. “Language Models are Unsupervised Multitask Learners” 논문을 통해 소개된 이 모델은, GPT-1(117M)에서 10배 이상 스케일업하며 중요한 패러다임 전환을 이루었다.
GPT-2의 핵심 통찰은 모든 NLP 태스크를 형태의 조건부 텍스트 생성으로 재구성할 수 있다는 것이다. 충분히 큰 언어 모델은 별도의 미세조정 없이도 태스크를 이해하고 수행할 수 있으며, 이는 GPT-3의 인컨텍스트 러닝과 프롬프트 엔지니어링의 직접적 기반이 되었다.
아키텍처 상세
Pre-Norm으로의 전환
GPT-2의 가장 중요한 아키텍처 혁신은 Post-Norm에서 Pre-Norm으로의 전환이다:
- Post-Norm (GPT-1):
- Pre-Norm (GPT-2):
Pre-Norm에서는 잔차 경로(residual path)에 정규화가 개입하지 않으므로, 그래디언트가 잔차 스트림을 통해 직접 흐를 수 있다. 이는 48층 깊이의 네트워크에서도 안정적인 학습을 가능하게 했으며, 이후 GPT-3, LLaMA, PaLM 등 거의 모든 대형 언어 모델의 표준이 되었다.
모델 변형
| 모델 | 레이어 | Hidden | 헤드 | 파라미터 |
|---|---|---|---|---|
| Small | 12 | 768 | 12 | 117M |
| Medium | 24 | 1024 | 16 | 345M |
| Large | 36 | 1280 | 20 | 774M |
| XL | 48 | 1600 | 25 | 1.5B |
추가로 마지막 잔차 레이어의 가중치를 으로 스케일링하여, 초기화 시 깊은 층의 기여를 점진적으로 줄였다.
Byte-level BPE
GPT-2는 기존 BPE와 달리 바이트 수준에서 작동하는 Byte-level BPE를 도입했다. 50,257개의 어휘를 사용하며, UTF-8 바이트 시퀀스 위에서 BPE를 수행하므로 어떤 유니코드 문자열이든 OOV(미등록 어휘) 없이 처리 가능하다.
PyTorch 구현 (Pre-Norm 블록)
import torch
import torch.nn as nn
class GPT2Block(nn.Module):
"""GPT-2 스타일 Pre-Norm Transformer 블록"""
def __init__(self, d_model=1600, n_heads=25, d_ff=6400, dropout=0.1):
super().__init__()
self.ln1 = nn.LayerNorm(d_model)
self.attn = nn.MultiheadAttention(d_model, n_heads, dropout=dropout, batch_first=True)
self.ln2 = nn.LayerNorm(d_model)
self.ffn = nn.Sequential(
nn.Linear(d_model, d_ff),
nn.GELU(),
nn.Linear(d_ff, d_model),
nn.Dropout(dropout)
)
def forward(self, x, attn_mask=None):
# Pre-Norm: x + SubLayer(LayerNorm(x))
normed = self.ln1(x)
attn_out, _ = self.attn(normed, normed, normed, attn_mask=attn_mask)
x = x + attn_out # 잔차 경로에 정규화 없음
normed = self.ln2(x)
x = x + self.ffn(normed)
return x핵심 혁신
1. 제로샷 태스크 수행
별도의 미세조정 없이 프롬프트만으로 번역, 요약, 질의응답 등을 수행할 수 있음을 보였다. 8개 언어 모델 벤치마크 중 7개에서 제로샷 SOTA를 달성했다.
2. WebText 데이터셋
Reddit에서 3 karma 이상의 외부 링크를 크롤링하여 인간이 유용하다고 판단한 고품질 웹 텍스트 약 40GB를 수집했다. 이는 이후 Common Crawl 필터링 기법의 토대가 되었다.
3. 단계적 릴리스(Staged Release)
AI 안전 측면에서 단계적 릴리스 전략을 최초로 채택했다:
- 2019.02: 117M 모델만 공개
- 2019.05: 345M 공개
- 2019.08: 774M 공개
- 2019.11: 1.5B 전체 모델 MIT 라이선스로 공개
벤치마크/성능
| 벤치마크 | GPT-2 (Zero-shot) | 이전 SOTA | 비고 |
|---|---|---|---|
| LAMBADA (PPL) | 8.6 | 99.8 | Perplexity 91% 감소 |
| LAMBADA (Acc) | 52.66% | 19% | +33.66% |
| Winograd Schema | SOTA | - | 상식 추론 |
| CBT-NE | 93.3% | 85.3 | +8.0% |
| CBT-CN | 89.1% | 82.3 | +6.8% |
| 8개 중 7개 | SOTA | - | 제로샷 기준 |
특히 LAMBADA에서는 perplexity를 99.8에서 8.6으로 91% 감소시키는 놀라운 결과를 보였다.
관련 모델 비교
| 특성 | GPT-1 | GPT-2 | GPT-3 |
|---|---|---|---|
| 파라미터 | 117M | 1.5B | 175B |
| 컨텍스트 | 512 | 1024 | 2048 |
| Norm | Post-Norm | Pre-Norm | Pre-Norm |
| 토크나이저 | BPE (40K) | Byte-level BPE (50K) | Byte-level BPE (50K) |
| 학습 데이터 | BooksCorpus (5GB) | WebText (40GB) | 300B tokens |
| 평가 방식 | Fine-tuning | Zero-shot | Few-shot |
| 오픈소스 | No | Yes (MIT) | No |
실무 활용
- 텍스트 생성: 기사, 소설, 코드 등 다양한 형태의 텍스트 생성
- Hugging Face 생태계:
transformers라이브러리의 핵심 모델로 널리 사용 - 연구 베이스라인: 언어 모델 연구의 표준 비교 대상
- 교육: 트랜스포머 아키텍처 학습의 대표적 사례
from transformers import GPT2LMHeadModel, GPT2Tokenizer
tokenizer = GPT2Tokenizer.from_pretrained('gpt2-xl')
model = GPT2LMHeadModel.from_pretrained('gpt2-xl')
input_ids = tokenizer.encode("The future of AI is", return_tensors='pt')
output = model.generate(input_ids, max_length=100, temperature=0.7)
print(tokenizer.decode(output[0]))한계 및 전망
한계
- 제로샷 성능의 한계: 미세조정 모델 대비 여전히 성능 격차 존재
- 반복 생성 문제: 긴 텍스트 생성 시 반복적인 패턴 발생
- 사실성 부족: 그럴듯하지만 사실이 아닌 텍스트 생성 경향
- Underfitting: 1.5B 모델도 WebText에 대해 여전히 underfitting 상태
전망
GPT-2의 “큰 모델이 여전히 underfitting” 관찰은 스케일링 법칙의 초기 발견이며, GPT-3(175B)로의 대규모 확장을 직접적으로 동기부여했다. Pre-Norm과 Byte-level BPE는 현재까지도 대부분의 LLM에서 사용되는 표준 기법이다.
어텐션 메커니즘: MHA
Multi-Head Attention(MHA)은 Transformer의 핵심 메커니즘으로, 입력을 여러 헤드로 분할하여 병렬적으로 어텐션을 계산한다:
각 헤드는 서로 다른 표현 부분공간(subspace)에서 정보를 추출하며, 결과를 결합하여 풍부한 표현을 학습한다. 추론 시에는 모든 Q 헤드에 대해 별도의 KV를 유지해야 하므로 KV 캐시 비용이 높다는 단점이 있다.
아키텍처 설계 분석
정규화: LayerNorm을 사용하여 각 레이어의 입력을 정규화한다. 이는 깊은 네트워크에서의 학습 안정성을 보장하는 핵심 기법이다.
활성화 함수: GELU 활성화 함수를 사용한다. 로, 가우시안 누적 분포 함수를 통해 입력에 따라 게이팅 효과를 제공하여 ReLU 대비 부드러운 비선형성을 제공한다.
모델 규모와 효율: GPT-2은 1.5B 규모의 파라미터를 가지며, 1024 토큰의 컨텍스트 윈도우를 지원한다. 효율적인 아키텍처 설계를 통해 동급 모델 대비 경쟁력 있는 성능을 달성한다.
아키텍처 설계 분석
정규화: LayerNorm을 사용하여 각 레이어의 입력을 정규화한다. 형태로, 평균과 분산을 사용하여 입력을 정규화한다. 이는 깊은 네트워크에서의 학습 안정성을 보장하는 핵심 기법이다.
활성화 함수: GELU 활성화 함수를 사용한다. 로, 가우시안 누적 분포 함수를 통해 입력에 따라 확률적 게이팅 효과를 제공한다. ReLU의 hard threshold와 달리 부드러운 비선형성을 제공하여 학습 안정성이 향상된다.
모델 규모와 효율: GPT-2은 1.5B 규모의 파라미터를 가지며, 1024 토큰의 컨텍스트 윈도우를 지원한다. 효율적인 아키텍처 설계를 통해 동급 모델 대비 경쟁력 있는 성능을 달성한다.
아키텍처 설계 분석
정규화: LayerNorm을 사용하여 각 레이어의 입력을 정규화한다. 형태로, 평균과 분산을 사용하여 입력을 정규화한다. 이는 깊은 네트워크에서의 학습 안정성을 보장하는 핵심 기법이다.
활성화 함수: GELU 활성화 함수를 사용한다. 로, 가우시안 누적 분포 함수를 통해 입력에 따라 확률적 게이팅 효과를 제공한다. ReLU의 hard threshold와 달리 부드러운 비선형성을 제공하여 학습 안정성이 향상된다.
모델 규모와 효율: GPT-2은 1.5B 규모의 파라미터를 가지며, 1024 토큰의 컨텍스트 윈도우를 지원한다. 효율적인 아키텍처 설계를 통해 동급 모델 대비 경쟁력 있는 성능을 달성한다.
아키텍처 설계 분석
정규화: LayerNorm을 사용하여 각 레이어의 입력을 정규화한다. 형태로, 평균과 분산을 사용하여 입력을 정규화한다. 이는 깊은 네트워크에서의 학습 안정성을 보장하는 핵심 기법이다.
활성화 함수: GELU 활성화 함수를 사용한다. 로, 가우시안 누적 분포 함수를 통해 입력에 따라 확률적 게이팅 효과를 제공한다. ReLU의 hard threshold와 달리 부드러운 비선형성을 제공하여 학습 안정성이 향상된다.
모델 규모와 효율: GPT-2은 1.5B 규모의 파라미터를 가지며, 1024 토큰의 컨텍스트 윈도우를 지원한다. 효율적인 아키텍처 설계를 통해 동급 모델 대비 경쟁력 있는 성능을 달성한다.
아키텍처 설계 분석
정규화: LayerNorm을 사용하여 각 레이어의 입력을 정규화한다. 형태로, 평균과 분산을 사용하여 입력을 정규화한다. 이는 깊은 네트워크에서의 학습 안정성을 보장하는 핵심 기법이다.
활성화 함수: GELU 활성화 함수를 사용한다. 로, 가우시안 누적 분포 함수를 통해 입력에 따라 확률적 게이팅 효과를 제공한다. ReLU의 hard threshold와 달리 부드러운 비선형성을 제공하여 학습 안정성이 향상된다.
모델 규모와 효율: GPT-2은 1.5B 규모의 파라미터를 가지며, 1024 토큰의 컨텍스트 윈도우를 지원한다. 효율적인 아키텍처 설계를 통해 동급 모델 대비 경쟁력 있는 성능을 달성한다.
참고 논문: Language Models are Unsupervised Multitask Learners (Radford et al., 2019)
관련 문서
- GPT-1 — 발전 기반
- Language Models are Few-Shot Learners (GPT-3) — 후속 모델
- GPT-Neo — 영감을 줌