Cross-Attention (Encoder-Decoder Attention)
1. 개요
Self-Attention이 “내가 내 안의 단어들을 보는 것”이라면, Cross-Attention은 “내가 다른 시퀀스(외부 정보)를 참조하는 것” 이다.
핵심 정의
- Self-Attention: Query, Key, Value가 모두 **같은 출처(
)**에서 온다. - Cross-Attention: Query는 **타겟(
)**에서 오고, Key와 Value는 **소스( )**에서 온다.
2. 구조적 차이 비교
두 어텐션은 수식은 같지만, 입력 소스(Source) 가 다르다.
| 구분 | Query ( | Key ( | Value ( | 비유 |
|---|---|---|---|---|
| Self-Attention | 입력 | 입력 | 입력 | “문장 내에서 문법적 관계 찾기” |
| Cross-Attention | Decoder ( | Encoder ( | Encoder ( | “번역할 때 원문(Source) 참고하기” |
graph TD subgraph "Self-Attention" X1["Input Seq A"] X1 --> Q1[Q] X1 --> K1[K] X1 --> V1[V] Q1 & K1 & V1 --> Attn1[Attention] end subgraph "Cross-Attention" Y["Input Seq B (Decoder)"] --> Q2[Q] X2["Input Seq A (Encoder)"] --> K2[K] X2 --> V2[V] Q2 & K2 & V2 --> Attn2[Attention] end style X1 fill:#FFF9C4,stroke:#FBC02D style Y fill:#E1BEE7,stroke:#8E24AA style X2 fill:#B2EBF2,stroke:#00BCD4 style Attn2 fill:#FFCCBC,stroke:#FF5722
3. 작동 원리 및 수식
Cross-Attention은 서로 다른 두 도메인(예: 텍스트
3.1. 수식
기본 어텐션 수식과 동일하지만, 들어가는
- Query (
): “나 지금 ‘Apple’이라는 단어 만들 건데…” (Decoder의 현재 상태) - Key (
): “원문에 ‘사과’라는 단어 여기 있어.” (Encoder의 모든 출력) - Score (
): Decoder의 현재 토큰이 Encoder의 어느 부분과 연관되는지 계산. - Value (
): 연관된 만큼 원문 정보( )를 가져와서 섞음.
3.2. 차원(Shape) 변화
- Query:
- Key/Value:
- Output:
- 길이는 Query(타겟)를 따라가고, 내용은 Key/Value(소스)를 참조한다.
4. 어디에 쓰이나? (Killer Applications)
4.1. Transformer (기계 번역)
가장 오리지널 사용처다.
- 상황: 영어(Encoder)를 한국어(Decoder)로 번역할 때.
- 역할: 한국어 단어를 하나 생성할 때마다 영어 문장 전체(Encoder Output)를 훑어보고 힌트를 얻는다.
4.2. Stable Diffusion (Text-to-Image)
텍스트 프롬프트로 이미지를 생성하는 핵심 원리다.
- Query: 생성 중인 노이즈 이미지 (UNet의 Visual Feature).
- Key/Value: 사용자 프롬프트 텍스트 (“A cute cat”).
- 작동: “이미지의 이 부분(
)을 그릴 때, 텍스트( )의 ‘Cat’ 정보를 참조해라.”
4.3. VLM (Flamingo, BLIP-2)
이미지를 보고 텍스트를 생성할 때.
- Query: LLM의 텍스트 토큰.
- Key/Value: ViT가 추출한 이미지 패치 정보.
- 작동: “다음 단어를 말하려고 하는데(
), 이미지( ) 좀 보여줘.”
graph LR Txt["Text Prompt<br/>'Cute Cat'"] --> Clip["Text Encoder"] Clip --> KV["Key / Value"] Img["Noisy Image"] --> UNet["UNet Layer"] UNet --> Q["Query"] Q & KV --> CA["Cross Attention"] CA --> Next["Denoised Image"] style Txt fill:#FFF9C4,stroke:#FBC02D style Img fill:#E1F5FE,stroke:#03A9F4 style CA fill:#FFCCBC,stroke:#FF5722,stroke-width:2px
5. 한 줄 요약
“Self-Attention이 ‘자기 성찰’이라면, Cross-Attention은 ‘외부 조언 구하기(Consulting)‘이다.”