AI 입문 시리즈
이전 4편에서 정규화(BatchNorm, LayerNorm, GroupNorm)를 통해 학습 안정화를 배웠다.
이번 5편에서는 트랜스포머(Transformer)의 핵심 엔진인 어텐션(Attention) 메커니즘을 본격적으로 파고든다.
구체적으로 Scaled Dot-Product Attention, Self-Attention, Multi-Head Attention을 수식·그래프·미분·장단점·실전 팁으로 비교하고 설명하자.
목표는 TR(트랜스포머)를 겨냥했지만, 그 바닥을 이루는 공통 원리를 확실히 잡는 것이다.
초심자도 읽고 따라오면 “아, 어텐션이 어떻게 시퀀스 정보를 연결하고 왜 강력한지” 감각이 잡히게 하는 것이 이 글의 목표이다.
이전 편들보다 더 깊고 자세한 설명을 추가하여, 개념이 처음인 분들도 단계적으로 이해할 수 있도록 하겠다.
각 부분에서 왜 이 개념이 필요한지, 어떻게 작동하는지, 실전에서 주의할 점까지 세세히 풀어보자.
0. 이번 편의 핵심
- 어텐션 = “집중” 메커니즘: 시퀀스 데이터에서 중요한 부분에만 초점을 맞춰 정보를 가중 평균한다.
마치 사람이 문장을 읽을 때 핵심 단어에 주의를 기울이는 것처럼. - 각 변형의 역할과 차이를 알면 왜 트랜스포머가 RNN을 대체했는지 이해: RNN의 순차 처리 한계를 넘어 병렬 처리 가능.
- Scaled Dot-Product Attention: 기본 빌딩 블록, 쿼리-키-밸류로 유사도 계산.
- Self-Attention: 입력 자신에게 적용, 시퀀스 내 관계 모델링.
- Multi-Head Attention: 여러 관점에서 어텐션, 더 풍부한 표현.
- 배치 처리와 행렬 미분을 알면 실전 계산이 훨씬 깔끔해진다.
- 적분 관점은 가중 평균의 연속 누적을 준다.
- 초보자 팁: 어텐션은 “소프트 검색 엔진”처럼 생각. 이 편에서 기본 개념부터 반복 설명하고, 수식은 단계별로 풀어 쓰며, 여러 예제를 통해 직관을 쌓아가자.
이젠 진짜 직관이 중요하다
니가 AI 없이 1달 걸릴꺼 AI끼면 2일이면 다한다.
이게 시12발 어 그냥 AI가 싼 코드 보고 이해할 수 있으면 그걸 어떻게 수정하면 더 효율적인지 알 수 있는 능력만 있으면 코딩 몰라도 된다.
물론 이 직관을 지르려면 코딩 잘하게 되긴 하지만,
그래도, 암튼 그 직관 기르는게 지금 바이브 코딩, AI 와 함께 코딩하는 현 시점에서 제일 중요한 것 같다.
또, 그 직관을 기르기 위해선 개념의 탄탄함이 근간이 되어야 하는 것 같다.
1. 어텐션(Attention) — 왜 필요한가
1.1 시퀀스 데이터의 도전 과제
먼저, 왜 어텐션이 등장했는지부터 이해하자.
딥러닝에서 시퀀스 데이터(문장, 시계열, DNA 등)를 다룰 때 기존 RNN/LSTM은 순차적으로 처리한다.
예를 들어, “The cat sat on the mat” 문장에서 “sat”을 이해하려면 이전 단어들을 순서대로 기억해야 한다.
- 문제 1: 장기 의존성(Long-range Dependency): 문장이 길어지면 초기 정보가 희미해진다(기울기 소실, 3편 활성화 함수 참조).
- 문제 2: 병렬화 불가: 순차 처리라 GPU 병렬 연산이 어렵다. 학습 속도 느림.
- 문제 3: 고정 컨텍스트: 모든 위치가 동일하게 취급되어 중요한 부분 강조 어려움.
책을 읽을 때 모든 단어를 똑같이 중요하게 보지 않고, 키워드에 “주의(attention)”를 집중하는 그러 느낌.
어텐션은 바로 이 아이디어를 모델에 적용한 것이다.
각 위치에서 전체 시퀀스를 보고 중요한 부분에 가중치를 부여해 정보를 추출한다.
- 해결: 어텐션은 모든 위치를 동시에 고려(병렬 가능), 중요도에 따라 가중 평균. 트랜스포머의 기반이 되어 RNN을 넘어섰다.
1.2 어텐션의 기본 아이디어
어텐션은 Query(Q), Key(K), Value(V) 세 가지 벡터로 작동한다.
- Query: “무엇을 찾을까?” 현재 위치의 질문 벡터.
- Key: “이게 맞아?” 각 위치의 키 벡터, Q와 유사도 계산.
- Value: “이 정보 가져갈게.” 가중 평균할 실제 값.
직관: 도서관에서 책 찾기. Q는 검색어, K는 책 제목, V는 책 내용. Q-K 유사도로 책 중요도 계산 후 V 가중 평균.
번역에서 “it” (Q)이 “cat” (K)을 찾아 그 의미 (V)를 가져옴.
1.3 미분 가능성과 학습
어텐션은 소프트맥스(1편)로 소프트 가중치 만들기 때문에 미분 가능.
역전파(2편)로 학습. 파라미터: Q/K/V를 만드는 선형 변환(Dense, 2편).
- 기울기 전달: 가중치가 소프트라 기울기 소실 덜함(3편 ReLU처럼).
하드 어텐션(스파스)은 미분 어려움.
1.4 그래프와 출력 범위의 역할
- 그래프: 어텐션 맵(Attention Map) – N×N 행렬로 시각화, 위치 간 연결 강도.
- 효과: 컨텍스트 인코딩, 번역에서 “it”이 가리키는 단어 자동 찾기.
초보자: 어텐션이 없는 모델은 고정 창(window)으로 보지만, 어텐션은 동적으로 확대/축소.
2. Scaled Dot-Product Attention — 기본 빌딩 블록
Scaled Dot-Product Attention은 어텐션의 기본 형태로, 트랜스포머의 핵심 연산이다.
2.1 정의와 모양(shape)
\[\text{Attention}(Q, K, V) = \softmax\left( \frac{Q K^\top}{\sqrt{d_k}} \right) V\]- 입력: Q ∈ ℝ^{B×N×d_k}, K ∈ ℝ^{B×M×d_k}, V ∈ ℝ^{B×M×d_v} (B: 배치, N: 쿼리 길이, M: 키/밸류 길이, d_k: 키 차원, d_v: 밸류 차원).
- Q K^\top: 유사도 행렬 (B×N×M).
- /√d_k: 스케일링, 내적 값 분산 ≈ d_k로 폭주 방지.
- 소프트맥스: 마지막 축(M)별, 가중치 합=1.
- 출력: B×N×d_v, 각 쿼리에 대한 가중 밸류 평균.
배치 처리: 실전에서 B>1, 행렬 곱으로 병렬.
초보자 직관: Q가 각 K와 내적(dot product)으로 유사도 측정.
스케일링은 내적 값이 d_k에 비례 커지는 문제 해결(분산 ≈ d_k).
예: d_k=4, Q=[1,0,0,0], K1=[1,0,0,0] 내적=1, K2=[0,1,0,0] 내적=0. 스케일 후 소프트맥스 [0.73, 0.27].
그래프: 어텐션 맵은 히트맵, 대각선 강하면 자기 참조 강함.
2.2 스케일링의 이유: 수학적 유도
내적 Q·K의 기대값=0, 분산= d_k (정규화 가정). 소프트맥스 입력 분산 크면 출력 포화(기울기 소실).
/√d_k로 분산=1 유지.
초보자: “큰 숫자 방지” – 소프트맥스 안정.
2.3 미분을 실제로 계산하자
역전파: 체인룰(2편). L에 대한 출력 O=softmax(S) V, S = (Q K^T)/√d_k.
- ∂L/∂V = (softmax(S))^T ∂L/∂O
- ∂L/∂S = (∂L/∂O V^T) ⊙ softmax’(S) (softmax 미분: diag(p) - p p^T)
- ∂L/∂Q = (∂L/∂S) K / √d_k
- ∂L/∂K = (∂L/∂S)^T Q / √d_k
초보자: “가중치 높은 경로로 기울기 더 전달”. 부록에 상세 유도.
2.4 장단점과 대안
- 장점: 병렬 계산(GPU 효율), 동적 컨텍스트, 간단 구현.
- 단점: O(N M d_k) ≈ O(N² d) 복잡도(긴 시퀀스 부담), 스케일링 없으면 포화.
- 대안: Efficient Attention (Linear, Reformer) – O(N) 근사.
2.5 사용 사례
- 트랜스포머 기본 단위.
- Encoder-Decoder Attention: 번역에서 소스 K/V, 타겟 Q.
3. Self-Attention — 시퀀스 내 관계 모델링
Self-Attention은 입력 자신에게 어텐션을 적용해 내부 관계를 학습한다.
3.1 정의와 모양(shape)
\[\text{SelfAttn}(X) = \text{Attention}(X W_Q, X W_K, X W_V)\]- X ∈ ℝ^{B×N×d_model}: 입력 임베딩.
- W_Q, W_K ∈ ℝ^{d_model × d_k}, W_V ∈ ℝ^{d_model × d_v}: 학습 가능 Dense(2편).
- 출력: B×N×d_v.
초보자 직관: 입력이 자신에게 어텐션. 문장에서 각 단어가 다른 단어에 주의.
예: “The animal didn’t cross the street because it was too tired.” “it”이 “animal” 참조 – self-attn이 자동 연결.
그래프: 어텐션 맵으로 “it” 행에서 “animal” 열 밝음.
3.2 미분을 실제로 계산하자
W_Q/K/V 추가: ∂L/∂W_Q = (∂L/∂Q)^T X 등.
전체: ∂L/∂X = ∂L/∂Q W_Q^T + ∂L/∂K W_K^T + ∂L/∂V W_V^T.
초보자: “중요 위치 변화가 전체에 영향” – 관계 학습.
3.3 장단점
- 장점: 위치 독립(순차 아님), 글로벌 컨텍스트(첫 단어가 마지막 참조).
- 단점: 순서 무시(포지셔널 필요), 과도 주의 분산(마스크 제어).
3.4 사용 사례
- 트랜스포머 인코더: 레이어 쌓아 특징 추출.
- ViT: 이미지 패치 self-attn.
초보자 팁: RNN처럼 타임스텝 없어, 모든 토큰 병렬 처리.
4. Multi-Head Attention — 여러 관점의 병렬
Multi-Head Attention은 여러 헤드로 다양성을 더한다.
4.1 정의와 모양(shape)
\[\text{MultiHead}(Q, K, V) = \text{Concat}(\text{head}_1, \dots, \text{head}_h) W_O\] \[\text{head}_i = \text{Attention}(Q W_{Q_i}, K W_{K_i}, V W_{V_i})\]- d_k = d_model / h (분할).
- W_O ∈ ℝ^{h d_v × d_model}: 출력 선형.
- 배치: B×h×N×(d_k).
초보자 직관: 각 헤드 다른 “관점” 학습. 하나는 구문, 하나는 의미 등.
비유: 그룹 토론 – 여러 사람이 각자 초점 맞춰 의견 모음.
그래프: 헤드별 맵, 다양성 시각화.
4.2 미분을 실제로 계산하자
각 헤드 독립 + Concat/W_O: ∂L/∂head_i = (∂L/∂O W_O^T)[id_v:(i+1)d_v].
초보자: “다양한 경로로 기울기 분산/집중”.
4.3 장단점
- 장점: 풍부 표현(단일 헤드보다 복잡 패턴), 병렬(GPU OK).
- 단점: 파라미터 ↑(h배), 해석 어려움(헤드 역할 불명확).
4.4 사용 사례
- 트랜스포머 표준 (h=8).
- GPT/BERT: MHA로 컨텍스트.
초보자: h=1은 single-head, h 증가로 성능 ↑ but 오버헤드.
5. 숫자로 따라가는 미니 예제 (손으로 풀어보기)
설정: B=1, N=3 (단어: “cat”, “sat”, “mat”), d_model=4, d_k=4, h=1. 임베딩 X (간단 가정):
\[X = \begin{bmatrix} 1 & 0 & 0 & 0 \\ % cat 0 & 1 & 0 & 0 \\ % sat 0 & 0 & 1 & 0 % mat \end{bmatrix}\]W_Q = W_K = W_V = I (identity, 초기 단순).
5.1 Scaled Dot-Product
Q=K=V=X
\[Q K^\top = \begin{bmatrix}1&0&0\\0&1&0\\0&0&1\end{bmatrix}, \quad \frac{Q K^\top}{\sqrt{4}} = \begin{bmatrix}0.5&0&0\\0&0.5&0\\0&0&0.5\end{bmatrix}\]소프트맥스 (행별, e^{0.5}≈1.65, e^0=1):
\[\text{softmax}([0.5,0,0]) \approx [0.45, 0.275, 0.275] % but 대각 중심으로 재계산\]실제: 각 행 대각 0.5, 나머지 0 → softmax ≈ [0.622, 0.189, 0.189] per row (approx).
출력 ≈ softmax * V ≈ weighted X.
5.2 Self-Attention (W 학습 가정)
W_Q 등 랜덤: 예 W_Q = [[0.1,0.2,0.3,0.4]]^T 등, 상세 값 계산.
5.3 Multi-Head (h=2, d_k=2)
X 분할: head1 X[:,:2], head2 X[:,2:].
헤드별 attn, concat, W_O 곱.
5.4 역전파 시뮬
L = | O - target | ^2, ∂L/∂O 계산 후 backward. |
초보자: 숫자 플러그인으로 “기울기 흐름” 느껴보자.
6. 그래프 비교와 시각화 팁
- Single vs Multi: single은 단일 맵, multi는 다중 관점.
- 시각화: Matplotlib 히트맵, 헤드별 색상.
- 초보자: BERTviz 툴로 실전 맵 보기 – “it” 집중 패턴.
7. 마스킹과 포지셔널 인코딩 — 필수 보완
7.1 마스킹
디코더: causal mask (상삼각 -∞, 미래 차단).
인코더: padding mask (패딩 -∞).
초보자: “치팅 방지” – 훈련 시 미래 안 봄.
수식: scores += mask * -1e9 before softmax.
7.2 포지셔널 인코딩
X + PE, PE_i^j = sin(i / 10000^{2j/d}) or cos.
초보자: “순서 태그” – attn 위치 무시 보상.
미분: PE 고정, 미분 안 함.
8. 적분의 관점 — 가중 평균과 누적
어텐션 ≈ ∫ p(x) v(x) dx (연속 가중 평균).
초보자: “연속 누적 중요도” – 소프트 확률로 적분 유사.
규제: attn entropy로 다양성.
9. 초기화와 어텐션의 궁합
Xavier/He (3편), LayerNorm (4편)과 함께 안정.
초보자: 초기 W 랜덤, 학습으로 패턴.
10. 어텐션을 코드로 확인해보기 (NumPy 의사코드)
import numpy as np
def softmax(x, axis=-1):
exp_x = np.exp(x - np.max(x, axis=axis, keepdims=True))
return exp_x / np.sum(exp_x, axis=axis, keepdims=True)
def scaled_dot_product_attention(Q, K, V, mask=None):
d_k = Q.shape[-1]
scores = np.matmul(Q, K.transpose(-2, -1)) / np.sqrt(d_k)
if mask is not None:
scores = scores + mask * -1e9
attn = softmax(scores)
output = np.matmul(attn, V)
return output, attn
# Self-Attention
def self_attention(X, d_k):
W_Q = W_K = W_V = np.random.randn(X.shape[-1], d_k) # 예시
Q = np.matmul(X, W_Q)
K = np.matmul(X, W_K)
V = np.matmul(X, W_V)
return scaled_dot_product_attention(Q, K, V)
# Multi-Head
def multi_head_attention(X, h, d_model):
d_k = d_model // h
heads = []
for i in range(h):
head, _ = self_attention(X, d_k)
heads.append(head)
concat = np.concatenate(heads, axis=-1)
W_O = np.random.randn(h * d_k, d_model)
return np.matmul(concat, W_O)
# 테스트: X = np.eye(3)[:, :3] # N=3, d=3
초보자: 코드 줄줄이 설명, 마스크 추가 예.
11. 자주 헷갈리는 포인트 정리
- Q/K/V 차원: d_k 맞춰야.
- 스케일링 이유: 분산 제어.
- Self vs Cross: Self 자신, Cross 다른 소스.
- O(N²): 효율 팁 (Flash Attention).
초보자 Q&A: “왜 dot-product? 코사인 유사도 변형.”
12. 어텐션 쌓기와 네트워크 동역학
트랜스포머 레이어: MHA + FFN + LN + 잔차.
초보자: “블록 쌓아 깊게” – 잔차로 기울기 유지(기울기 폭주/소실 방지).
역전파: 체인룰로 안정 전달.
13. 실무 감각: 선택과 튜닝
- 선택: TR → MHA, 효율 → Sparse/Linear.
- 튜닝: h=8~16, d_k=64.
- 디버깅: Attn 맵 검사 – 과집중 시 dropout.
- 트렌드: QK Norm, RoPE (회전 위치).
초보자: Hugging Face Transformers로 실험.
14. 어텐션과 TR(트랜스포머)의 연결고리 미리보기
- TR: 인코더/디코더 스택, attn 핵심.
- 왜 강력? 병렬 + 글로벌 + 스케일.
이번 편 요약(한 장으로)
- 어텐션 = 동적 가중 평균: Q-K-V로 중요도.
- Scaled Dot-Product: 기본, 스케일 내적 소프트맥스 V.
- Self-Attention: X 자신, 관계 모델.
- Multi-Head: h 병렬, 다양 표현.
- 미분: 체인룰, 학습 W.
- 적분: 누적 중요.
- 실전: 마스크·PE·LN과 함께, O(N²) 주의.
결론
이번 편에서는 어텐션을 기본부터 multi-head까지 수식·예제·코드를 알아보았다.
다음 6편에서는 Feed-Forward Network(FFN)과 잔차 연결(Residual)을 다룬다.
TR 레이어 구성 요소를 수식·직관·최적화로 설명하자.
부록: Scaled Dot-Product 미분 대충 유도
O = P V, P = softmax(S), S = (Q K^T)/√d_k.
∂O/∂S = (∂L/∂O V^T) ⊙ P’(S), P’ = diag(P) - P P^T.
다들 GPT 같은 AI 어떻게 활용하는지 나는 잘 모른다.
난 공부하는데 주로 사용하는데 진짜 쓸모있다.