Transformer¶
RNN: Long-Term Dependency¶
위 그림과 같이 $h_{3}$의 값을 계산하려면 뒷 단의 모든 RNN값을 거쳐서 계산 되기 때문에 정보 유실이 일어나기 쉽다.
Bi-Directional RNNs¶
encoding방향을 정방향과 역방향 2가지를 가지고 RNN를 구성하면 해당 time step에서 왼쪽의 hidden state값과 오른쪽의 hidden state 값 모두를 고려 할 수 있다. 정방향과 역방향의 hidden state를 concat하여 구성하고 hidden state의 dim의 2배가 되는 새로운 hidden state가 생긴다.
Transformer(Self-Attention)¶
위 그림을 보면 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의 동작 방식을 구체적으로 알아보자.
먼저 여기서 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}$가 된다.
🔎 개념을 더 확장해서 보자¶
여러개의 퀴리 q를 가지고 있을때, 우리는 matrix $Q$에 q를 쌓을 수 있다.
그러면 위 수식은 아래와 같이 바꾼다.
- $|Q|$, $|K|$, $|V|$는 각각의 벡터의 개수를 의미한다.
- $Softmax$가 row별로 계산을 한다.
여기서 문제가 있다.
- $d_{k}$가 커질 수록, $q^{T}k$의 분산이 증가한다.
- $Softmax$내에 값이 커짐
- 따라서 이것에 gradient가 더 작게 얻어진다.
이 문제는 Query, key Vector의 길이에 의해서 Scale을 해줘서 해결가능하다.
위 그림 처럼 각각의 attention적용한 결과를 concat하고 마지막에 linear layer을 통해서 Output을 얻는다.
🔎 그림으로 확인해 보자¶
위 그림 처럼 8개의 head가 존재하면 결과가 8개의 attention이 나오게 된다. 각 head마다 Q,K,V도 따로 존재한다. 여기서 attention의 차원은 3이된다.
여러 head에서 나온 결과를 합치게 되는데 각 head에서의 attention의 차원은 3이므로 합치게 되면 3X8 = 24차원이 된다. 이후 linear layer를 거쳐서 우리가 원하는 dim으로 줄여주게 되는데 위 예시를 보면 최종 결과는 4차원의 결과를 얻는다. 위 결과를 얻기 위해서 W의 shape은 (24,4)가 된다.
여러 layer type들의 복잡도¶
✅ Block-Basesd Model¶
📌 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을 가지게 바꿔준다.
레이어 정규화는 두 단계로 구성됩니다.¶
- 평균이 0이고 분산이 1인 각 단어 벡터의 정규화.
- 학습 가능한 parameter를 가지고 각 sequence vector의 Affine Transformation을 적용한다
✅ Positional Encoding¶
지금 까지 보게 되면 input vector의 sequence의 정보를 담고 있지 않다. 이러면 "I go home"의 입력 값을 넣을 때와 "home go I"값을 입력 값으로 넣을때 각 단어의 encoding Vector는 같은 값을 가지게 된다. 따라서 sequence한 정보를 주기위해서 기존input값에 각각 위치 순서에 따라 고유한 값들을 더해서 위치 정보를 추가 시켜준다. 아래 함수가 위치 정보를 추가 시키는 함수이다.
각 차원 마다 다른 주파수를 사용하는 함수를 그리면 위와 같다. 여기서 위치 정보는 input의 위치별로(위 그림의 x값) input에 각 차원마다 해당하는 주파수의 값을 각각 더해서 unique한 위치 정보를 추가해 준다.
✅ Learning Rate Scheduler¶
학습 동안 learning rate를 바꿔주면서 학습을 하게 된다. x축은 iteration을 의미한다.
✅ Decoder¶
여기서 먼저 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¶
학습 당시에는 batch processing을 통해서 "나는"과 "집에"라는 Key,Value를 사용하지만
아직 추론 되지 않은 값을 0으로 만드는 후처리 작업을 진행한다.
이후 결과를 각 재정규화 작업을 진행한다.
'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 |