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헤드파라미터
Small1276812117M
Medium24102416345M
Large36128020774M
XL481600251.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.699.8Perplexity 91% 감소
LAMBADA (Acc)52.66%19%+33.66%
Winograd SchemaSOTA-상식 추론
CBT-NE93.3%85.3+8.0%
CBT-CN89.1%82.3+6.8%
8개 중 7개SOTA-제로샷 기준

특히 LAMBADA에서는 perplexity를 99.8에서 8.6으로 91% 감소시키는 놀라운 결과를 보였다.

관련 모델 비교

특성GPT-1GPT-2GPT-3
파라미터117M1.5B175B
컨텍스트51210242048
NormPost-NormPre-NormPre-Norm
토크나이저BPE (40K)Byte-level BPE (50K)Byte-level BPE (50K)
학습 데이터BooksCorpus (5GB)WebText (40GB)300B tokens
평가 방식Fine-tuningZero-shotFew-shot
오픈소스NoYes (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]))

한계 및 전망

한계

  1. 제로샷 성능의 한계: 미세조정 모델 대비 여전히 성능 격차 존재
  2. 반복 생성 문제: 긴 텍스트 생성 시 반복적인 패턴 발생
  3. 사실성 부족: 그럴듯하지만 사실이 아닌 텍스트 생성 경향
  4. 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)

관련 문서