오늘 끝나면
Transformer
- ✓Self-Attention이 모든 단어의 관계 행렬을 한 번에 계산한다는 점을 이해한다
- ✓Query·Key·Value를 검색 비유로 설명한다
- ✓스케일링과 위치 인코딩이 왜 필요한지 말한다
실습 미션
Attention 행렬에서 '지쳤기'가 '동물은'을 강하게 보도록 단어 방향을 조절한다.
성공 조건
- □강조 행을 '지쳤기'로 선택
- □가장 많이 보는 대상이 '동물은'이 되게 만들기
- □÷√dk 토글을 껐다 켜며 분포 쏠림 차이 확인
AI · Day 10 / 지도학습 · 생성 DL
Attention Is
All You Need
어제까지는 RNN에 Attention을 붙였다. 2017년, 구글 8명이 반대로 물었다. RNN을 빼고 Attention만 남기면? 순차 처리가 사라졌다. 이 구조가 GPT와 Claude의 심장이 됐다.
RNN을 통째로 삭제하다
Seq2Seq+Attention은 강력했다. 그런데 고질병이 하나 있었다. 한 번에 한 단어씩만 처리한다.
RNN은 h₂를 계산하려면 h₁이 먼저 끝나야 한다. 1000단어면 1000번 줄 서서 기다린다.
GPU는 수천 연산을 동시에 처리한다. 그런데 순차 의존성이 그 능력을 묶어버린다.
2017년 6월, Vaswani 등 8명의 답은 과격했다. RNN을 통째로 삭제하고 Attention만 남겼다. 모든 단어가 서로를 동시에 본다. 문장 전체를 한 번에 처리한다.
순차 의존성을 없애 GPU 병렬성을 끝까지 끌어쓴다
Query, Key, Value, 도서관 검색
Self-Attention의 핵심은 의외로 단순하다. 모든 단어가 세 가지 역할을 동시에 맡는다.
도서관을 떠올려 본다. Query는 내가 던지는 질문이다. Key는 각 책의 색인표다. Value는 책의 실제 내용이다.
질문(Q)을 모든 색인(K)과 맞춰 본다. 잘 맞는 책의 내용(V)을 많이 가져온다.
문장 "그 동물은 길을 건넜다. 너무 지쳤기때문이다"에서 "지쳤기"의 Query는 "동물"의 Key와 강하게 매칭된다. 모델은 무엇이 지쳤는지 스스로 알아낸다. 문법 규칙을 하나도 주지 않았는데 된다.
모든 단어가 Q·K·V 세 역할을 동시에 맡는 도서관 검색
단 한 줄의 핵심 공식
Transformer의 심장은 Luong의 Dot-product Attention에 나눗셈 하나를 더한 게 전부다.
Query와 Key를 내적해 점수를 낸다. √dₖ로 나눠 크기를 안정시킨다. softmax로 확률을 만든다. 그 확률로 Value를 가중합한다.
이 한 줄이 RNN 수십 년을 대체했다.
파이썬 코드 보기
import torch, torch.nn.functional as F
def attention(Q, K, V):
d_k = Q.size(-1)
scores = Q @ K.transpose(-2, -1)
scores = scores / d_k ** 0.5 # 스케일링
weights = F.softmax(scores, dim=-1)
return weights @ V, weights # 가중합
# Q,K,V: (batch, seq_len, d_k)
out, attn = attention(Q, K, V)왜 √dₖ로 나누는가? 차원이 커지면 내적값이 너무 커진다. 그러면 softmax가 한쪽으로 쏠린다. 나눠주면 기울기가 살아 학습이 안정된다.
여러 머리와 위치 신호
머리(head)가 하나면 한 종류의 관계만 본다. 그래서 Transformer는 Attention을 여러 개 병렬로 돌린다.
8개 head가 각자 다른 관점을 본다. 한 head는 주어와 동사의 관계를 본다. 다른 head는 멀리 떨어진 대명사 참조를 본다. 결과를 이어붙여(concat) 섞으면 풍부한 표현이 된다.
그런데 문제가 하나 있다. Attention은 단어를 동시에보니 순서 정보가 없다. "개가 사람을 물다"와 "사람이 개를 물다"를 구분하지 못한다. 이때 위치 인코딩(Positional Encoding)을 더해 각 단어에 좌표를 심어준다.
- Multi-Head는 여러 관점을 병렬로 학습한다
- Positional Encoding은 잃어버린 순서를 sin/cos로 복원한다
- 잔차 연결과 정규화는 깊게 쌓아도 학습되게 한다
8개 머리가 각자 다른 관점을 병렬로 본 뒤 이어붙인다
모든 LLM의 출발점
Transformer는 번역기로 태어났다. 그런데 진짜 혁명은 그 다음이었다. 이 구조를 반으로 쪼개 쓰기 시작했다.
인코더만 떼면 BERT(이해 특화)가 된다. 디코더만 떼면 GPT(생성 특화)가 된다. 매일 쓰는 ChatGPT, Claude, Gemini가 전부 2017년 이 한 논문의 후손이다.
비즈니스 교훈은 분명하다. 병렬화가 가능한 구조가 GPU와 데이터와 자본을 먹고 끝없이 커질 수 있었다. 그래서 "모델을 더 키우면 더 똑똑해진다"는 스케일링 법칙이 성립한다. Transformer는 알고리즘이 아니라 확장 가능한 플랫폼이었다.
Q. Attention은 단어를 동시에 보는데, 그럼 순서 정보는 어떻게 아는가?
모델 스스로는 순서를 모른다. 입력 임베딩에 Positional Encoding(위치마다 다른 sin/cos 패턴)을 더해각 단어에 위치 좌표를 심는다. 그래서 "개가 사람을 물다"와 "사람이 개를 물다"를 구분한다.한 구조를 반으로 쪼개 BERT·GPT가 갈라져 나왔다