ML/AI/SW Developer

Transformer - Multi head attention

1. Multi-Head attention

1.1 Problem of single attention

  • Only one way for words to interact with one another
    • 하나의 행렬 셋만 존재
    • 여러 측면에서 정보를 병렬적으로 얻을 수 없음

1.2 Multi-Head attention

  • $MultiHead(Q, K, V) = Concat(head_1, …, head_h)W^o$
  • $Where \ head_i=Attention(QW_i^Q, \ KW_i^K, \ VW_i^V)$
    • 여러버전의 어텐션을 수행하고 Concat하여 사용
  • 계산 복잡도
    • n: sequence 길이
    • d: representation의 차원
    • k: convolution의 kernel size
    • r: neighborhood의 크기
    Layer type Complexity per Layer Sequential Operations Maximum Path Length
    Self-attention $O(n^2 \cdot d)$ $O(1)$ $O(1)$
    Recurrent $O(n \cdot d^2)$ $O(n)$ $O(n)$
    Convolution $O(k \cdot n \cdot d^2)$ $O(1)$ $O(log_k(n))$
    Self-attention (restricted) $O(r \cdot n \cdot d)$ $O(1)$ $O(n/r)$

1.3 Transformer: Block-Based Model

  • Block 구조
    • $LayerNorm(x+sublayer(x))$
    • 그림과 같이 ‘I’에 대한 벡터와 ‘I’를 쿼리로한 Attention 모듈의 출력을 Add 해 최종 임베딩 벡터를 얻음 (Why?)
      • Gradient vanishing 방지 효과
      • 학습안정화 효과
    • LayerNorm
      • 주어진 다수의 샘플들에 대해 평균 0, 분산 1로 만들어주고, 원하는 평균과 분산을 주입해 줄 수 있게 해줌
      • Batch Normalization

1.4 Transformer: Positional encoding

  • {home, go, I} / {I, go, home} 순서로 입력했을 때, I에 대한 임베딩 결과가 동일
    • 가중평균을 낼 때, 교환법칙이 성립하기 때문
    • 순서를 고려하지 않는 임베딩이 됨
  • Positional Encoding
    • $PE_{(pos, 2i)} = sin(pos/10000^{2i \over d_{model}})$
    • $PE_{(pos, 2i+1)} = cos(pos/10000^{2i \over d_{model}})$
    • E.g.
      • 실제로 사용하는 sin, cos 조합 벡터

1.5 Tansformer: Warm-up Learning Rate Scheduler

  • $learning rate = d_{model}^{-0.5} \cdot min(step^{-0.5}, step \cdot warmup_{steps}^{-1.5}) $

2. Transformer: High-Level View

2.1 Encoder: Self-Attention Visualization

  • 윗줄은 Query, 아래는 Attention Value, 색상은 각각 head를 의미
  • ‘making’ 이라는 단어에 대해 ‘more’과 ‘difficult’가 큰 관계를 보임
  • 이러한 방식으로 시각화를 통해 분석이 가능

2.2 Decoder: Masked Self-Attention

  • 인코더로 부터 V, K를 받아옴
  • 디코더의 입력으로 부터 생성된 Attention vector가 Query로 사용됨
  • Masked Self-Attention
    • Inference 상황을 생각해보면, 실제로 뒤에 어떤 단어가 입력으로 들어 올지 decoder는 알 수 없다. 학습 때는 모든 입력값을 넣어주지만, 실제 상황을 고려해 정보를 통제해 줄 필요가 있다. 따라서 그림과 같이 얻을 수 없는 정보에 대해 0으로 처리한 후, 남은 값들을 1이 되게 가중평균을 사용해 맞추어 준다.

2.3 성능비교

  • BLEU score 20 ~ 40%는 서비스 중인 번역 성능과 유사

3. Further Question

  • Attention은 이름 그대로 어떤 단어의 정보를 얼마나 가져올 지 알려주는 직관적인 방법처럼 보입니다. Attention을 모델의 Output을 설명하는 데에 활용할 수 있을까요?