본문 바로가기
Deep Learning Specialization

Transformers [Deep Learning Specialization #15]

by ALTERww 2022. 8. 23.
320x100

Coursera의 Deep Learning Specialization - Week 5의 강의를 수강하면서 필기한 내용을 바탕으로 정리한 글입니다.

 

지난 시간에는 Sequence to Sequence Models 등에 대해 배웠습니다.

이번 시간에는 Transformer Network를 살펴 보겠습니다.

 

 

What is Transformer Network?

지금까지 시퀀스 모델로 RNN, GRU, LSTM을 배웠습니다. RNN은 아주 단순한 형태이고, GRU와 LSTM은 문장 단어의 순서를 고려한 모델이었습니다. 모델이 변화함에 따라 정보의 흐름을 제어하는 것이 용이해졌지만, 그만큼 모델의 복잡도가 높아졌습니다.

 

최근 각광받고 있는 네트워크 모델이 바로 Transformer입니다.

Transformer는 Attention과 CNN이 합쳐진 모델입니다.

Attention은 문장 속 모든 단어들에 대해 집중해야 할 정도를 고려합니다. 이는 좀 더 풍부한 표현이 가능하도록 도와줍니다.

그리고 CNN(합성곱 신경망)은 차원을 낮추어 모든 Unit들에 대해 동일한 연산을 수행할 수 있게 병렬처리를 해 줍니다.

 

 

Self-Attention

어텐션 기반 벡터 A가 있습니다. 이는 문장 속 모든 단어들이 계산하게 되는 벡터입니다.

RNN Attention에서 어텐션을 구하는 방정식과 비슷한 형태를 가지고 있습니다. 분모는 Softmax로 표현되는 것까지도요.

A를 구하는 방정식에는 q, k, v 3가지 변수가 사용됩니다. 

 

q<t>는 Query로, 해당 단어인 X<t>에 대한 질문에 해당합니다.

k<t>는 Key로, 해당 쿼리에 대한 답에 대응하는 값입니다. 

따라서 q<t>와 k<t>의 내적을 계산했을 때, 값이 클수록 큰 연관/맥락을 가진다는 것을 알 수 있습니다.

그래서 각 단어 q<t>에 대해 모든 단어들의 Key k<t'>를 내적하여 계산합니다.

 

v<t>는 Value로, 최종 결과에 가중치를 부여하는 값입니다.

모든 단어들에 대해 쿼리와 키를 내적한 결과에 v<t'>를 곱한 뒤, 더하여 최종 어텐션 A<t>를 계산하게 됩니다.

 

이 Self-Attention의 최대 장점은, 각 단어들이 고정된 Word Embeddings가 아니라는 점입니다.

Africa는 visits의 목적어로써, 방문지를 의미한다는 것을 알게 됩니다.

 

Softmax의 결과를 가중치로 이용하여, Value를 이에 곱해 단어의 최종 가중치를 결정하게 됩니다.

 

q<4>*k<4> X => q<3>*k<4>

 

Multi-Head Attention

Self-Attention은 하나의 메커니즘에 대응합니다. 어떤 일이 일어나고 있다거나, 어딘지를 묻고 있다거나, 언제인지를 묻고 있다거나 등등이 있습니다. 이렇게 독립적인 여러 메커니즘에 대해 병렬하게 어텐션을 수행하는 것이 Multi-Head Attention입니다.

 

각 단어는 고유한 q, k, v값을 가집니다. 그리고 각 메커니즘에 대해 고유한 가중치 W1_Q, W1_K, W1_V를 가지고, 각 단어의 q, k, v에 곱합니다. 그리고 Self-Attention과 동일하게 계산합니다.

다른 메커니즘에 대해서는 또 고유한 가중치 W2_Q, W2_K, W2_V를 가지게 되며 W1을 곱했던 어텐션과는 독립적으로 연산을 수행합니다. 각 메커니즘에 대한 계산을 수행하는 것을 하나의 Head라고 부르며, 여러 메커니즘에 대해 병렬하게 수행하므로 Multi-Head라는 이름이 붙게 되었습니다.

 

계산하는 식에서는 각 헤드가 연속적으로 합쳐진 것으로 보이지만, 실제로 각 Head는 Parallel하게 연산됩니다.

 

 

Transformer

트랜스포머 모델은 인코더에서 입력 시퀀스를 입력받은 뒤 디코더에서 출력 시퀀스를 출력하는 구조를 띠고 있습니다. 

 

인코더는 각 단어들이 전체 문장에서 어떤 특징을 가지고 있는지 계산하기 위한 멀티헤드 어텐션과 Feed Forward NN을 가지고 있습니다. 이 과정을 N회 반복합니다.

 

그리고 디코더는 시작 단어인 <SOS>로부터 출력 시퀀스의 다음 단어 번역을 예측하고, 그 값을 다시 디코더의 입력으로 넣어 그 다음 번역을 예측합니다. 디코더의 입력으로부터 Q값을 계산하고, 인코더로부터 K, V값을 얻어와 계산을 수행합니다. 

 

Positional Encoding

트랜스포머의 인코더에서 중요한 것은, 입력 시퀀스가 한 번에 들어오기 때문에 각 단어별 위치 정보를 알려줄 필요가 있습니다. 따라서 Positional Encoding을 사용합니다.

사인 함수와 코사인 함수를 이용한 값을 함께 임베딩하여 위치 정보도 함께 알 수 있도록 합니다.

그리고 Positional Encoding을 아키텍처에 포함시키기 위해 Residual Connections를 이용해 더해 주고, 정규화 과정을 거칩니다. 이 과정은 학습 속도를 향상시키는 데 도움이 됩니다. 그림에서는 Add & Norm이라고 표현되었습니다.

 

디코더에서는 최종 Layer에 Linear, Softmax를 배치하여 한 번에 하나의 단어를 예측하도록 합니다.

 

마지막으로 디코더에서 Masked Multi-Head Attention이라는 것이 사용되기도 하는데, 이는 훈련할 때 데이터셋이 정확하다면 굳이 처음부터 끝까지 확인할 필요가 없다는 점에서 용이하게 사용됩니다.

정확한 문장이 주어지면, 뒷부분만 숨겨둔 뒤 앞의 정확한 몇 단어를 보았을 때 뒷부분을 어느 정도로 예측하는지를 확인하는 것입니다.

 

댓글