본문 바로가기

컴퓨터/딥러닝

Attention is all you need

Attention is all you need

순수한 RNN은 gradient vanishing 문제가 심각했다. 따라서 입력 문장이 길어지면 성능이 떨어졌다. 그것을 해결하기 위해 gating mechanism을 도입한 LSTM과 GRU가 만들어졌다. 그리고 attention mechanism이 등장했다. LSTM에 어텐션을 적용하는 식이다. 그러다 "Attentioin is all you need"에서 recurrent한 특성은 완전히 빼버리고 어텐션 메커니즘만 사용한 새로운 모델인 Transformer로도 좋은 성능이 나온다는 것을 알아내게 된다.


Attention

Scaled Dot-Product Attention

Scaled dot-product attention은 매우 간단하다. Query와 key를 내적하고 softmax를 적용하고 value와 곱하는 것이다. 그리고 softmax를 적용하기 전 scaling이 들어간다. Mask는 decoder의 self-attention에서 미래의 입력을 참조하는 것을 막기 위해 적용한다.

 

Multi-Head Attention

Multi-head attention은 scaled dot-product attention을 병렬로 배치한 것이다. 따라서 다양한 관점에서의 병렬적 어텐션이 가능하게 된다. Scaled dot-product attention 그림과는 달리 \(Q, K, V\)는 linear를 통과해서 들어간다. 사실 이 linear layer가 있어야 어텐션 학습이 된다. Scaled dot-product attention 그림에는 없는 이유는 순수하게 scaled dot-product attention 메커니즘만 나타내기 위해서이다. 따라서 scaled dot-product attention 그림의 \(Q, K, V\)는 사실 \(QW_Q^i, KW_K^i, VW_V^i\) 라고 생각하면 된다.


Transformer

Transformer는 "Attention is all you need"에서 새로 만든 모델이다. Transformer는 크게 encoder, decoder로 나뉘며 encoder의 한 블럭에는 multi-head self attention과 feed forward가 있다. Decoder의 한 블럭에는 masked multi-head self attention과 multi-head cross attention, feed forward가 있다. Attention 단락에 설명하였듯이 디코더의 셀프 어텐션은 미래의 입력을 참조하면 안되기 때문에 마스킹이 들어간다. 그리고 디코더에서 두번째 multi-head attention에서 query는 decoder꺼를 가져오고 key와 value는 인코더의 출력을 가져온다. 여기서는 마스킹을 하지 않는다.

 

번역의 예시를 들어보겠다. 프랑스어에서 영어로 번역을 한다면 프랑스어 원본은 미리 모두 알고 있는 상태에서 영어로 번역을 진행 할 것이다. 따라서 영어에서 영어로 참조하는 셀프 어텐션은 미래의 번역결과를 알 수 없기 때문에 마스킹을 적용하고 영어에서 프랑스어로 참조하는 크로스 어텐션에서는 이미 모든 프랑스어 원본을 알고 있기 때문에 마스킹을 적용하지 않는다. 동시통역은 뭔데? 라는 생각이 들 수 있으나 동시통역에서도 한 문장 정도의 딜레이가 존재한다고 알고 있다. 영어 한 문장을 번역하고 있는 도중에 프랑스어 한 문장은 이미 모두 알고 있는 것이다.

 

Encoder와 Decoder는 아래 그림에선 하나씩만 그려져 있지만 이게 각각 N개씩 쌓여있다. N=6으로 하는게 정석인 듯 하다. Transformer 구조 자체는 transduction을 위한 구조라고 생각하면 편하다. 즉 번역과 같이 무언가에서 무언가로 변환하는 것을 위한 구조이다. 여기서 encoder만 사용하면 BERT가 되고 decoder만 사용하면 GPT가 된다. 


Positional Encoding

Positional encoding은 Transformer의 핵심이다. RNN, LSTM, GRU에서 recurrent한 특성을 놓지 않고 끝까지 가져갔던 이유는 언어에서 순서가 매우 중요하기 때문이다. "인간은 동물이다"와 "동물은 인간이다"는 천지차이이다. Recurrent 특성 없이 순수한 attention만으로는 위치에 대한 정보가 없기 때문에 positional encoding은 꼭 필요하다.

Absolute Positional Encoding

Transformer에서는 absolute positional encoding을 사용한다. 원리는 심플하다. \(cos\)과 \(sin\)은 주파수가 충분히 높다면 직교한다고 볼 수 있다. \(cos\)과 \(sin\)을 이용해 마치 \(xy\)좌표계에서 \(x, y\)처럼 \(cos\), \(sin\)을 이용해 유일한 위치를 나타내고자 하는 것이다. \(d_{model}\)은 단어 임베딩의 차원이고 \(i\)는 단어 임베딩 차원 축으로의 좌표, \(pos\)는 토큰(단어)들이 나열되었을 때 그 나열된 축으로의 좌표이다.


Input and Output Embeddings

컴퓨터로 단어를 처리하기 위해 단어는 임베딩이라는 벡터로 바뀌어야 한다. 이를 위해 input embedding과 output embedding층이 존재한다. 이 임베딩은 미리 학습되어있는 것을 쓴다. 따라서 input embedding과 output embedding은 같은 가중치를 공유한다.

'컴퓨터 > 딥러닝' 카테고리의 다른 글

N neurons 라는 말은?  (0) 2023.12.24