Self-Attention
학습 목표
- Self-Attention이 기존 Attention과 다른 점(“자기 자신에 대한 어텐션”)을 이해한다
- Query, Key, Value의 개념과 역할을 설명할 수 있다
- Scaled Dot-Product Attention의 수식을 단계별로 따라갈 수 있다
- Multi-Head Attention이 필요한 이유와 동작 방식을 설명할 수 있다
- 차원(Dimension) 변화를 추적하며 전체 계산 과정을 이해한다
왜 중요한가
Self-Attention은 Transformer 아키텍처의 핵심 구성요소입니다. 기존 Attention이 인코더와 디코더 “사이”의 관계를 포착했다면, Self-Attention은 동일한 시퀀스 내에서 토큰 간의 관계를 포착합니다. 이 메커니즘 덕분에 Transformer는 RNN처럼 순차적으로 처리하지 않고도 시퀀스 내의 장거리 의존성을 효과적으로 모델링할 수 있습니다. “The animal didn’t cross the street because it was too tired”에서 “it”이 “animal”을 가리킨다는 것을 파악하려면, 문장 내 모든 단어 간의 관계를 동시에 고려해야 합니다. Self-Attention이 바로 이 역할을 합니다.핵심 개념
”Self”의 의미
기존 Attention(Cross-Attention)에서는 디코더의 상태가 인코더의 상태를 참조합니다. 즉, 서로 다른 두 시퀀스 사이의 관계를 봅니다. Self-Attention에서는 하나의 시퀀스가 자기 자신을 참조합니다. 입력 시퀀스의 각 토큰이 같은 시퀀스의 모든 토큰과의 관계를 계산합니다.Query, Key, Value
Self-Attention은 정보 검색(Information Retrieval)의 비유로 이해할 수 있습니다.| 개념 | 역할 | 비유 |
|---|---|---|
| Query (Q) | “무엇을 찾고 있는가” | 검색창에 입력한 질문 |
| Key (K) | “무엇을 제공할 수 있는가” | 문서의 제목/태그 |
| Value (V) | “실제로 전달할 정보” | 문서의 본문 내용 |
Self-Attention에서는 Q, K, V가 모두 같은 입력 에서 파생됩니다. 이것이 “Self”의 핵심입니다. Cross-Attention에서는 Q는 디코더에서, K와 V는 인코더에서 옵니다.
Scaled Dot-Product Attention
Transformer에서 사용하는 어텐션 함수는 다음과 같습니다. 각 단계를 분해하면 다음과 같습니다. 단계 1: 유사도 계산 — Query와 Key의 내적으로 유사도 행렬을 계산합니다. 결과는 행렬로, 모든 토큰 쌍의 관련성 점수를 담고 있습니다. 단계 2: 스케일링 — 내적 값은 가 커질수록 분산이 커져 Softmax의 기울기가 매우 작아집니다(Saturation). 로 나누어 안정적인 기울기를 유지합니다. 단계 3: Softmax — 정규화 행(Row) 방향으로 Softmax를 적용하여 각 Query에 대한 어텐션 가중치 분포를 만듭니다. 각 행의 합은 1이 됩니다. 단계 4: 가중합 — 어텐션 가중치로 Value의 가중합을 구하여 최종 출력을 생성합니다.차원 추적
구체적인 수치로 차원 변화를 추적해 보겠습니다.| 단계 | 텐서 | 차원 | 예시 (, ) |
|---|---|---|---|
| 입력 | |||
| Q 생성 | |||
| K 생성 | |||
| V 생성 | |||
| 유사도 | |||
| 스케일링 | |||
| 가중치 | |||
| 출력 |
수치 예제
간단한 예로 직접 계산해 보겠습니다. 이고 시퀀스 길이 2인 경우:Multi-Head Attention
단일 Attention Head는 한 가지 관점으로만 관계를 포착합니다. Multi-Head Attention은 여러 개의 Attention Head를 병렬로 실행하여 다양한 관점에서 토큰 간 관계를 동시에 포착합니다. 여기서:- : 헤드 수 (원 논문에서 )
- (512 / 8 = 64)
- : 출력 투영 행렬
- Head 1: 구문적 관계 (주어-동사)
- Head 2: 의미적 유사성 (동의어, 관련어)
- Head 3: 근접 위치 관계 (인접 토큰)
- Head 4: 장거리 의존성 (대명사-선행사)
Multi-Head Attention의 총 계산량은 단일 헤드의 Full-Dimension Attention과 유사합니다. 개의 헤드를 사용하되 각 헤드의 차원을 로 줄이기 때문입니다.
PyTorch 구현
마스킹 (Masking)
Self-Attention에서는 두 가지 마스킹이 사용됩니다.| 마스킹 유형 | 목적 | 적용 위치 |
|---|---|---|
| 패딩 마스크 (Padding Mask) | 패딩 토큰이 어텐션에 참여하지 않도록 함 | 인코더, 디코더 모두 |
| 미래 마스크 (Look-Ahead Mask) | 디코더에서 미래 토큰을 참조하지 못하도록 함 | 디코더의 Self-Attention만 |
AI/ML에서의 활용
Self-Attention은 Transformer 계열 모델의 근본이며, 다양한 형태로 변형되어 활용됩니다.- BERT: 양방향 Self-Attention으로 문맥을 양쪽에서 동시에 파악
- GPT: 미래 마스크가 적용된 인과적(Causal) Self-Attention으로 텍스트 생성
- Vision Transformer (ViT): 이미지 패치를 토큰으로 취급하여 Self-Attention 적용
- Efficient Attention: Linear Attention, Sparse Attention 등 복잡도를 줄이는 연구
Self-Attention의 시간 복잡도는 왜 O(n²)인가요?
Self-Attention의 시간 복잡도는 왜 O(n²)인가요?
연산이 으로 행렬을 생성하기 때문입니다. 시퀀스의 모든 토큰 쌍에 대해 유사도를 계산하므로 의 복잡도를 갖습니다. 이 때문에 매우 긴 시퀀스(수만 토큰)에서는 메모리와 계산 비용이 급증하며, 이를 해결하기 위한 Efficient Attention 연구가 활발합니다.
Cross-Attention은 어디에 사용되나요?
Cross-Attention은 어디에 사용되나요?
Cross-Attention은 Transformer 디코더에서 사용됩니다. 디코더의 Self-Attention 이후, 디코더 상태를 Query로, 인코더 출력을 Key/Value로 사용하여 입력 시퀀스의 정보를 참조합니다. 기계번역, 텍스트 요약 등 인코더-디코더 구조에서 핵심 역할을 합니다.
Q, K, V에 같은 가중치 행렬을 쓰면 안 되나요?
Q, K, V에 같은 가중치 행렬을 쓰면 안 되나요?
같은 가중치를 사용하면 “찾는 것”(Q)과 “제공하는 것”(K)의 구분이 없어집니다. 서로 다른 가중치 행렬을 사용함으로써, 동일한 입력 토큰이라도 Query 역할과 Key 역할에서 서로 다른 표현을 가질 수 있습니다. 이 비대칭성이 풍부한 관계 포착의 핵심입니다.
체크리스트
- Self-Attention에서 “Self”가 의미하는 바를 설명할 수 있다
- Query, Key, Value의 역할과 생성 과정을 설명할 수 있다
- Scaled Dot-Product Attention의 4단계 계산 과정을 따라갈 수 있다
- 로 나누는 이유(Softmax Saturation 방지)를 이해했다
- Multi-Head Attention이 필요한 이유(다양한 관점)를 설명할 수 있다
- 차원 변화를 추적할 수 있다:
- 패딩 마스크와 미래 마스크의 차이를 구분할 수 있다

