콘텐츠로 이동

어텐션 메커니즘 (Attention Mechanism)

핵심 요약: 어텐션(Attention)은 “어디를 집중할지” 자동으로 결정하는 메커니즘이다. Query(질문)로 Key(색인)를 검색하여, 유사도가 높은 Value(값)를 더 많이 가져오는 구조이다. Seq2Seq의 정보 병목(Information Bottleneck)을 해결하였고, Transformer의 핵심 구성 요소가 되었다.

어텐션 메커니즘(Attention Mechanism)은 시퀀스 처리에서 “관련된 부분에 집중”하는 능력을 모델에 부여한다. Seq2Seq 모델이 전체 입력을 고정 길이 벡터로 압축해야 하는 정보 병목을 해결하기 위해 등장하였으며, 이후 Transformer의 핵심 구성 요소로 발전하여 현대 딥러닝의 근간이 되었다.


2014년, Seq2Seq 모델은 기계번역에서 놀라운 성과를 보였지만, 한 가지 근본적인 병목이 있었다. 입력 시퀀스가 아무리 길어도 인코더의 마지막 은닉 상태 하나에 모든 정보를 압축해야 했다. 짧은 문장에서는 잘 작동했지만, 문장이 길어지면 초반 정보가 소실되어 번역 품질이 급격히 떨어졌다.

2015년, Dzmitry Bahdanau는 이 문제에 대한 우아한 해결책을 제시했다. 핵심 아이디어는 간단했다: 디코더가 출력 토큰을 생성할 때마다 인코더의 모든 은닉 상태를 참조하되, 현재 생성할 토큰과 관련된 부분에 더 높은 가중치를 부여하자는 것이었다. 이것이 바로 어텐션 메커니즘(Attention Mechanism)의 탄생이다. 이 아이디어는 단순히 Seq2Seq를 개선하는 것을 넘어, 2년 뒤 Transformer의 핵심 구성 요소가 되면서 현대 딥러닝 전체의 패러다임을 바꾸게 된다.

비유: 어텐션은 시험을 볼 때 관련 교과서 페이지를 펼쳐놓고 참고하는 것과 같다. 기존 Seq2Seq가 교과서 전체를 달달 외운 뒤 시험장에 들어가는 방식이었다면, 어텐션은 오픈북 시험처럼 필요할 때 관련 내용을 찾아보는 방식이다. 전부 외울 필요 없이, 문제(Query)를 보고 교과서 목차(Key)에서 관련 페이지를 찾은 뒤, 해당 내용(Value)을 참고하여 답을 작성한다.


Seq2Seq 모델의 한계: 디코더가 인코더의 마지막 은닉 상태만을 사용하므로, 긴 시퀀스에서 초반 정보가 소실된다.

직관: “번역할 때 전체 문장을 한 번에 기억하는 게 아니라, 관련 부분을 그때그때 참조한다.”

어텐션은 디코더가 인코더의 모든 hidden state에 접근하여, 현재 생성할 토큰과 가장 관련 있는 부분에 가중치를 부여한다.

2. Bahdanau Attention (Additive Attention)

섹션 제목: “2. Bahdanau Attention (Additive Attention)”

Bahdanau et al. (2015)이 제안한 최초의 어텐션 메커니즘이다.

에너지 함수: eij=vTtanh(W1hienc+W2hjdec)e_{ij} = v^T \tanh(W_1 h_i^{enc} + W_2 h_j^{dec})

어텐션 가중치: αij=softmax(eij)\alpha_{ij} = \text{softmax}(e_{ij})

컨텍스트 벡터: cj=iαijhiencc_j = \sum_{i} \alpha_{ij} h_i^{enc}

디코더의 각 단계 jj에서 인코더의 어떤 위치 ii에 “주목”할지를 학습한다.

3. Luong Attention (Multiplicative Attention)

섹션 제목: “3. Luong Attention (Multiplicative Attention)”

Luong et al. (2015)이 제안한 변형이다.

변형에너지 함수
Doteij=(hjdec)Thience_{ij} = (h_j^{dec})^T h_i^{enc}
Generaleij=(hjdec)TWhience_{ij} = (h_j^{dec})^T W h_i^{enc}
Concateij=vTtanh(W[hjdec;hienc])e_{ij} = v^T \tanh(W[h_j^{dec}; h_i^{enc}])

Dot-product 방식이 계산 효율이 높고, 성능도 비슷하다.

Transformer에서 사용되는 어텐션의 핵심이다.

Attention(Q,K,V)=softmax(QKTdk)V\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V

  • QQ (Query): “무엇을 찾고 있는가” — 검색어에 해당
  • KK (Key): “무엇을 가지고 있는가” — 색인/목차에 해당
  • VV (Value): “실제 정보” — 내용에 해당

Query 1개와 Key 3개로 어텐션을 계산해 보자.

  • Q=[1,0]Q = [1, 0] — “첫 번째 차원에 관심 있음”
  • K=[[1,0],[0,1],[0.5,0.5]]K = [[1, 0], [0, 1], [0.5, 0.5]] — 3개의 키
  • V=[[10],[20],[30]]V = [[10], [20], [30]] — 각 키에 대응하는 값
  1. 유사도(Similarity) 계산 (내적, Dot Product):

    • QK1=1×1+0×0=1.0Q \cdot K_1 = 1 \times 1 + 0 \times 0 = 1.0
    • QK2=1×0+0×1=0.0Q \cdot K_2 = 1 \times 0 + 0 \times 1 = 0.0
    • QK3=1×0.5+0×0.5=0.5Q \cdot K_3 = 1 \times 0.5 + 0 \times 0.5 = 0.5
  2. 소프트맥스(Softmax)로 가중치 변환: [1.0,0.0,0.5][1.0, 0.0, 0.5][0.47,0.17,0.36][0.47, 0.17, 0.36]

  3. 가중합(Weighted Sum): 0.47×10+0.17×20+0.36×30=4.7+3.4+10.8=18.90.47 \times 10 + 0.17 \times 20 + 0.36 \times 30 = 4.7 + 3.4 + 10.8 = 18.9

Q와 가장 유사한 K1K_1의 Value(10)에 가장 높은 가중치(0.47)가 부여되었지만, 다른 Value들의 정보도 적절히 반영된다. 이것이 “부드러운 검색(Soft Lookup)“이다.

dk\sqrt{d_k}로 나누는가:

dkd_k가 크면 내적 값이 커져 softmax가 포화된다. 독립 성분을 가정하면:

Var(qk)=dk\text{Var}(q \cdot k) = d_k

dk\sqrt{d_k}로 나누어 분산을 1로 유지하면 softmax의 기울기가 안정적으로 유지된다.

직관 — 데이터베이스 검색 비유:

  1. Query로 검색 요청
  2. Key와 Query의 유사도(점수) 계산
  3. 점수에 따라 Value를 가중 합산하여 결과 반환

MultiHead(Q,K,V)=Concat(head1,...,headh)WO\text{MultiHead}(Q, K, V) = \text{Concat}(\text{head}_1, ..., \text{head}_h) W^O

headi=Attention(QWiQ,KWiK,VWiV)\text{head}_i = \text{Attention}(QW_i^Q, KW_i^K, VW_i^V)

  • 헤드(Head)다른 관계 패턴을 학습 (구문적 관계, 의미적 관계, 위치 관계 등)
  • dk=dmodel/hd_k = d_{model} / h로 설정하여, 총 계산량은 single-head와 동일

5. Multi-Head Attention 다이어그램

Q, K, V가 모두 같은 시퀀스에서 유래한다.

Q=XWQ,K=XWK,V=XWVQ = XW^Q, \quad K = XW^K, \quad V = XW^V

장점: 시퀀스 내 모든 위치 간 직접적 연결 → 경로 길이 O(1)O(1) (RNN은 O(n)O(n))

계산 복잡도: O(n2d)O(n^2 d) — 시퀀스 길이 nn에 대해 이차적

Masked Self-Attention: 자기회귀(Autoregressive) 생성 — 이전 토큰들만 보고 다음 토큰을 예측하는 방식 — 에서 미래 토큰 참조를 방지한다. attention score 행렬의 상삼각 부분을 -\infty로 설정하여 softmax 후 0이 되게 한다.

Q는 디코더에서, K와 V는 인코더에서 유래한다.

사용처: 번역 (Transformer decoder), 이미지 캡셔닝, 멀티모달 모델 (텍스트-이미지)

변형복잡도핵심 아이디어
StandardO(n2d)O(n^2 d)전체 attention 행렬 계산
Linear AttentionO(nd2)O(n d^2)softmax를 커널 함수로 대체
Sparse AttentionO(nn)O(n\sqrt{n})일부 위치 쌍에만 attention
Flash AttentionO(n2d)O(n^2 d) (같지만 빠름)IO-aware 메모리 최적화

Flash Attention: 정확한(exact) attention을 계산하면서, GPU의 메모리 계층(SRAM/HBM)을 고려한 타일링(tiling) 기법으로 메모리와 속도를 크게 개선한다. 근사가 아닌 정확한 계산이라는 점이 핵심이다.

Sparse Attention:

  • Longformer: 지역(local) + 전역(global) 패턴 조합
  • BigBird: random + window + global 패턴

어텐션 가중치를 히트맵으로 시각화하면 모델이 어떤 부분에 “주목”하는지 확인할 수 있다. 예를 들어, 기계 번역에서 소스 언어의 어떤 단어가 타겟 언어의 각 단어와 대응되는지 볼 수 있다.

그러나 주의할 점: attention weight가 반드시 “설명(explanation)“을 의미하지는 않는다 (Jain & Wallace, 2019). 해석 도구로 사용할 때는 신중해야 한다.

어텐션은 “부드러운(soft) 사전 검색”으로 볼 수 있다:

  1. Hard lookup: key가 정확히 일치하는 하나의 value 반환
  2. Soft lookup: 모든 key와의 유사도에 따라 value를 가중 합산하여 반환

이 관점은 메모리 네트워크(Memory Networks), Retrieval-Augmented Generation(RAG) 등으로 확장된다.


어텐션 유형사용처
Self-AttentionTransformer 인코더/디코더
Masked Self-Attention자기회귀 생성 (GPT)
Cross-Attention인코더-디코더 모델, 멀티모달
Additive AttentionRNN 기반 Seq2Seq (구식)
Efficient Attention긴 시퀀스 처리 (문서, 유전체 등)

기계번역에서 어텐션의 극적인 효과

섹션 제목: “기계번역에서 어텐션의 극적인 효과”

Bahdanau Attention이 등장하기 전, Seq2Seq 기반 기계번역은 문장 길이가 20단어를 넘어가면 BLEU 점수가 급격히 하락하는 문제를 겪었다. 고정 길이 벡터에 긴 문장의 모든 의미를 압축하는 것이 사실상 불가능했기 때문이다.

어텐션을 도입한 후, 긴 문장에서의 번역 품질이 극적으로 개선되었다. Bahdanau et al. (2015)의 실험에서 50단어 이상의 문장에서도 성능 하락 없이 안정적인 번역이 가능해졌다. 특히 어텐션 가중치(Attention Weight)를 시각화하면, 모델이 소스 언어와 타겟 언어 사이의 단어 정렬(Word Alignment)을 자연스럽게 학습하는 것을 확인할 수 있었다 — 이는 별도의 정렬 모델이 필요했던 통계 기반 번역(SMT)과 대비되는 놀라운 결과였다.

이후 Google은 2016년 Google Neural Machine Translation(GNMT) 시스템에 어텐션을 적용하여 영어-프랑스어 번역에서 인간 번역가와의 격차를 55-85% 줄이는 성과를 발표했다. 이 시스템은 8개 LSTM 층 + 어텐션 구조로, Google Translate 서비스에 실제 적용되어 수십억 사용자에게 서비스되었다. 어텐션 메커니즘은 기계번역을 넘어 이미지 캡셔닝(Show, Attend and Tell), 음성인식, 문서 요약 등 입력의 특정 부분에 선택적으로 집중해야 하는 모든 과제로 빠르게 확산되었다.


  1. “어텐션 = 설명 가능성”: attention weight가 높다고 해서 모델이 그 부분을 “이해”하는 것은 아니다. 설명 가능성을 위해서는 별도의 분석이 필요하다.

  2. Scaling factor 누락: dk\sqrt{d_k}로 나누지 않으면 softmax가 포화되어 기울기가 매우 작아진다. 특히 dkd_k가 큰 경우 학습이 실패할 수 있다.

  3. Attention mask 설정 오류: padding mask와 causal mask를 정확히 설정하지 않으면 패딩 토큰에 어텐션이 가거나, 미래 토큰을 참조하는 문제가 발생한다.

  4. O(n2)O(n^2) 복잡도 무시: 시퀀스 길이가 길어질수록 메모리와 계산이 이차적으로 증가한다. 긴 시퀀스에서는 efficient attention 변형을 고려해야 한다.

  5. Single-head로 충분하다는 생각: Multi-Head Attention은 다양한 관계 패턴을 동시에 학습하므로, head 수를 줄이면 표현력이 제한된다.