-
[논문리뷰] Attention is all you needData miner/Information Retrieval 2019. 7. 15. 15:18728x90
- 본 논문에서 Transformer라 불리는 Architecture의 큰 구조는 RNN와 같이 encoder - decoder로 이뤄져 있다. 모델의 가장 큰 특징으로, 순차적으로 이전 정보에 의존하는 구조는 아니라는 점을 꼽을 수 있다(Not rely on recurrent connections). 대신에, 이러한 역할을 attention modules가 맡게 된다. 아래의 그림에서 왼쪽이 encoder, 오른쪽이 decoder이다.
- 한편으로, BERT의 경우에는 Transformer의 Encoder부분만 사용한다.
- Self-attention은 Encoder와 Decoder의 각 Layer의 입력 정보 자체를 함축하기 위해서 사용된다. 기존의 attention 혹은 align (transformer의 모태가된 논문에서 attention과 동일한 역할을 하는 부분에 대한 이름)이 encoder와 decoder의 사이에서 정보를 풀어나가는데 있어서 사용되었다면, self-attention은 그 자체 레이어의 정보도 포함하고자 고안한 방법이다. 따라서, 이 layer에 들어가는 key,value,query의 값은 이 전 layer단에서 나온 결과물이 들어가게 된다. 궁극적으로 이러한 과정을 통해서 맥락에 따라서 다르게 해석될 수 있는 it과 같은 지시대명사가 학습이 된다.
- 특히, Self-attention부분은 추후 cross attention이라는 개념과 작동원리가 동일하나, 본 논문에서는 cross attention의 개념이라고 언급되어 있지 않았을 뿐이다. cross attention은 트렌스포머 구조에서 두 개의 다른 임베딩 시퀀스를 섞는 것을 말한다. 이 때, 두 개의 시퀀스는 반드시 동일한 차원을 가져야 한다. 트렌스포머에서는 input 문장이 Query/Key/Value와 결합하여 다르게 표현되지만, cross attention에서는 다른 모달리티(텍스트/이미지/사운드)가 두개의 시퀀스로 사용될 수 있다. 이 때 하나의 시퀀스는 query input으로, 다른 시퀀스는 key, value input으로 사용된다. query input은 아웃풋 길이를 결정한다.
- Decoder 단에서의 self-attention에서 'Masked' Multi-head attention인 이유는, 현재 t번째 시점에서의 output을 생성하는데 있어서 attention을 얻을 경우, t번째의 이후의 값들을 참고하지 않겠다는 뜻이다. 아래의 그림을 보면, 오른쪽 previous token의 정보만을 가지고 다음 시점의 token을 예측해야 한다. Transformer에서 input sequence와 output sequence 정보를 한꺼번에 학습하기 때문에, 뒤 부분의 정보를 지워주는 masked의 과정이 필요하다.
- Encoder와 Decoder의 block을 N개 쌓아, input에 있는 문장의 관계를 보다 효율적으로 반영하게 한다. 그리고 이 안에 있는 weight는 서로 다른 block끼리 다른 값을 가지게 된다. N개의 블록들은 문장의 서로 다른 문맥적인 의미를 반영하는데 기여한다.
- Encoder-Decoder의 attention layer. 이전 t-1 state의 output이 현재의 query에 들어가게 된다. 이 query는 decoder의 masked self-attention을 거친 query다. key-value값들은 encoder단의 값이 넘어오게 된다. 이 query는 encoder에서 넘어온 key-value의 정보를 받아, query와 유사한 정보에 weight를 강한 값을 주어 이를 반영하여 다음단의 output을 예측하는데 사용하게 된다.
- Input embedding. token embedding과 position embedding을 하게 된다. token embedding부분은 RNN의 방식과 크게 다르지 않다. token화를 한다음에, 이에 대응하는 유일한 숫자들로 바꿔주는 작업을 거친다. 이 후에, 각각의 단어에 해당하는 k개의 차원으로 embedding된 벡터를 얻게 된다. 이러한 벡터들은 모델의 파라미터와 같이 학습을 통해서 최적의 값을 찾아가게 된다. 이러한 각각의 단어들의 vector들을 쌓게 되면 (input_length) * (emb_dim)의 메트릭스가 형성된다. 이후 Positional embedding의 과정을 거치게 된다. 이는 RNN의 time step과 비슷한 정보, sequence의 순서 정보 혹은 위치 정보를 보존하기 위함이다. attention encoder의 output은 input의 순서와 무관하기 때문에, 이 정보를 보관하려는 별도의 장치가 필요하다. positional embedding은 input embedding vector에 추가적으로 넣어지게 되는 정보다
'Data miner > Information Retrieval' 카테고리의 다른 글
#딥러닝 관련 논문 읽기 팁 #End-to-End Learning (0) 2019.11.07 서치 엔진에서의 사용자의 의도에 따른 3 가지 Query 유형 (0) 2019.11.06 #Information_retrieval #Inverted_Index (0) 2019.10.22 #FastText #초기_Pre-trained_model #논문리뷰 (0) 2019.10.22 #구글의 ADwords의 작동원리 #Second_price_auction (0) 2019.10.08