반응형
GPT-2: 이해하는 로봇이 학습하는 법
GPT-2 논문(Language Models are Unsupervised Multitask Learners)은 "다음에 올 단어를 예측하는 것만으로 모든 문제를 풀 수 있다"는 것을 증명했습니다.
1. Encode: 입력을 숫자로 바꾸는 세부 과정
단순한 숫자가 아니라, 단어의 의미와 위치를 결합하는 과정입니다.
(1) BPE (Byte Pair Encoding)
GPT-2는 단어를 무작정 쪼개지 않고, 가장 자주 나타나는 문자 쌍을 하나로 합쳐서 어휘 사전(Vocab)을 만듭니다. (약 50,257개 토큰)
(2) 코드 구현: Embedding & Position
# 768차원의 숫자로 변환하는 과정
self.wte = nn.Embedding(vocab_size, n_embd) # 단어 임베딩 (Word Token Embedding)
self.wpe = nn.Embedding(n_ctx, n_embd) # 위치 임베딩 (Word Position Embedding)
def encode_step(input_ids):
# input_ids: [나는, 학교, 에] -> [12, 455, 32]
tokens = self.wte(input_ids) # 단어 의미 추출
positions = self.wpe(torch.arange(input_ids.size(-1))) # 위치 값 추출
return tokens + positions # 두 벡터를 더해서 최종 입력값 형성
2. Decode: 뇌 세포(Transformer)들의 연산 흐름
GPT-2는 디코더 블록을 12개(Small)에서 48개(Extra Large)까지 쌓아 올립니다.
(1) Masked Self-Attention (Causal Masking)
GPT-2의 핵심은 "과거만 보고 미래를 맞히는 것"입니다. 그래서 미래 단어를 계산에서 제외하는 마스크를 씌웁니다.
# Masking 코드 (과거 단어만 보게 함)
mask = torch.tril(torch.ones(n_ctx, n_ctx))
# 결과값 (삼각형 모양):
# [[1, 0, 0],
# [1, 1, 0],
# [1, 1, 1]] -> 0인 부분은 보지 못하게 가림
(2) Attention의 내부 함수 (Q, K, V)
단어들 사이의 관계를 점수로 매기는 과정입니다.
def attention(q, k, v, mask):
# 1. Q와 K를 곱해서 단어 간 연관도 계산
scores = torch.matmul(q, k.transpose(-1, -2)) / sqrt(d_k)
# 2. 마스크 적용 (미래 단어 점수를 -무한대로)
scores = scores.masked_fill(mask == 0, float('-inf'))
# 3. 확률로 변환 후 V(정보값)와 곱하기
return torch.matmul(F.softmax(scores, dim=-1), v)
(3) Feed-Forward & GELU 활성화 함수
GPT-2는 일반적인 ReLU 대신 GELU를 사용해 더 부드러운 의사결정을 내립니다.
GELU(Gaussian Error Linear Unit):
중학생용 설명: "입력값이 작으면 부드럽게 무시하고, 크면 확실하게 전달하는 필터"
0.5 * x * (1 + tanh(sqrt(2/pi) * (x + 0.044715 * x^3))) 중학생용 설명: "입력값이 작으면 부드럽게 무시하고, 크면 확실하게 전달하는 필터"
3. 전체 흐름 요약 예시
입력: "오늘 날씨"
BPE 토큰화
WTE + WPE 합체
12개의 Decoder Block 통과
Layer Norm (최종 정돈)
Linear Head (점수 계산)
출력 확률: "좋다"(90%)
# 논문에 명시된 최종 예측 함수
def predict_next_token(x):
x = self.transformer(x) # 위의 모든 과정을 수행
logits = self.lm_head(x) # 전체 단어장(50,257개)에 대한 점수 환산
return torch.argmax(logits, dim=-1) # 가장 높은 점수 단어 선택
상세 구현은 OpenAI 공식 레포지토리의 model.py를 참고하세요.
반응형
'Bigdata' 카테고리의 다른 글
| ROCm - Ryzen AI HX 370, 450 이하 PyTorch와 ComfyUI 설치하기 (0) | 2026.01.30 |
|---|---|
| Nemotron 3에 대해서 다른 모델보다 다른점 (1) | 2025.12.23 |
| ComfyUI on Windows + 8 GB GPU 메모리 제한을 극복하는 방법 (0) | 2025.12.23 |
| ComfyUI on Windows + 8 GB GPU 메모리 제한을 극복하는 방법 (0) | 2025.12.21 |
| AMD AI 9 관련 (370 등) CPU ROCm 지원, 설치 방법 (0) | 2025.12.19 |