검색
← 모듈 로드맵

생성적 사전학습으로 언어 이해 높이기 (GPT-1)

논문 · 준전문가 · Radford 외 · 2018 · OpenAI

원제 · Improving Language Understanding by Generative Pre-Training

트랜스포머 디코더를 다음 토큰 예측으로 사전학습하고 과제별로 미세조정한 GPT의 시작

먼저 알아야 할 것

트랜스포머(셀프 어텐션)언어 모델소프트맥스전이 학습BPE 토큰화

다루는 내용

GPT-1은 12층 트랜스포머 디코더를 BooksCorpus로 다음 토큰 예측 사전학습한 뒤, 출력층 하나만 더해 과제별로 미세조정합니다. 문장 쌍 · 선택지 문제는 시작 · 구분 · 끝 토큰으로 한 줄짜리 입력으로 바꿔 같은 모델에 넣고, 미세조정 때 언어 모델 목표를 보조로 함께 씁니다. 12개 자연어 이해 과제 중 9개에서 최고 기록을 냈고, 사전학습을 빼면 성능이 크게 떨어졌습니다.

초록

저자가 쓴 초록을 옮긴 것입니다.

자연어 이해에는 텍스트 함의, 질의응답, 의미 유사도 평가, 문서 분류처럼 다양한 과제가 있습니다. 정답이 없는 대규모 텍스트는 풍부하지만, 이런 특정 과제를 배우기 위한 정답 데이터는 부족해서 판별적으로 학습한 모델이 충분한 성능을 내기 어렵습니다. 우리는 정답 없는 다양한 텍스트로 언어 모델을 생성적으로 사전학습한 뒤, 과제마다 판별적으로 미세조정하면 이 과제들에서 큰 향상을 얻을 수 있음을 보입니다. 이전 방법들과 달리, 미세조정 때 과제에 맞춘 입력 변환을 써서 모델 구조는 최소한으로만 바꾸면서도 효과적으로 전이합니다. 자연어 이해의 다양한 벤치마크에서 이 방법의 효과를 보입니다. 과제에 무관한 우리의 범용 모델은 과제마다 특별히 설계한 구조를 쓰는 판별 학습 모델들을 앞서, 연구한 12개 과제 중 9개에서 최고 기록을 크게 높였습니다. 예를 들어 상식 추론(Stories Cloze Test)에서 절대값 8.9%, 질의응답(RACE)에서 5.7%, 텍스트 함의(MultiNLI)에서 1.5% 향상을 얻었습니다.

해설

생성적 사전학습으로 언어 이해 높이기 (GPT-1)

트랜스포머 디코더를 많은 책 텍스트로 "다음 단어 맞히기" 사전학습한 뒤, 과제마다 출력층 하나만 붙여 미세조정하는 방식을 제안한 논문입니다. 과제별 구조를 따로 설계하지 않고도 12개 과제 중 9개에서 기존 최고 기록을 넘었고, 이후 GPT 계열 전체의 출발점이 됐습니다.

항목내용
원제Improving Language Understanding by Generative Pre-Training
저자Alec Radford 외 3명 (OpenAI)
발표2018 · OpenAI 기술 보고서 · PDF
트랙 · 수준NLP·트랜스포머 · 중급
먼저 알면 좋은 것트랜스포머(셀프 어텐션), 언어 모델, 소프트맥스, 전이 학습, BPE 토큰화

들어가기 전에

이 해설은 아래 내용을 안다고 보고 씁니다. 처음이라면 먼저 읽고 오면 수식과 손계산을 훨씬 쉽게 따라올 수 있습니다.

한눈에 보기

  • "정답 없는 글로 먼저 일반 능력을 배우고, 정답 있는 소량 데이터로 과제에 맞춘다"는 사전학습 + 미세조정 2단계를 알게 됩니다.
  • 다음 단어 확률을 최대화하는 언어 모델 목표식과, 미세조정 때 그것을 보조 목표로 함께 쓰는 이유를 알게 됩니다.
  • 문장 쌍 · 선택지 문제를 "하나의 긴 토큰 열"로 바꿔 같은 모델에 넣는 입력 변환 방법을 알게 됩니다.
  • 사전학습이 빠지면 성능이 얼마나 떨어지는지, LSTM보다 트랜스포머가 왜 나았는지 알게 됩니다.

초록 (번역)

자연어 이해에는 텍스트 함의, 질의응답, 의미 유사도 평가, 문서 분류처럼 다양한 과제가 있습니다. 정답이 없는 대규모 텍스트는 풍부하지만, 이런 특정 과제를 배우기 위한 정답 데이터는 부족해서 판별적으로 학습한 모델이 충분한 성능을 내기 어렵습니다. 우리는 정답 없는 다양한 텍스트로 언어 모델을 생성적으로 사전학습한 뒤, 과제마다 판별적으로 미세조정하면 이 과제들에서 큰 향상을 얻을 수 있음을 보입니다. 이전 방법들과 달리, 미세조정 때 과제에 맞춘 입력 변환을 써서 모델 구조는 최소한으로만 바꾸면서도 효과적으로 전이합니다. 자연어 이해의 다양한 벤치마크에서 이 방법의 효과를 보입니다. 과제에 무관한 우리의 범용 모델은 과제마다 특별히 설계한 구조를 쓰는 판별 학습 모델들을 앞서, 연구한 12개 과제 중 9개에서 최고 기록을 크게 높였습니다. 예를 들어 상식 추론(Stories Cloze Test)에서 절대값 8.9%, 질의응답(RACE)에서 5.7%, 텍스트 함의(MultiNLI)에서 1.5% 향상을 얻었습니다.

무엇을 풀었나

딥러닝 자연어 처리는 사람이 정답을 단 데이터가 많이 필요합니다. 정답 데이터는 비싸고 적은데, 정답 없는 글은 넘쳐납니다. 그때까지 정답 없는 글을 활용한 가장 확실한 사례는 word2vec 같은 단어 임베딩이었습니다. 하지만 이는 단어 수준 정보만 옮겼습니다.

단어보다 큰 수준의 정보를 옮기려 할 때 두 가지가 불분명했다고 논문은 정리합니다.

  1. 어떤 목표로 사전학습해야 하나: 언어 모델링 · 번역 · 담화 일관성 등 여러 목표가 있었고, 과제마다 이기는 방법이 달랐습니다.
  2. 어떻게 과제에 옮기나: 과제마다 구조를 바꾸거나, 복잡한 학습 방식을 쓰거나, 보조 목표를 더하는 등 합의된 방법이 없었습니다.

비슷한 시도(언어 모델 사전학습 후 미세조정)는 LSTM을 써서 짧은 범위만 예측할 수 있었고, 다른 시도는 사전학습 표현을 "추가 특징"으로만 써서 과제마다 새 파라미터가 많이 필요했습니다.

전체 흐름

mermaid
flowchart LR
  A[BooksCorpus<br/>책 7,000권 이상] --> B[1단계: 사전학습<br/>12층 트랜스포머 디코더<br/>다음 토큰 맞히기]
  B --> C[사전학습된 파라미터]
  D[과제 데이터<br/>문장 쌍 · 선택지 등] --> E[입력 변환<br/>시작 · 구분 · 끝 토큰으로<br/>한 줄로 이어 붙이기]
  C --> F[2단계: 미세조정<br/>선형 출력층 W_y 추가]
  E --> F
  F --> G[목표 = 과제 손실<br/>+ 0.5 × 언어 모델 손실]
  G --> H[과제 예측<br/>분류 · 유사도 · 정답 선택]

핵심 아이디어

1. 1단계 — 생성적 사전학습 (다음 토큰 맞히기)

한 문장 직관: 소설책 수천 권을 읽으며 "다음에 올 단어"를 계속 맞히다 보면, 문법 · 상식 · 이야기 흐름을 저절로 익히게 됩니다.

단계별 설명

  1. 정답 없는 글을 토큰 열 u1,…,unu_1, \dots, u_n으로 만듭니다.
  2. 각 위치에서 앞 kk개 토큰을 보고 다음 토큰의 확률을 계산합니다.
  3. 정답 토큰의 로그 확률을 모두 더한 값을 최대화합니다.
  4. 모델은 여러 층의 트랜스포머 디코더(앞쪽만 보도록 가린 셀프 어텐션)입니다.
L1(U)=∑ilog⁡P(ui∣ui−k,…,ui−1;Θ)L_1(\mathcal{U}) = \sum_i \log P(u_i \mid u_{i-k}, \dots, u_{i-1}; \Theta)
h0=UWe+Wp,hl=transformer_block(hl−1)    (l=1,…,n),P(u)=softmax(hnWe⊤)h_0 = U W_e + W_p, \qquad h_l = \mathrm{transformer\_block}(h_{l-1}) \;\; (l = 1, \dots, n), \qquad P(u) = \mathrm{softmax}(h_n W_e^{\top})
기호뜻
U\mathcal{U}정답 없는 말뭉치(토큰 열)
kk문맥 창 크기 — 앞에서 몇 개 토큰을 보는지
Θ\Theta모델 파라미터
UU문맥 토큰들(원-핫 벡터를 쌓은 행렬)
WeW_e토큰 임베딩 행렬 — 출력 쪽에서도 전치해 다시 씀
WpW_p위치 임베딩 행렬(학습되는 값)
hlh_lll번째 트랜스포머 블록의 출력
nn층 수(이 식에서는 토큰 수가 아니라 층 수)

왜 이렇게 했나: 저자들은 LSTM 같은 순환망보다 트랜스포머가 "더 구조화된 기억"을 줘서 긴 의존 관계를 잘 다룬다고 봤습니다. 또 문장 단위로 섞인 데이터(1B Word Benchmark) 대신, 긴 연속 텍스트가 있는 책 말뭉치를 골라 긴 문맥을 배우게 했습니다.

숫자로 해 보기 (해설용): "나는 커피를 마신다"에서 모델이 정답 토큰에 준 확률이 "커피를" 0.2, "마신다" 0.5라면, 이 두 위치의 기여는 log⁡0.2+log⁡0.5≈−1.61−0.69=−2.30\log 0.2 + \log 0.5 \approx -1.61 - 0.69 = -2.30입니다. 학습은 이 값을 0에 가깝게(확률을 1에 가깝게) 끌어올리는 방향으로 진행됩니다.

2. 2단계 — 판별적 미세조정과 보조 언어 모델 목표

한 문장 직관: 책을 많이 읽은 사람에게 시험 문제 유형만 조금 연습시키는 것입니다. 연습하는 동안에도 읽기 연습을 조금 이어 가면 더 빨리, 더 잘 배웁니다.

단계별 설명

  1. 정답이 있는 데이터 C\mathcal{C}의 입력 x1,…,xmx_1, \dots, x_m을 사전학습 모델에 넣습니다.
  2. 마지막 블록의 마지막 위치 출력 hlmh_l^m을 꺼냅니다.
  3. 그 위에 선형층 WyW_y 하나를 더해 정답 yy의 확률을 계산합니다.
  4. 정답 로그 확률 L2L_2를 최대화하되, 언어 모델 목표 L1L_1도 가중치 λ\lambda로 함께 더합니다.
P(y∣x1,…,xm)=softmax(hlmWy),L2(C)=∑(x,y)log⁡P(y∣x1,…,xm)P(y \mid x_1, \dots, x_m) = \mathrm{softmax}(h_l^m W_y), \qquad L_2(\mathcal{C}) = \sum_{(x, y)} \log P(y \mid x_1, \dots, x_m)
L3(C)=L2(C)+λ⋅L1(C)L_3(\mathcal{C}) = L_2(\mathcal{C}) + \lambda \cdot L_1(\mathcal{C})
기호뜻
C\mathcal{C}정답이 달린 과제 데이터
hlmh_l^m마지막 트랜스포머 블록의 마지막 토큰 위치 출력
WyW_y새로 추가하는 출력층(미세조정 때 새로 생기는 거의 유일한 파라미터)
L2L_2과제 정답의 로그 우도
L1(C)L_1(\mathcal{C})과제 데이터 텍스트에 대한 언어 모델 목표(보조)
λ\lambda보조 목표 가중치 — 논문 설정 0.5

논문은 보조 목표가 ① 일반화를 돕고 ② 수렴을 빠르게 했다고 적습니다. 미세조정 때 새로 생기는 파라미터는 WyW_y와 구분 토큰 임베딩뿐입니다.

숫자로 해 보기 (해설용): 어떤 예제에서 정답 확률이 0.8이면 L2L_2 기여는 log⁡0.8≈−0.22\log 0.8 \approx -0.22입니다. 같은 문장의 언어 모델 로그 우도가 −2.0-2.0이고 λ=0.5\lambda = 0.5이면 L3L_3 기여는 −0.22+0.5×(−2.0)=−1.22-0.22 + 0.5 \times (-2.0) = -1.22입니다. 두 목표를 함께 끌어올리게 됩니다.

3. 과제별 입력 변환 — 모든 입력을 한 줄로

한 문장 직관: 모델은 "이어진 글"만 읽어 봤으니, 문장 쌍이나 선택지 문제도 구분 기호를 넣어 한 줄짜리 글로 바꿔 줍니다.

단계별 설명

  1. 모든 입력의 앞뒤에 무작위로 초기화한 시작 토큰 ⟨s⟩, 끝 토큰 ⟨e⟩를 붙입니다.
  2. 함의(entailment): 전제 pp와 가설 hh를 구분 토큰(논문 표기 $)을 사이에 두고 이어 붙입니다.
  3. 유사도: 두 문장에는 순서가 없으므로 두 순서(A·B, B·A)를 각각 넣고, 두 출력 표현을 원소별로 더해 출력층에 넣습니다.
  4. 질의응답 · 상식 추론: 문서 zz, 질문 qq, 각 선택지 aka_k를 [z; q; $; a_k]로 이어 붙여 선택지마다 따로 처리한 뒤, 점수들을 소프트맥스로 정규화합니다.

왜 이렇게 했나: 이전 연구는 사전학습 표현 위에 과제별 구조를 새로 얹었는데, 그러면 과제마다 맞춤 설계가 다시 필요하고 그 새 부분은 사전학습의 혜택을 못 받습니다. 입력만 바꾸면 같은 모델을 거의 그대로 쓸 수 있습니다.

숫자로 해 보기 (해설용)

  • 함의 입력 예: ⟨s⟩ 비가 온다 $ 땅이 젖었다 ⟨e⟩
  • 유사도: A·B 순서 출력이 (0.2,0.6)(0.2, 0.6), B·A 순서 출력이 (0.4,0.2)(0.4, 0.2)이면 더해서 (0.6,0.8)(0.6, 0.8)을 출력층에 넣습니다.
  • 선택지 3개의 점수가 1.2,0.3,−0.51.2, 0.3, -0.5이면 e1.2≈3.32e^{1.2} \approx 3.32, e0.3≈1.35e^{0.3} \approx 1.35, e−0.5≈0.61e^{-0.5} \approx 0.61, 합 5.285.28 → 확률 약 0.63,0.26,0.120.63, 0.26, 0.12입니다. 첫 선택지를 고릅니다.

4. 모델과 학습 설정 (논문 기준)

  • 사전학습 데이터: BooksCorpus — 모험 · 판타지 · 로맨스 등 7,000권 이상의 미출간 책. 이 말뭉치에서 토큰 수준 퍼플렉서티 18.4
  • 구조: 12층 디코더 전용 트랜스포머, 상태 768차원, 어텐션 헤드 12개, 피드포워드 내부 3,072차원, 활성화 함수 GELU, 위치 임베딩은 사인 함수 대신 학습값
  • 토큰: BPE 어휘(병합 40,000번)
  • 사전학습: Adam, 최대 학습률 2.5×10−42.5 \times 10^{-4}(처음 2,000번 갱신 동안 0에서 선형 증가 후 코사인으로 0까지), 512토큰 연속 시퀀스 64개 미니배치, 100에폭, 초기화 N(0,0.02)N(0, 0.02), 드롭아웃 0.1, 변형 L2 정규화 w=0.01w = 0.01
  • 미세조정: 대부분 학습률 6.25×10−56.25 \times 10^{-5}, 배치 32, 3에폭이면 충분, 학습의 0.2% 동안 워밍업 후 선형 감소, 분류기 드롭아웃 0.1, λ=0.5\lambda = 0.5

결과

자연어 추론(정확도 %)

데이터이 논문비교
MNLI (일치 / 불일치)82.1 / 81.4이전 최고보다 최대 1.5%p 향상
SNLI89.90.6%p 향상
SciTail88.35%p 향상
QNLI88.15.8%p 향상
RTE (예제 2,490개)56.0멀티태스크 biLSTM 61.7보다 낮음

질의응답 · 상식 추론(정확도 %)

데이터이 논문이전 최고
Story Cloze86.577.6
RACE (전체)59.053.3 (9개 앙상블)

의미 유사도 · 분류 · GLUE

데이터이 논문이전 최고
CoLA (매슈스 상관)45.435.0
SST-2 (정확도)91.393.2
MRPC (F1)82.386.0
STS-B (피어슨)82.081.0
QQP (F1)70.366.1
GLUE 종합72.868.9

전체적으로 12개 데이터 중 9개에서 최고 기록을 냈고, 작은 데이터(STS-B, 학습 예제 5.7천 개)부터 큰 데이터(SNLI, 55만 개)까지 잘 작동했습니다.

분석

  • 옮기는 층 수: 사전학습 층을 더 많이 옮길수록 좋아졌고, MultiNLI에서는 전체를 옮길 때 최대 9%까지 이득이 났습니다.
  • 제로샷 행동: 미세조정 없이 언어 모델만으로 푸는 휴리스틱(예: SST-2에서 문장 뒤에 "very"를 붙이고 "positive"와 "negative" 중 확률 높은 쪽 고르기)의 성능이 사전학습이 진행될수록 꾸준히 올랐습니다.

제거 실험(8개 과제 평균 점수)

설정평균
트랜스포머 + 보조 LM (전체)74.7
보조 LM 없이75.0
사전학습 없이59.9
LSTM(2,048 유닛 1층) + 보조 LM69.1
  • 사전학습을 빼면 전체 모델보다 14.8% 떨어졌습니다.
  • 트랜스포머 대신 LSTM을 쓰면 평균 5.6점 떨어졌고, LSTM이 앞선 것은 MRPC 하나뿐이었습니다.
  • 보조 목표는 NLI · QQP처럼 큰 데이터에서 도움이 됐고 작은 데이터에서는 그렇지 않았습니다.

왜 중요한가 · 이후 영향

  • 사전학습 + 미세조정의 표준화: 큰 언어 모델 하나를 사전학습해 두고 과제마다 조금씩 맞추는 방식이 이후 NLP의 기본 흐름이 됐습니다. 같은 해 BERT도 같은 틀을 양방향으로 확장했습니다.
  • 디코더 전용 트랜스포머: 다음 토큰 예측만으로 학습하는 디코더 구조는 GPT-2 · GPT-3를 거쳐 지금의 대형 언어 모델로 이어집니다.
  • 제로샷의 씨앗: 미세조정 없이도 과제를 일부 풀 수 있다는 관찰이 GPT-2의 "언어 모델은 비지도 멀티태스크 학습자" 주장으로 발전합니다.

한계 · 주의할 점

  • 작은 데이터에서는 약했습니다. RTE에서는 멀티태스크 biLSTM보다 낮았고, 논문은 멀티태스크 학습을 시도하지 않았다고 밝힙니다.
  • 모든 과제에서 이긴 것은 아닙니다. SST-2 · MRPC에서는 이전 최고보다 낮았습니다.
  • 한 방향만 봅니다. 앞쪽 토큰만 보는 언어 모델이라 문장 뒤쪽 문맥을 함께 보지 못합니다. BERT가 이 점을 겨냥합니다.
  • 보조 목표의 효과는 혼재: 평균 점수만 보면 보조 LM이 없을 때(75.0)가 조금 더 높았습니다. 데이터 크기에 따라 효과가 다르다는 것이 논문의 해석입니다.
  • 미세조정이 여전히 필요합니다. 과제마다 정답 데이터와 학습이 필요하다는 점은 GPT-3의 퓨샷 학습이 다시 다룹니다.

이어서 읽을 것

용어 정리

용어쉬운 뜻
사전학습(pre-training)정답 없는 큰 데이터로 먼저 일반 능력을 학습하는 단계
미세조정(fine-tuning)사전학습한 모델을 과제 데이터로 조금 더 학습시키는 단계
생성적(generative)데이터 자체(다음 토큰)를 만들어 내도록 학습하는 방식
판별적(discriminative)입력이 주어졌을 때 정답 라벨을 맞히도록 학습하는 방식
언어 모델(language model)앞 토큰들로 다음 토큰의 확률을 계산하는 모델
트랜스포머 디코더앞쪽 토큰만 보도록 가린 셀프 어텐션을 쌓은 구조
보조 목표(auxiliary objective)주 목표에 함께 더해 학습을 돕는 추가 목표
함의(entailment) · NLI두 문장이 함의 · 모순 · 중립 중 어떤 관계인지 판단하는 과제
제로샷(zero-shot)해당 과제 학습 없이 바로 푸는 것
퍼플렉서티(perplexity)언어 모델이 다음 토큰을 얼마나 헷갈려하는지. 낮을수록 좋음
GLUE여러 자연어 이해 과제를 묶은 평가 모음
제거 실험(ablation)구성 요소를 하나씩 빼 보며 효과를 재는 실험

스스로 점검

  1. GPT-1의 학습은 어떤 두 단계로 이뤄지고, 각 단계의 목표는 무엇인가요?

    1단계는 정답 없는 책 텍스트로 다음 토큰 로그 확률 L1L_1을 최대화하는 사전학습, 2단계는 과제 데이터로 정답 로그 확률 L2L_2에 0.5×L10.5 \times L_1을 더한 L3L_3를 최대화하는 미세조정입니다.

  2. 문장 쌍이나 선택지 문제를 과제별 구조 없이 어떻게 처리했나요?

    시작 · 구분 · 끝 토큰을 넣어 하나의 연속 토큰 열로 이어 붙였습니다. 유사도는 두 순서를 각각 처리해 더했고, 선택지 문제는 선택지마다 따로 처리한 뒤 소프트맥스로 비교했습니다.

  3. 사전학습을 빼면, 그리고 트랜스포머 대신 LSTM을 쓰면 어떻게 됐나요?

    사전학습을 빼면 전체 모델보다 14.8% 떨어졌고, LSTM을 쓰면 평균 점수가 5.6점 떨어졌습니다.

다음에 볼 것

이 글을 이해했다면 이어서 보면 좋은 항목입니다.

출처

AI 원리부터 이해하기 · NLP·트랜스포머 모듈

NLP·트랜스포머 모듈 학습

이 글은 NLP·트랜스포머 모듈의 학습 자료입니다. 전체 23개 자료 중 14번째입니다.

AI 기초 과정은 현재 진도 저장을 지원하지 않습니다.

출처·원문

원문 보기

요약만

저작권 보호