GPT-2(Generative Pre-trained Transformer 2)는 이름에서 알 수 있듯이 Transformer 아키텍처를 기반으로 한 생성형(Generative) 모델입니다. GPT-2의 핵심 동작 원리는 자동회귀(Autoregressive)입니다.
이 문서에서는 자동회귀의 개념이 무엇인지, 그리고 GPT-2가 학습 과정에서 이 원리를 어떻게 구현하는지, 특히 '룩-어헤드 마스크'의 역할을 중심으로 자세히 설명합니다.
1. 자동회귀 (Autoregressive) 란?
자동회귀(AR)는 간단히 말해 "자기 자신(Auto)을 입력으로 참조하여 다음 결과를 예측(Regressive)하는" 방식입니다.
언어 모델의 맥락에서 이는 다음에 올 단어를 예측하기 위해 이전에 생성된 모든 단어들을 입력으로 사용한다는 의미입니다.
수학적으로 문장의 확률은 다음과 같은 조건부 확률의 곱으로 표현됩니다.
$$P(w_1, w_2, ..., w_n) = \prod_{i=1}^{n} P(w_i | w_1, w_2, ..., w_{i-1})$$
모델의 학습 목표는 이 확률을 최대화하는 것입니다. 즉, 대규모 텍스트 코퍼스를 학습하여, $i-1$번째까지의 단어들이 주어졌을 때 $i$번째 단어를 정확하게 예측하도록 훈련됩니다.
- $P(\text{"am"} | \text{"I"})$ : "I"가 주어졌을 때 "am"이 나올 확률을 높여야 함
- $P(\text{"a"} | \text{"I", "am"})$ : "I am"이 주어졌을 때 "a"가 나올 확률을 높여야 함
- $P(\text{"student"} | \text{"I", "am", "a"})$ : "I am a"가 주어졌을 때 "student"가 나올 확률을 높여야 함
2. GPT-2의 구조: 오직 'Decoder' 뿐
오리지널 Transformer는 기계 번역을 위해 문장을 '이해'하는 Encoder와 문장을 '생성'하는 Decoder로 구성됩니다.
하지만 GPT-2는 텍스트 생성이 주 목적이므로, 오리지널 Transformer 구조에서 Decoder 블록만을 가져와 여러 층으로 쌓아 올린 구조를 가집니다. (Encoder는 사용하지 않습니다.)
GPT-2의 Decoder 블록은 크게 두 부분으로 구성됩니다.
- Masked Multi-Head (Self) Attention (마스크드 멀티 헤드 어텐션)
- Feed-Forward Network (피드 포워드 신경망)
여기서 자동회귀 '학습' 원리를 구현하는 가장 핵심적인 장치가 바로 Masked Multi-Head Attention입니다.
3. 핵심 메커니즘: 룩-어헤드 마스크 (Look-Ahead Mask)
자동회귀 모델은 $i$번째 단어를 예측할 때, $i$번째 단어 자신을 포함하여 그 이후에 오는 단어들($i+1, i+2, ...$)을 절대 참조해서는 안 됩니다. 만약 훈련 데이터에서 미래의 정답을 "엿보게" 된다면 모델은 아무것도 학습할 수 없게 됩니다.
GPT-2는 '룩-어헤드 마스크(Look-Ahead Mask)'라는 장치를 사용해 이를 강제로 방지합니다.
마스크의 작동 방식
'마스크(Mask)'는 특정 위치의 정보(미래 정보)를 "가린다"는 뜻입니다.
위 이미지는 어텐션 마스크가 작동하는 방식을 보여줍니다. 어텐션 스코어 행렬에서, 예측해야 할 단어의 미래 위치에 해당하는 값들을 음의 무한대($-\infty$)로 강제 설정합니다.
이 행렬이 Softmax 함수를 통과하면, 음의 무한대 값들은 0이 됩니다.
- 결과: 학습 시, 모델이 $i$번째 위치의 단어를 예측해야 할 때, $1$부터 $i$번째 위치까지만 어텐션(집중)할 수 있고, $i+1$번째 이후의 단어들은 어텐션 가중치가 0이 되어 완전히 무시됩니다.
이 마스크 덕분에 GPT-2는 오직 과거와 현재의 정보만을 바탕으로 미래를 예측하도록 훈련됩니다.
4. GPT-2의 자동회귀 학습 과정 (단계별)
텍스트를 생성(추론)할 때는 한 단어씩 순차적으로 입력하지만, 학습(Training)할 때는 효율성을 위해 문장 전체를 한 번에 입력합니다.
- 학습 데이터 예시: "오늘 날씨가 좋네요"
Step 1: 입력 및 타겟 설정
모델은 문장 전체를 입력으로 받습니다. 이 때, 학습의 "정답(Label 또는 Target)"은 입력을 한 칸씩 왼쪽으로 민(left-shifted) 시퀀스가 됩니다.
- Input: `<start>`, "오늘", "날씨가", "좋네요"
- Target: "오늘", "날씨가", "좋네요", `<end>`
Step 2: 병렬 예측 (Masked Attention의 역할)
- 입력 시퀀스(`<start>`, "오늘", "날씨가", "좋네요")가 Decoder 스택에 한 번에 전달됩니다.
- Masked Multi-Head Attention이 적용됩니다.
- 마스크 덕분에 모델은 모든 위치의 다음 단어를 병렬로 예측하지만, 각 위치는 자신의 과거 정보만 참조할 수 있습니다.
- 1번째 위치 ("`<start>`") 입력 -> "오늘" 예측 (오직 "`<start>`"만 참조)
- 2번째 위치 ("오늘") 입력 -> "날씨가" 예측 (오직 "`<start>`", "오늘"만 참조)
- 3번째 위치 ("날씨가") 입력 -> "좋네요" 예측 (오직 "`<start>`", "오늘", "날씨가"만 참조)
- 4.번째 위치 ("좋네요") 입력 -> "`<end>`" 예측 (모든 이전 단어 참조)
Step 3: 손실(Loss) 계산
- 모델이 각 위치에서 예측한 확률 분포(Prediction)와 실제 정답(Target)을 비교합니다.
- 1번째 위치: 예측값 vs "오늘"
- 2번째 위치: 예측값 vs "날씨가"
- 3번째 위치: 예측값 vs "좋네요"
- 4번째 위치: 예측값 vs "`<end>`"
- 모든 위치에서의 예측 오류(주로 Cross-Entropy Loss 사용)를 합산하여 총 손실(Total Loss)을 계산합니다.
Step 4: 역전파 (Backpropagation)
- 계산된 총 손실 값을 최소화하는 방향으로 모델의 모든 가중치(파라미터)를 업데이트합니다.
- 이 과정을 수많은 텍스트 데이터에 대해 반복합니다.
요약
- GPT-2는 Transformer Decoder 아키텍처를 기반으로 합니다.
- 자동회귀(Autoregressive) 모델의 학습 목표는 이전 단어들($1$ ~ $i-1$)이 주어졌을 때, 다음 단어($i$)가 나올 확률을 최대화하는 것입니다.
- GPT-2는 '룩-어헤드 마스크(Look-Ahead Mask)'를 사용하여, 학습 시 문장 전체를 병렬로 처리하면서도 각 위치가 미래의 정답을 참조하지 못하도록 강제합니다.
- 이러한 학습 방식 덕분에 GPT-2는 주어진 컨텍스트(과거 정보)를 바탕으로 가장 확률 높은 다음 단어를 예측하는 능력을 갖추게 됩니다.