밍경송의 E.B

Transformer(1) - Attention mechanism 본문

DL&ML/model

Transformer(1) - Attention mechanism

m_gyxxmi 2024. 7. 5. 17:00

연구에 참여하기 위해 간단히 공부한 부분에 대해 정리해두고자 한다.

 

Transformer 모델은 Translate 문제에서 RNN/CNN을 쓰지 않고 Attention과 Fully Connected Layer와 같은 기본 연산들만으로 SOTA 성능을 이끌어낸 연구로 유명하다. 

 

 

내가 궁극적으로 알고자했던 모델은 Vit(Vision transformer)기 때문에, 이 개념에 도달하기 위해 먼저 Transformer에 대해 알아봤다.

 

먼저 Transformer에 대해 간단히 소개하자면,

What is Transformer?

 

Transformer란 구글의 논문 "Attention is all you need"에서 등장한 모델로, 같은 input data(문장 등)에서 중요한 정보를 추출하고 output data를 생성하는 딥러닝 모델이다. 이때, 각 단어들 간의 상호작용을 고려한 'Self-Attention mechanism'을 사용한 것이 특징이다.

 

논문 제목이 귀여움. 나중에 꼭 읽어볼 것.

https://arxiv.org/abs/1706.03762

 

Attention Is All You Need

The dominant sequence transduction models are based on complex recurrent or convolutional neural networks in an encoder-decoder configuration. The best performing models also connect the encoder and decoder through an attention mechanism. We propose a new

arxiv.org

 

 

Self- Attention mechanism에 대해 알려면, Attention mechanism이 뭔지 알아야 하는데, 이 부분을 translate 문제로 이해해보려고 한다.

Seq2seq model and Attention mechanism

 

기존의 seq2seq 모델(attention 사용X)은 input data를 압축 데이터(context vector)로 변환함으로써 연산량을 최소화한다는 특징을 가진다.

 

그런데 이러한 모델은 아래 그림에서 볼 수 있듯, 인코더에서 h 값을 순차적으로 전달하기 때문에 마지막 RNN 셀의 출력 값이 디코더에 가장 큰 영향을 줄 수밖에 없는 구조를 가진다. 

 

그러니까 h3에 비해 h1이나 h2의 정보는 적게 포함되는 bottleneck(병목현상)이 발생한다는 문제점이 존재한다.

*RNN은 output으로 hidden states(행렬)을 출력함.

 

https://towardsdatascience.com/understanding-encoder-decoder-sequence-to-sequence-model-679e04af4346

 

 

 

What is Attention?

 

이러한 문제를 해결하기 위해 각 셀에서 생성되는 모든 hidden state vector(h)의 정보를 디코더로 전달하려는 Attention 메커니즘이 등장했다. 여기서 주의할 점은 모든 셀의 h를 동등하게 전달하는 것이 아니라, 문장의 문맥에 따라 집중할 단어를 결정한다는 것이다.

 

https://codingopera.tistory.com/41

인코더에서는 hidden states가 모든 셀에서 나오는 한편, 디코더에서는 현재 셀의 hidden states만 사용하는 것을 볼 수 있는데, 그 이유는 target sequence의 한 단어와 src sequence의 모든 단어의 Attention 상관관계를 비교하는 로직을 가지기 때문이다.

https://codingopera.tistory.com/41

target sequence의 cafe라는 단어는 src sequence에서 '카페'와 가장 강한 Attention 상관관계가 있다고 볼 수 있다.

 

 

그렇다면, Attention Score은 어떻게 구하는 걸까?

How to get an output?

전체 flow / 출처 https://codingopera.tistory.com/41

 

 

1) Attention score 구하기

먼저 인코더의 hidden states와 decoder의 hidden state를 dot product 해줌으로써 Attention score를 구할 수 있다. 

그러면 셀의 개수만큼 상수가 출력된다! [score1, score2, score3, score4]

 

2) Attention Value 구하기

Attention score를 softmax 활성함수에 대입함으로써 0-1 사이의 값으로 정규화해준다.

그리고, Encoder의 hidden states를 곱하여 합하면 Attention Value를 얻을 수 있다. 

 

y = f(x)  + x 같은 느낌인데, 이렇게 하면 학습 효과가 더 좋아진다고 한다.

 

 

 

3) Concatenate

그리고 Decoder의 hidden state를 Attention value 아래 쌓아주고 tanh, softmax() 함수를 이용해 학습을 거치면 y라는 출력값을 얻게 된다.

 

정리하면서 깨달았는데, 뒤에 transformer 인코더를 보면, 이 과정들이 각 레이어에 녹아들어있다 .. 소오름

 

 

여기서 한 단계 더 발전한 Self-Attention mechnism에 대해서는 다음 글에서 알아보도록 하겠다!

https://mgyxxmi0219.tistory.com/112

 

Transformer(2) - Self-Attention and Multi-head Attention Mechanism

https://mgyxxmi0219.tistory.com/111 Vision Transformer(Vit) & Vision-and-Language Transformer(Vilt)(1) - Attention mechanismTransformer 모델은 Translate 문제에서 RNN/CNN을 쓰지 않고 Attention과 Fully Connected Layer와 같은 기본 연산들

mgyxxmi0219.tistory.com