Transformer 이론

Transformer


RNN: Long-Term Dependency

image.png

위 그림과 같이 $h_{3}$의 값을 계산하려면 뒷 단의 모든 RNN값을 거쳐서 계산 되기 때문에 정보 유실이 일어나기 쉽다.


Bi-Directional RNNs

image.png

encoding방향을 정방향과 역방향 2가지를 가지고 RNN를 구성하면 해당 time step에서 왼쪽의 hidden state값과 오른쪽의 hidden state 값 모두를 고려 할 수 있다. 정방향과 역방향의 hidden state를 concat하여 구성하고 hidden state의 dim의 2배가 되는 새로운 hidden state가 생긴다.


Transformer(Self-Attention)

image.png

위 그림을 보면 Seq2Seq with Attention모델에서 decoder의 hidden state의 값이 여기서 input값으로 보면 같은 작용을 하는 것을 알 수 있다.

Seq2Seq with Attention모델에서,

  • decoder의 hidden state의 값과 encoder의 hidden state의 값을 내적을 통해 score값을 만든다.
  • 만들어진 score값을 통해서 $Softmax$를 지나서 가중치 벡터를 만든다.
  • 이를 이용해서 hidden state의 가중 평균을 구한 값이 Attention값이라고 부르는 Context Vector이다.

Transformer의 동작 방식을 구체적으로 알아보자.

image.png

먼저 여기서 Query, Key, Value Vector가 존재한다. 각 벡터의 의미는 다음과 같다.

  • Query Vector는 자신을 얼마나 참조할지
  • Key Vector는 다른 단어들의 영향이 어떻게 될지
  • Values Vector는 결과로 나온 가중치 벡터와 계산을 하게될 값

여기서 각 input Vector에 대해서 $W$ 벡터를 곱하여 각각의 Query, Key, Value Vector를 생성하게 된다.

📌 처음 그림을 참조하면서 보자. 예시로 먼저 입력값이 $x_{1}$에 대해서 확인해 보겠다.

1️⃣ 가장 먼저 위 그림과 같이 $W$행렬과 행렬 곱을 통해서 각각의 Vector를 생성

  • 이때 생성하는 Vector는 계산을 하게될 input값($x_{1}$)의 Query Vector하나와 나머지 모든 입력 값의 Key, Value Vector를 계산하게 된다.

2️⃣ 해당 입력 값의 Query Vector와 나머지 Key Vector의 내적 계산을 한다.

  • 위 예시를 보면 그 결과로 [3.8, -0.2, 5.9]의 값이 나온다.

3️⃣ 위 내적 결과로 나온 값을 $Softmax$를 거친 결과를 계산.

  • 위 예시를 보면 그 결과로 [0.2, 0.1, 0.7]의 값이 나온다.

4️⃣ $Softmax$값과 Value Vector의 가중치 합 구해서 $h_{1}$의 값을 도출

5️⃣ 다음 input값에 대해서도 해당 Query Vector만 바꿔가면서 계산을 진행한다.

참고. Transformer - Sequential Models에서 행렬로 계산하는 것을 볼 수 있다.



✍ 여기서 요약해 보면

  • Query, Key, Value와 Output은 모두 Vector이다.
  • Output은 Values의 가중합이다.
  • 각 value의 가중치는 Query와 그에 대응하는 Key의 내적으로 계산한다.
  • Query와 Key는 같은 차원 $d_{k}$를 가지고 Value는 이와 무관한 $d_{v}$ 차원을 가진다.
  • Output의 차원은 $d_{v}$가 된다. image.png



🔎 개념을 더 확장해서 보자

여러개의 퀴리 q를 가지고 있을때, 우리는 matrix $Q$에 q를 쌓을 수 있다. image.png

그러면 위 수식은 아래와 같이 바꾼다.

image.png

  • $|Q|$, $|K|$, $|V|$는 각각의 벡터의 개수를 의미한다.
  • $Softmax$가 row별로 계산을 한다.


image.png

여기서 문제가 있다.

  • $d_{k}$가 커질 수록, $q^{T}k$의 분산이 증가한다.
  • $Softmax$내에 값이 커짐
  • 따라서 이것에 gradient가 더 작게 얻어진다.

이 문제는 Query, key Vector의 길이에 의해서 Scale을 해줘서 해결가능하다.

image.png



✅ Multi-Head Attention

❗ 하나의 Attention의 문제점

  • 단어가 다른 것들과 상호작용하는 한가지 방법만을 가진다.

따라서 우리는 Multi-head attention을 가짐으로써 여러개의 상호작용을 고려할 수 있다.

  • 위 Self-Attention을 여러개로 확장한 개념이다.

image.png

위 그림 처럼 각각의 attention적용한 결과를 concat하고 마지막에 linear layer을 통해서 Output을 얻는다.

image.png


🔎 그림으로 확인해 보자

image.png

위 그림 처럼 8개의 head가 존재하면 결과가 8개의 attention이 나오게 된다. 각 head마다 Q,K,V도 따로 존재한다. 여기서 attention의 차원은 3이된다.


image.png

여러 head에서 나온 결과를 합치게 되는데 각 head에서의 attention의 차원은 3이므로 합치게 되면 3X8 = 24차원이 된다. 이후 linear layer를 거쳐서 우리가 원하는 dim으로 줄여주게 되는데 위 예시를 보면 최종 결과는 4차원의 결과를 얻는다. 위 결과를 얻기 위해서 W의 shape은 (24,4)가 된다.


여러 layer type들의 복잡도

image.png


✅ Block-Basesd Model

image.png

각 block은 2개의 sub-layer를 가진다.

  • Multi-head attention
  • Two-layer feed-forward NN(with ReLU)

이 2개의 층 각각에 아래의 작업을 수행한다.

  • Residual connection and layer normalization
  • $LayerNorm(x+sublayer(x))$

📌 Residual connection

Residual connection은 입력으로 들어온 값과 각 입력이 Multi-Head Attention을 통과해서 나온 encoding Vector의 합을 결과로 가진다. 그러면 결국 Residual connection의 결과가 우리가 얻고 싶은 결과이면 Multi-Head Attention에서는 그 차이 값만을 만들어 줘야 한다. 이러한 과정을 통해서 gradient vanishing문제도 해결하고 학습도 안정화 시킬 수 있다. Residual connection을 적용하기 위해서는 input Vector와 encoding Vector의 차원이 정확히 일치해야한다.

📌 LayerNorm

  • Layer 정규화는 입력을 레이어 별 및 훈련 포인트 별로 평균은 0, 분산은 1을 가지게 바꿔준다.

image.png

레이어 정규화는 두 단계로 구성됩니다.

  • 평균이 0이고 분산이 1인 각 단어 벡터의 정규화.
  • 학습 가능한 parameter를 가지고 각 sequence vector의 Affine Transformation을 적용한다

image.png


✅ Positional Encoding

지금 까지 보게 되면 input vector의 sequence의 정보를 담고 있지 않다. 이러면 "I go home"의 입력 값을 넣을 때와 "home go I"값을 입력 값으로 넣을때 각 단어의 encoding Vector는 같은 값을 가지게 된다. 따라서 sequence한 정보를 주기위해서 기존input값에 각각 위치 순서에 따라 고유한 값들을 더해서 위치 정보를 추가 시켜준다. 아래 함수가 위치 정보를 추가 시키는 함수이다.

image.png

image.png

각 차원 마다 다른 주파수를 사용하는 함수를 그리면 위와 같다. 여기서 위치 정보는 input의 위치별로(위 그림의 x값) input에 각 차원마다 해당하는 주파수의 값을 각각 더해서 unique한 위치 정보를 추가해 준다.


✅ Learning Rate Scheduler

image.png

학습 동안 learning rate를 바꿔주면서 학습을 하게 된다. x축은 iteration을 의미한다.



✅ Decoder

image.png

여기서 먼저 Decoder에 Output을 넣어주게 되는데 Masked Multi-Head Attention거치게 된다. Masked Multi-Head Attention은 뒤에서 설명한다.

  • 그 결과로 나온 값이 윗단의 Multi-Head Attention의 Query Vector로 들어간다.
  • encoder의 출력이 Multi-Head Attention의 Value, Key Vector로 들어가게 된다.



✅ Masked Self-Attention

image.png

학습 당시에는 batch processing을 통해서 "나는"과 "집에"라는 Key,Value를 사용하지만 를 Query로 사용해서 attention module을 사용해 예측 할 때는 접근 가능한 Key, Value에 "나는"과 "집에"라는 단어는 제외해 주어야 한다.

image.png

아직 추론 되지 않은 값을 0으로 만드는 후처리 작업을 진행한다.


image.png

이후 결과를 각 재정규화 작업을 진행한다.

'AI > 이론' 카테고리의 다른 글

실제 그래프는 어떻게 생겼을까?  (0) 2021.02.22
그래프란 무엇이고 왜 중요할까?  (0) 2021.02.22
Advanced Self-Supervised Pre-training Models  (0) 2021.02.19
Self-Supervised Pre-training Models  (0) 2021.02.19
Beam search and BLEU  (0) 2021.02.17
Seq2Seq  (0) 2021.02.17
LSTM and GRU  (0) 2021.02.16
RNN and Language modeling  (0) 2021.02.16

+ Recent posts