어텐션 메커니즘

편집 역사 토론
소프트웨어 수치해석 통계 마지막 수정: 2026-08-05 04:20:14

1. 개요[편집]

어텐션 메커니즘
Attention Mechanism
제안Bahdanau et al. (2014), Luong et al. (2015)
핵심 수식softmax(QKᵀ/√dk)V
시간 복잡도O(n²d) — 시퀀스 길이 n에 대해 이차
대표 응용트랜스포머, 그래프 신경망(GAT), 연산자 학습

어텐션 메커니즘(attention mechanism)은 출력의 각 위치를 계산할 때 입력 전체를 훑어보고 어디를 얼마나 볼지의 가중치를 데이터로부터 직접 계산해 가중평균을 취하는 연산이다. 고정된 이웃만 보는 합성곱 신경망의 커널이나, 정보를 하나의 고정 길이 벡터에 우겨넣는 순환 신경망의 은닉 상태와 달리, 어텐션은 매 스텝마다 “이번엔 저기를 보겠다”를 새로 정한다. 커널의 모양이 학습 가능한 상수가 아니라 입력의 함수가 된 것이다.

한 줄 요약하면 내용 기반 주소지정(content-based addressing)을 미분 가능하게 만든 것. 하드하게 인덱스 하나를 고르면 미분이 안 되니까, 소프트맥스 함수로 부드럽게 뭉개서 전 위치에 확률을 뿌린다. 이 “부드럽게 뭉갠다”가 어텐션의 전부이자, 뒤에 나올 온갖 문제의 근원이기도 하다.

2. 정의[편집]

질의(query) QRn×dkQ \in \mathbb{R}^{n \times d_k}, 키(key) KRm×dkK \in \mathbb{R}^{m \times d_k}, 값(value) VRm×dvV \in \mathbb{R}^{m \times d_v}에 대해 스케일드 닷프로덕트 어텐션은 다음과 같이 정의된다.

Attn(Q,K,V)=softmax ⁣(QKdk)V\mathrm{Attn}(Q,K,V) = \mathrm{softmax}\!\left(\frac{QK^{\top}}{\sqrt{d_k}}\right) V

softmax는 행 단위로 취한다. 결과의 ii번째 행은 jαijvj\sum_j \alpha_{ij} v_j, 즉 값 벡터들의 볼록 결합(convex combination)이며 가중치 αij0\alpha_{ij} \ge 0, jαij=1\sum_j \alpha_{ij} = 1이다. 즉 어텐션 출력은 언제나 값들의 볼록 껍질 안에 있다. 이 사실은 나중에 “어텐션 = 이산화된 적분 커널”이라는 해석으로 다시 등장한다.

2.1. 왜 하필 dk\sqrt{d_k}로 나누는가[편집]

이 스케일링은 미관상 붙인 게 아니라 안 붙이면 학습이 죽는다. qqkk의 각 성분이 평균 0, 분산 1로 서로 독립이라 가정하면

Var ⁣(qk)=Var ⁣(i=1dkqiki)=dk\mathrm{Var}\!\left(q \cdot k\right) = \mathrm{Var}\!\left(\sum_{i=1}^{d_k} q_i k_i\right) = d_k

이 되어 로짓의 표준편차가 dk\sqrt{d_k}로 커진다. dk=64d_k = 64면 로짓이 ±8\pm 8 언저리까지 퍼지고, dk=128d_k = 128이면 더 심해진다. 로짓 간격이 벌어진 softmax는 사실상 argmax의 원-핫 벡터로 포화되는데, 포화된 softmax의 야코비안 diag(α)αα\mathrm{diag}(\alpha) - \alpha\alpha^{\top}α\alpha가 원-핫이면 0에 수렴한다. 결과는 기울기 소실. 1/dk1/\sqrt{d_k}로 나눠 로짓 분산을 다시 O(1)O(1)로 되돌리는 것이 스케일링의 목적이다.1

3. 역사 — 가산 어텐션과 내적 어텐션[편집]

어텐션의 출발점은 기계번역의 병목이었다. 인코더-디코더 구조에서 소스 문장 전체를 벡터 하나로 압축하니 문장이 길어질수록 성능이 무너졌다. 바다나우(Bahdanau, 2014)는 디코더 상태 st1s_{t-1}과 인코더 상태 hjh_j의 점수를 작은 MLP로 계산하는 가산(additive) 어텐션을 제안했다.

etj=vtanh(W1st1+W2hj)e_{tj} = v^{\top} \tanh(W_1 s_{t-1} + W_2 h_j)

루옹(Luong, 2015)은 이걸 그냥 내적 etj=st1hje_{tj} = s_{t-1}^{\top} h_j 또는 st1Whjs_{t-1}^{\top} W h_j로 대체한 곱셈(multiplicative) 어텐션을 썼다. 표현력은 이론상 가산 쪽이 약간 유리하지만, 내적은 전체 점수 행렬이 행렬곱 한 번(GEMM)으로 끝난다. GPU 위에서 이 차이는 압도적이고, 그래서 오늘날 표준은 내적 계열이다. 다만 dkd_k가 클 때 가산 어텐션이 스케일링 없는 내적 어텐션을 이긴다는 관측이 있었고, 그 원인 진단이 바로 위의 dk\sqrt{d_k} 항이었다.

4. 셀프 어텐션과 멀티헤드[편집]

QQ, KK, VV같은 시퀀스에서 뽑으면 셀프 어텐션이다. XRn×dX \in \mathbb{R}^{n \times d}에 대해 Q=XWQQ = XW^Q, K=XWKK = XW^K, V=XWVV = XW^V. 이러면 임의의 두 위치 사이 경로 길이가 상수 1이 되어, RNN의 O(n)O(n) 경로에서 오는 장거리 의존성 학습 난이도가 사라진다. 트랜스포머가 순환 구조를 통째로 버릴 수 있었던 이유다.

멀티헤드는 dd차원을 hh개의 부분공간으로 쪼개 각 헤드가 dk=d/hd_k = d/h 차원에서 독립적으로 어텐션을 돌리고, 결과를 이어붙인 뒤 WOW^O로 섞는다.

MHA(X)=[head1headh]WO\mathrm{MHA}(X) = \left[\mathrm{head}_1 \,\|\, \cdots \,\|\, \mathrm{head}_h\right] W^O

왜 나누는가? 단일 헤드의 softmax는 하나의 확률분포라, 서로 다른 관계(구문적 의존, 지시 대상, 위치적 이웃)를 동시에 표현하려면 그 하나의 분포를 평균내는 수밖에 없다. 부분공간을 갈라두면 각 헤드가 서로 다른 유사도 기준을 가질 수 있다. 총 연산량은 헤드 수와 무관하게 거의 같다는 점도 중요하다 — 공짜로 표현력을 늘리는 흔치 않은 트릭.

스케일드 닷-프로덕트 셀프 어텐션 A = softmax((XW_Q)(XW_K)ᵀ/(τ√d_k)), X ← A(XW_V) 를 같은 토큰 열에 층층이 반복 적용한다. 잔차 연결도 FFN도 층정규화도 없이 어텐션만 쌓았을 때 무슨 일이 나는지가 관찰 대상이다. 임베딩 차원은 화면에 직접 그리려고 d=2 로 잡았고 d_k=d 로 정직하게 스케일한다. W_Q·W_K 는 고정 시드 난수, W_V 는 노름을 보존하는 회전행렬이라 관측되는 수축이 전부 어텐션의 평균화에서 온다는 게 보장된다. 왼쪽은 n×n 어텐션 가중치 히트맵, 오른쪽은 2차원 토큰 산점도와 최근 궤적이다. 층이 쌓일수록 토큰이 한 점으로 무너지는 랭크 붕괴가 그대로 나온다 — n=24, τ=0.35 에서 ‖X−x̄‖_F 가 1e−12 아래로 내려가기까지 중앙값 8층이고, 종반에는 s_{t+1} ~ C·s_t³ 꼴이라 기하급수보다 빠른 이중지수로 무너진다. τ 슬라이더가 곧 스케일 슬라이더다: τ→0 이면 softmax 가 one-hot 으로 포화해 평균 행 엔트로피가 0.11(τ=0.01)까지 내려가고, τ→∞ 면 균일 행렬이 되어 ln 24 = 3.178 에 붙는다. 스케일을 뺀 생 QKᵀ 는 점수 분산이 d_k 에 정비례해 커지는데(실측 d_k=512 에서 512.4 대 스케일 후 1.001), 이 커널에서 그 상태에 해당하는 값이 τ=1/√2≈0.707 이다. 가중치는 학습하지 않은 고정 난수다.

5. 마스킹과 위치 인코딩[편집]

인과 마스킹(causal masking)은 자기회귀 생성에서 미래를 훔쳐보지 못하게 하는 장치다. 구현은 단순히 softmax 직전 로짓 행렬의 상삼각부에 -\infty(실무에선 109-10^9)를 더하는 것. 그러면 해당 항의 지수가 0이 되어 가중치에서 완전히 빠진다.

위치 인코딩이 필요한 이유는 더 근본적이다. 셀프 어텐션은 입력 행 순열 PP에 대해 순열 등변(permutation-equivariant) 이다.

Attn(PX)=PAttn(X)\mathrm{Attn}(PX) = P\,\mathrm{Attn}(X)

즉 단어 순서를 섞어 넣으면 출력도 똑같이 섞여 나올 뿐, 순서 정보 자체는 연산 어디에도 들어 있지 않다. 어텐션만 보면 문장은 집합이지 수열이 아니다. 그래서 위치 인코딩으로 위치를 입력에 심어준다. 원논문의 사인/코사인 인코딩, 학습형 임베딩, 상대 위치 편향, 그리고 요즘 사실상 표준이 된 회전 위치 임베딩(RoPE)까지 계보가 이어진다.2

6. 계산 복잡도와 그 이후[편집]

점수 행렬 QKQK^{\top}n×nn \times n이므로 시간 O(n2d)O(n^2 d), 메모리 O(n2)O(n^2)다. nn이 만 단위로 가면 점수 행렬 하나가 수십 GB가 되어 그대로는 못 돌린다. 돌파구는 세 갈래로 갈렸다.

접근핵심 아이디어결과의 성격
FlashAttention타일링 + 온라인 softmax로 점수 행렬을 SRAM 안에서만 소비정확한 값 (근사 아님)
선형 어텐션커널 특징사상 후 결합법칙 순서 교환근사
희소 어텐션슬라이딩 윈도 + 전역 토큰 등 패턴 제한근사

FlashAttention은 알고리즘 복잡도를 줄인 게 아니라 메모리 계층을 공략한 IO-aware 재작성이다. n×nn \times n 행렬을 HBM에 쓰지 않고 블록 단위로 계산하며 softmax 정규화 상수를 온라인으로 갱신하니, 결과는 수학적으로 동일하면서 메모리는 O(n)O(n)이 된다. 반면 선형 어텐션은 softmax\mathrm{softmax}를 특징사상 ϕ\phi로 대체해 ϕ(Q)(ϕ(K)V)\phi(Q)\big(\phi(K)^{\top}V\big) 순서로 묶는다. 결합법칙만 바꿨을 뿐인데 비용이 O(nd2)O(nd^2)로 떨어진다 — 행렬 곱셈의 결합 순서가 비용을 바꾼다는 고전적 교훈의 딥러닝판.3

7. 과학계산에서의 어텐션[편집]

이 바닥 사람에게 어텐션이 흥미로운 건 챗봇 때문이 아니라 적분 연산자로 읽히기 때문이다. 가중평균 jαijvj\sum_j \alpha_{ij} v_j의 연속 극한은

(Kv)(x)=Ωκ(x,y)v(y)dy(\mathcal{K}v)(x) = \int_{\Omega} \kappa(x, y)\, v(y)\, \mathrm{d}y

로, 어텐션은 학습된 커널 κ\kappa를 가진 적분 연산자의 몬테카를로/구적 근사가 된다. 연산자 학습에서 어텐션 기반 뉴럴 오퍼레이터가 자연스럽게 등장하는 배경이고, 푸리에 뉴럴 오퍼레이터가 커널을 주파수 영역에서 대각화하는 것과 정확히 대비되는 설계다.

그래프 신경망의 GAT(Graph Attention Network)는 어텐션을 이웃 집합으로 제한한 형태다. 인접 노드에만 점수를 매기니 자연스럽게 희소 어텐션이 되고, 메시나 분자 그래프처럼 연결 구조가 이미 주어진 문제에 딱 맞는다. 실제로 분자 표현 학습, 격자 기반 대리 모델(대리 모델), CFD 결과의 축소차수 대리화 등에서 널리 쓰인다. 어텐션 가중치를 “물리적 영향 계수”로 해석하고 싶은 유혹이 크지만, 그게 인과적 기여도라는 보장은 없다는 점은 짚고 넘어가야 한다.4

8. 여담[편집]

  • 어텐션 시각화 히트맵은 논문 그림으로는 예쁘지만 해석의 근거로는 논쟁적이다. 같은 예측을 내는 전혀 다른 어텐션 분포가 존재할 수 있다는 반례가 여럿 보고됐다.
  • “Attention Is All You Need”라는 제목은 이제 밈이 되어 “X Is All You Need” 논문이 매년 쏟아진다. 정작 그 논문도 어텐션만으로는 안 되고 잔차 연결, 층 정규화, FFN이 다 필요하다.
  • 어텐션은 결국 큰 GEMM 두 번과 softmax 한 번이다. 이 단순함이 하드웨어 가속과 궁합이 좋았고, 그래서 이겼다. 알고리즘이 아니라 메모리 대역폭이 승자를 정한 사례로 두고두고 인용된다.

9. 관련 문서[편집]

10. Footnotes[편집]

  1. 원논문 각주에도 이 분산 논증이 그대로 실려 있다. 즉 “dk\sqrt{d_k}가 왜 있냐”의 정답은 논문 본문이 아니라 각주에 있다. 논문 각주를 안 읽고 구현하다가 학습이 안 된다며 밤새우는 것은 이 분야의 통과의례.

  2. 사인/코사인 인코딩이 외삽에 강하다는 원논문의 기대는 실제로는 잘 안 맞았다. 학습 길이를 넘어가면 성능이 무너지는 게 관측됐고, 그 자리를 상대 위치 계열이 채웠다. “이론적으로 우아함 ≠ 실측 성능”의 교과서적 사례.

  3. 다만 선형 어텐션은 softmax의 날카로운 선택성을 잃어서, 하나를 콕 집어야 하는 과제(예: 정확한 검색)에서 성능이 떨어지는 경향이 있다. 공짜 점심은 여기서도 없다.

  4. 어텐션 가중치가 크다 = 그 입력이 출력을 결정했다, 는 성립하지 않는다. 값 벡터 vjv_j의 크기와 이후 층의 처리까지 봐야 하는데, 히트맵은 그걸 안 보여준다. V&V 정신으로 보면 “검증되지 않은 후처리 그림” 취급하는 게 맞다.