오늘 끝나면
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 세 역할을 동시에 맡는 도서관 검색
단 한 줄의 핵심 공식
Luong의 Dot-product Attention 기억함? Transformer 심장은 거기에 나눗셈 하나 더한 게 전부임.
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가 갈라져 나왔다