🔍 Transformer 구조 및 Cross-Attention 개념 정리


✅ Transformer 기본 구조

📌 구성

  • Encoder Depth = 2 → Encoder 블록 2개
  • Decoder Depth = 2 → Decoder 블록 2개

🔧 각 블록의 구성

Encoder 블록Decoder 블록
Self-Attention → FFNSelf-Attention → Cross-Attention → FFN

✅ 1. Self-Attention 기반 구조 (예: GPT, BERT)

  • 단일 인코더/디코더 사용

  • 인코더 출력이 디코더로 넘어가지 않음

  • 예시: GPT

    • 디코더 블록만 존재
    • 블록1 → 블록2 → 최종 출력

✅ 2. Encoder–Decoder 구조 (예: Transformer, BART, T5)

  • 인코더 출력이 디코더의 Cross-Attention에 사용됨
  • 디코더가 인코더 출력(Key, Value)을 참조

✅ 3. Cross-Attention 핵심 정리

❓ "Cross-Attention에서 Key/Value는 인코더 출력인가요?"

✔️ 정답입니다.

구성 요소설명
Query디코더 블록 내부 hidden state
Key/Value인코더의 마지막 블록 출력

❗ 잘못된 오해 방지

  • ❌ 디코더1 → 인코더1 출력 사용 / 디코더2 → 인코더2 출력 사용
  • ✅ 모든 디코더 블록은 인코더의 최종 출력(Key/Value) 를 공유

✅ 4. 왜 인코더 중간 출력은 사용하지 않을까?

  • 이유: 일관성 및 효율성
  • 인코더는 계층을 거치며 정보를 정제
  • 중간 값보다는 최종 표현이 더 풍부하고 효과적

📌 예외:

  • 일부 모델(Perceiver, Universal Transformer 등)은 중간 레이어 사용 가능

✅ 5. Attention = 가중합 = 행렬곱

📐 수식

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

📌 과정 요약

  1. QKᵀ → Query와 Key 간 유사도 계산
  2. Softmax → 유사도를 확률 분포로 변환
  3. 곱하기 V → Value 벡터들의 가중합

📎 이 연산은 왜 행렬곱인가?

  • Softmax 결과는 Attention Weight 행렬 A
  • 행렬 A × V = Query마다 Value의 가중합
  • 벡터별 for-loop 없이 병렬화 가능 → 성능 최적화

✅ 최종 요약

질문답변
Cross Attention의 Key/Value는 무엇인가요?인코더의 최종 출력입니다.
모든 디코더 블록이 같은 Key/Value를 쓰나요?✅ 네, 인코더 최종 출력을 공유합니다.
Attention은 가중합인가요?✅ 네, Softmax(QKᵀ) × V로 계산되는 가중합입니다.
이 가중합은 행렬곱으로 구현되나요?✅ 네, 병렬 연산 및 최적화를 위해 행렬곱으로 구현됩니다.

profile
AI developer

0개의 댓글