Transformer Network
Transformer Network Intuition
sequence 작업의 복잡도가 증가함에 따라, model 의 복잡도도 증가했다.
RNN 에서 vanishing gradients 문제가 있어서 긴 범위의 의존성과 sequence를 포착하기 어렵다는 단점이 있어서 이를 해결하기 위한 모델인 GRU가 나왔고, 정보의 흐름을 제어하는 것이 용이하게 하기 위해 LSTM 으로 모델이 이동하면서 연산량과 작업량은 더 복잡해졌다. 이는 모든 모델들은 순차적 모델(sequential model)로, 마지막 단위를 계산하기 위해서는 이전의 단위를 계산해야만 하기 때문이다.
Transformer architecture 는 전체 sequence에 대한 많은 계산들을 병렬적으로 실행하도록 도와준다.
이는 Attention + CNN 이다. 즉, attention 기반 representations 의 사용과 CNN 모델을 결합한다.
Self-Attention
CNN 스타일로 병렬 연산을 하기 위해서는 input 문장의 각 단어에 대한 attention 값을 생성하는 self attention 을 계산해야 한다.
위 문장엔 단어가 5개니, 해당 A가 5개 필요하다 (각각을 $ A^{<1>}, A^{<2>}, \cdots, A^{<5>} $ 라고 하자)
3번째 단어를 먼저 살펴보자. 해당 단어를 나타내는 방법 중 하나는 해당하는 word embedding 을 찾는 것이다
더운 대륙, 휴식지, 두 번째로 큰 대륙 등등 어떻게 해당 단어를 생각하냐에 따라 다르게 표현할 수 있다.
이게 바로 $ A^{<3>} $ 가 하는 일로, 맥락을 보고 가장 적절한 표현을 찾는 것이다. 실제 계산은 RNN의 어텐션 모델과 유사하다.
모든 단어가 query, key, value 를 가지고 있다는 차이가 있다.
이들은 아래와 같이 학습된 행렬로 계산된다.
$q^{<3>} = W^{Q} * x^{3} $
$k^{<3>} = W^{K} * x^{3} $
$v^{<3>} = W^{V} * x^{3} $
W는 학습 가능한 parameter 이다.
각각이 뭔지 직관적으로 알아보자. q는 쿼리로 질문이고, k는 사람이나 행동 같은 느낌이다.
"그 단어에서 무슨 일이 일어나고 있는 거지?"인 q와 무슨 행동이나 사람인 k를 내적을 계산한다
아프리카를 방문하고 있으니 아프리카에 무슨 일이 일어나는 거지? 에 대한 답이 visite의 key가 되고, 값이 가장 크다
이 표현의 장점은 단어가 고정된 임베딩을 가지지 않는다는 것이다
아프리카가 방문지라는 걸 학습시켜 더 풍부하고 유용한 표현을 계산하게 한다
이 과정을 모든 단어에 시행해주면 된다.
위의 사진에서 사용된 수식을 벡터화해서 표현하면 아래와 같다.
$Attention(Q, K, V) = softmax({QK^{T} \over \sqrt{d_{k}}})V $
분모의 d는 scale로 값이 너무 커지지 않게 해 준다. 이를 scaled dot product attention이라고 부른다.
Multi-Head Attention
앞서 설명한 Self-Attention 은 하나의 매커니즘에 해당한다. 이는 어떤 일이 일어나고 있다거나, 어딘지를 묻고 있다거나, 언제인지를 묻고 있다거나 등등이 있다. 이렇게 독립적인 여러 매커니즘에 대해 병렬하게 attention 을 처리하는 것이 Multi-Head Attention 이다.
헤드라고 불리는 시퀀스의 self-attention 계산을 살펴보자
각 단어는 고유한 q, k, v 값을 가진다. 그리고 각 매커니즘에 대해 고유한 가중치 $ W_{1}^{Q}, W_{1}^{K}, W_{1}^{V} $ 를 가지고, 각 단어의 q, k, v 에 곱한다. 그리고 Self-Attention 과 동일하게 계산한다.
다른 매커니즘에 대해서는 또 고유한 가중치 $ W_{2}^{Q}, W_{2}^{K}, W_{2}^{V} $ 를 가지게 되며 $ W_{1} $ 을 곱했던 attention 과는 독립적으로 연산을 수행한다. 각 매커니즘에 대한 계산을 수행하는 것을 하나의 Head 라고 부르며, 여러 매커니즘에 대해서 병렬적으로 수행하게 된다.
계산하는 식에서는 각 헤드가 연속적으로 합쳐진 것으로 보이지만, 실제로 각 Head 는 Parallel 하게 연산된다.
Transformer Network
encoder 에서 입력 sequence 를 입력받은 뒤 decoder 에서 출력 sequence 를 출력하는 구조를 띠고 있다.
인코더는 각 단어들이 전체 문장에서 어떤 특징을 가지고 있는지 계산하기 위한 multi head attention 과 Feed Forward NN 을 가지고 있다. 이 과정을 N회 반복한다.
그리고 Decoder 는 시작 단어인 <SOS> 로부터 출력 sequence 의 다음 단어 번역을 예측하고, 그 값을 다시 Decoder의 입력으로 넣어 그 다음 번역을 예측한다. Decoder의 입력으로부터 Q 값을 계산하고, encoder 로부터 K, V 값을 얻어와 계산을 수행한다.
이 network 에서 중요한 것은, 입력 sequence 가 한 번에 들어오기 때문에 각 단어별 위치 정보를 알려줄 필요가 있다. 따라서 positional encoding 을 사용한다.
사인 함수와 코사인 함수를 이용한 값을 함께 embedding 하여 위치 정보도 함께 알 수 있도록 한다. 그리고, positional encoding 을 architecture 에 포함시키기 위해 Residual Connections 을 이용해 더해주고, normalization 과정을 거친다. 이 과정은 학습 속도를 향상시키는 데 도움이 된다. 그림에서는 Add & Norm 이라고 표현되어 있다.
decoder 에서는 최종 lyaer에 Linear, Softmax 를 배치하여 한 번에 하나의 단어를 예측하도록 한다.
마지막으로 decoder에서 Masked Multi-Head Attention 이라는 것이 사용되기도 하는데, 이는 훈련할 때 data set이 정확하다면 굳이 처음부터 끝까지 확인할 필요가 없다는 점에서 용이하게 사용된다. 정확한 문장이 주어지면, 뒷부분만 숨겨둔 뒤 앞의 정확한 몇 단어를 보았을 때 뒷부분을 어느 정도 예측하는지를 확인하는 것이다.
'연구실 > 인공지능(Coursera)' 카테고리의 다른 글
[AI 14주차] Sequence models & Attention Mechanism (0) | 2024.08.19 |
---|---|
[AI 13주차] Natural Language Processing & Word Embeddings (0) | 2024.08.18 |
[AI 12주차] Sequence Model : 순환 신경망(RNN) (1) | 2024.08.16 |
[AI 11주차] Face Recognition (얼굴 인식) & Neural Style Transfer(신경 스타일 전송) (0) | 2024.08.10 |
[AI 10주차] Object Detection (1) | 2024.08.09 |