주제: 3-2 Self-Attention (Transformer 핵심 연산)

분류: llm

타입: concept

난이도: 중급

선수지식: 있음 — 행렬곱, softmax, embedding

문제 설정

기존 RNN이나 CNN 기반 NLP 모델은 긴 문장에서 단어 간 관계를 효과적으로 학습하기 어렵습니다.

Transformer는 이를 해결하기 위해 Self-Attention 메커니즘을 사용합니다.

핵심 식:

Attention(Q,K,V) = softmax(QKT / √dk) V

Self-attention은 "각 토큰이 문장 전체를 훑어보며, 지금 나를 이해하는 데 중요한 다른 토큰에 더 큰 가중치를 주는 과정"이라고 보면 된다.

Q, K, V가 처음엔 복잡해 보이지만, 역할을 나누면 이해가 쉬워진다. Query는 지금 내가 찾고 싶은 정보, Key는 내가 가진 정보의 주소표, Value는 실제로 가져갈 내용이라고 보면 된다. attention은 결국 이 셋을 이용해 "누구를 얼마나 참고할지"를 계산하는 절차다.

그래서 self-attention을 이해하면 Transformer가 왜 멀리 떨어진 단어 관계를 직접 연결할 수 있는지 자연스럽게 보인다. RNN처럼 순서대로 넘기지 않고, 한 단계에서 전체 문장을 동시에 참조하기 때문이다.

직관 비유

시각 자료로 먼저 보기

scaled dot-product attention 구조도
Q, K, V를 만들고, 점곱 후 softmax를 거쳐 값을 섞는 scaled dot-product attention 전체 흐름을 한 장으로 요약한 그림이다.
원본 / 라이선스 · Creative Commons uploader · CC BY 4.0
encoder self-attention dot product 구조
self-attention이 같은 입력 시퀀스 내부에서 토큰 간 관계를 계산하는 방식을 단순화한 도식이다.
원본 / 라이선스 · Numiri · CC BY-SA 4.0
dot product의 기하학적 의미
attention 점수가 결국 query와 key의 내적이라는 점을 이해하려면, dot product의 기하학적 의미를 보는 것이 도움이 된다.
원본 / 라이선스 · MikeRun · CC BY-SA 4.0

1. 입력 토큰 표현

문장은 토큰 embedding으로 표현됩니다.

X ∈ Rn × d

기호 의미

왜 필요한가

텍스트를 수치 벡터로 변환하여 모델이 처리할 수 있게 합니다.

이 단계는 단순한 인코딩이 아니라 attention 계산의 출발점이다. 토큰이 공통 벡터 공간 위에 놓여 있어야 query, key, value로 선형 변환할 수 있고, 그다음에 관련도 계산도 가능해진다.

2. Query / Key / Value 생성

Self-attention은 입력 벡터에서 세 가지 벡터를 생성합니다.

Q = XWQ

K = XWK

V = XWV

기호 의미

직관 설명

주의점

Q,K,V는 같은 입력에서 다른 선형 변환으로 생성됩니다.

3. Attention Score 계산

각 토큰 간 유사도를 계산합니다.

S = QKT

기호 의미

직관 설명

모든 토큰이 서로 얼마나 관련 있는지 계산합니다.

주의점

score 값이 너무 커질 수 있습니다.

4. Scaling

score를 다음 값으로 나눕니다.

S' = QKT / √dk

기호 의미

왜 필요한가

차원이 커질수록 dot product 값이 커지므로 softmax saturation을 방지합니다.

주의점

scaling이 없으면 gradient가 매우 작아질 수 있습니다.

5. Softmax

attention weight를 계산합니다.

A=softmax(S)

기호 의미

직관 설명

각 토큰이 다른 토큰에 얼마나 집중할지 결정합니다.

주의점

각 행의 합은 1이 됩니다.

6. Value 결합

최종 출력:

O=AV

기호 의미

직관 설명

중요한 단어의 value 정보를 weighted sum으로 결합합니다.

7. 전체 Self-Attention 식

모든 과정을 합치면 다음과 같습니다.

Attention(Q,K,V) = softmax(QKT/√dk)V

왜 중요한가

Transformer의 핵심 연산입니다.

8. 계산 복잡도

Self-attention의 계산 복잡도:

O(n²)

기호 의미

왜 중요한가

토큰 수가 증가하면 계산량이 급격히 증가합니다.

코드-수식 연결

수식 PyTorch 코드 설명
Q = XW_Q Q = x @ Wq query 생성
K = XW_K K = x @ Wk key 생성
V = XW_V V = x @ Wv value 생성
softmax(QKᵀ/√d) attn = softmax(Q @ K.T / sqrt(d)) attention weight
AV output = attn @ V attention output

자주 하는 오해 5개

체크리스트 (스스로 설명 가능해야 하는 질문)