1. "구글 번역기는 왜 갑자기 똑똑해졌나?"
2016년 말, 구글 번역기가 갑자기 '외계인 고문설'이 돌 정도로 똑똑해졌다는 뉴스 기억하시나요? 그전까지 "아버지가 방에 들어가신다"를 "Father bag enter" 수준으로 번역하던 녀석이, 갑자기 유려한 영어 문장을 뱉어내기 시작했죠. 그 배후에는 Transformer 아키텍처가 있었습니다.
저는 당시 프로젝트에서 LSTM(Long Short-Term Memory)으로 챗봇을 만들고 있었는데, 긴 문장만 들어오면 멍청이가 되는 문제 때문에 골머리를 앓고 있었습니다. "앞의 내용을 다 까먹어버려요." 선배가 말했습니다. "야, 구글이 논문 하나 냈더라. 'Attention Is All You Need'. 그거 한번 봐봐."
제목부터 도발적인 이 논문은, 제 AI 인생을 완전히 바꿔놓았습니다.
2. 처음엔 뭐가 이해가 안 갔나
논문을 처음 폈을 때, 저는 멘붕에 빠졌습니다.
혼란 1 - "RNN이 없다고?"
그전까지 NLP(자연어 처리)의 국룰은 RNN이었습니다. "나는 학교에 간다"를 처리하려면 당연히 "나는" -> "학교에" -> "간다" 순서로 읽어야 하잖아요? 그런데 트랜스포머는 "순서 따위 필요 없다. 한방에(Parallel) 다 넣어라"라고 합니다. "아니, 순서가 없는 언어가 말이 돼?"
혼란 2 - "Attention이 뭔데?"
"Q, K, V... 쿼리, 키, 밸류?"
데이터베이스 용어인가? 왜 여기서 나오지?
수식은 softmax(QK^T / sqrt(d)) 같은 외계어였고, 도대체 이게 왜 "문맥을 이해하는" 원리인지 와닿지가 않았습니다.
3. 어떤 포인트에서 이해가 됐나
이해하는 데 결정적이었던 비유는 "소개팅"과 "도서관 검색"이었습니다.
Attention = 소개팅에서의 눈치 게임
여러 명이 모인 미팅 자리(문장)를 상상해보세요. "철수가 영희에게 사과를 주었다."
- RNN: 한 명씩 차례대로 자기소개를 듣습니다. 맨 마지막 사람 소개를 들을 때쯤이면 첫 번째 사람 이름은 까먹습니다.
- Transformer (Self-Attention): 모든 사람이 서로를 동시에 쳐다봅니다.
- '철수'라는 단어는 '주었다'라는 단어를 뚫어지게 쳐다봅니다. (주어-동사 관계)
- '사과'라는 단어도 '주었다'를 쳐다봅니다. (목적어-동사 관계)
- '영희'도 '주었다'를 봅니다.
각 단어가 "나랑 연관 있는 놈이 누구야?"하고 눈빛 교환(Attention)을 하는 겁니다. 거리가 멀리 떨어져 있어도 상관없습니다. 그냥 쳐다보면 되니까요. 이게 바로 RNN의 한계(거리 먼 단어 못 기억함)를 깨부순 비결이었습니다.
Q, K, V = 도서관 검색
- Query (질문): "내가 지금 찾고 싶은 정보가 뭐야?" (예: '철수'와 관련된 행동)
- Key (색인): "너는 어떤 정보를 갖고 있어?" (각 단어들의 꼬리표)
- Value (내용): "실제 그 단어의 의미는 뭐야?" (벡터값)
'철수'(Query)가 문장 전체를 훑으면서 '주었다'(Key)와 딱 맞는 열쇠구멍을 찾으면, 그 단어의 의미(Value)를 쏙 가져와서 자신의 의미를 강화합니다. 결국 '철수'는 그냥 '철수'가 아니라 '영희에게 사과를 준 철수'라는 풍부한 문맥을 가진 벡터로 다시 태어납니다.
4. 구조 뜯어보기 - 인코더와 디코더
트랜스포머는 크게 인코더(Encoder)와 디코더(Decoder)로 나뉩니다. "영어를 한국어로 번역하는 상황"을 예로 들어보죠.
1단계 - Positional Encoding (위치 정보)
트랜스포머는 병렬로 처리하기 때문에 순서를 모릅니다. ("학교에 나는 간다"와 "나는 학교에 간다"를 똑같이 취급) 그래서 각 단어에 번호표를 붙여줍니다. "너는 1번, 너는 2번..." 이걸 수학적으로 사인/코사인 함수를 써서 우아하게 붙입니다.
2단계 - Multi-Head Attention (여러 관점에서 보기)
하나의 Attention만 쓰면 시야가 좁아집니다. 그래서 8개의 눈(Head)을 만듭니다.
- 1번 눈: "누가(Subject) 했는지 봐."
- 2번 눈: "언제(Time) 했는지 봐."
- 3번 눈: "무엇을(Object) 했는지 봐."
각자 다른 관점에서 문장을 뜯어보고, 나중에 합칩니다. 이게 Multi-Head Attention입니다.
3단계: Feed Forward & Residual Connection
Attention으로 얻은 정보를 잘 섞어서(Feed Forward), 원래 정보와 더해줍니다(Residual Connection). "원래의 나" + "문맥을 파악한 나" = "더 똑똑해진 나"가 되는 거죠.
5. 실제 - 코드로 이해하기 (PyTorch)
전체 구조를 다 짜는 건 복잡하니, 핵심인 Attention 부분만 보겠습니다.
import torch
import torch.nn as nn
import math
class MultiHeadAttention(nn.Module):
def __init__(self, d_model=512, num_heads=8):
super().__init__()
self.num_heads = num_heads
self.d_k = d_model // num_heads # 각 헤드의 차원
# Q, K, V, O를 위한 선형 변환 층
self.W_q = nn.Linear(d_model, d_model)
self.W_k = nn.Linear(d_model, d_model)
self.W_v = nn.Linear(d_model, d_model)
self.W_o = nn.Linear(d_model, d_model)
def forward(self, x):
batch_size, seq_len, d_model = x.shape
# 1. Q, K, V 생성 (Linear Projection)
Q = self.W_q(x)
K = self.W_k(x)
V = self.W_v(x)
# 2. 헤드 나누기 (Split Heads)
Q = Q.view(batch_size, seq_len, self.num_heads, self.d_k).transpose(1, 2)
K = K.view(batch_size, seq_len, self.num_heads, self.d_k).transpose(1, 2)
V = V.view(batch_size, seq_len, self.num_heads, self.d_k).transpose(1, 2)
# 3. Attention Score 계산 (Scaled Dot-Product)
# Q와 K를 곱해서 유사도를 구함
scores = torch.matmul(Q, K.transpose(-2, -1)) / math.sqrt(self.d_k)
# 4. Softmax로 확률로 변환
attention_weights = torch.softmax(scores, dim=-1)
# 5. Value와 곱해서 최종 정보 추출
context = torch.matmul(attention_weights, V)
# 6. 헤드 합치기 (Concat)
context = context.transpose(1, 2).contiguous().view(batch_size, seq_len, d_model)
output = self.W_o(context)
return output
이 코드를 처음 짰을 때, transpose와 view에서 차원(Dimension)이 꼬여서 정말 많이 울었습니다.
하지만 한 번 돌아가는 걸 보고 나니, "와, 이게 진짜 for loop 하나 없이 행렬 곱셈만으로 문장을 이해하네?" 싶어서 소름이 돋았습니다. GPU가 좋아하는 이유를 알겠더군요.
6. Transformer가 낳은 괴물들 - BERT와 GPT
이 논문 하나가 AI의 역사를 다시 썼습니다.
BERT (Bidirectional Encoder Representations from Transformers)
- 구조: 트랜스포머의 인코더(Encoder)만 떼어낸 것.
- 특기: "빈칸 맞추기". 문맥을 양방향으로 이해하는 데 최강입니다.
- 용도: 검색 엔진, 감성 분석, 질문 답변. (구글 검색이 이걸로 바뀜)
GPT (Generative Pre-trained Transformer)
- 구조: 트랜스포머의 디코더(Decoder)만 떼어낸 것.
- 특기: "다음 단어 예측하기". 말을 지어내는 데 최강입니다.
- 용도: 챗봇, 작문, 코딩. (우리가 아는 그 ChatGPT)
결국 우리는 Transformer의 시대에 살고 있습니다.
7. 한 줄 요약
Transformer는 'Attention'이라는 메커니즘을 통해 문장 내 모든 단어의 관계를 한 번에(Parallel) 파악하는 혁명적인 아키텍처입니다. RNN의 고질병이었던 '기억 상실'과 '속도 저하'를 동시에 해결했으며, 오늘날 모든 거대 언어 모델(LLM)의 조상님입니다.