cs BERT(Pre-training of Deep Bidirectional Transformers for Language Understanding) 정리 - 1 ( Transformer, Attention)
본문 바로가기
  • 매일 한걸음씩
  • 매일 한걸음씩
개발/NLP(Natural Language Processing)

BERT(Pre-training of Deep Bidirectional Transformers for Language Understanding) 정리 - 1 ( Transformer, Attention)

by 시몬쯔 2020. 10. 24.
728x90
반응형

오늘은 만 번넘게 인용된 NLP분야의 BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding 모델에 대해 정리해보려고 한다.

 

먼저 BERT가 트랜스포머 Transformer 네트워크를 기반으로 한만큼 트랜스포머 네트워크에 대해 알아보고 들어가자.

 


Transformer Network란?

https://papers.nips.cc/paper/7181-attention-is-all-you-need.pdf 구글이 발표한 이 논문에서 등장한 네트워크로 제목에서 유추할 듯이 Attention어텐션만으로 구현하였다.

 

 

트랜스포머 모델 아키텍처 (Vaswani et al..2017)

여기서 attetion 또한 짚고 넘어가보자.


Attention 메커니즘이란? 참고

NLP 모델 중 하나인 seq2 seq 모델은 인코더에서 입력 텍스트를 콘텍스트 벡터라는(이미지에서 feature vector가 나오는 것과 유사함) 고정된 크기의 벡터를 뽑아내고, 디코더에서 이 컨텍스트 벡터로부터 텍스트를 뽑아낸다.(번역 시 한국어를 인풋으로 넣으면 인코더에서 벡터화하고 디코더에서 영어 텍스트로 내보낸다고 생각하면 될 듯)

하지만, 입력 텍스트가 길어질 때, RNN의 고질적인 문제인 Gradient Vanishing(그래디언트가 0에 가까워져 업데이트가 거의 일어나지 않는 현상)이 발생하고 긴 텍스트를 고정된 크기의 벡터로 보내다 보니 정보 손실이 일어나게 된다.

 

어텐션은 이를 보정해주기 위해 등장하였다. 

 

1. 

기본 아이디어디코더에서 매 시점마다 Input 텍스트 전체를 다시 참고한다는 것이다. 참고 시 문장 전체를 동일하게 참고하는 것이 아니라, 현시점 예측해야 하는 단어와 연관 있는 단어를 더 어텐션을 기울여 참고한다.

 

2.

함수는 다음과 같다.

주어진 쿼리(Q)에 대해 모든 키(K)와의 유사도를 각각 구하여 이를 각각의 값(V)에 반영해준다. 이렇게 유사도를 반영한 값(V)을 모두 더해서 리턴 해낸 값을 어텐션 값(Attention Value)라고 한다.

 

3. Dot-Product Attention

어텐션 중 가장 수식적으로 이해가 쉬운 Dot-Product Attention에 대해 알아보자.

 

왼쪽 주황색이 인코더이고 오른쪽 연두색이 디코더이다.

현재 디코더의 세 번째 LSTM셀에서 출력할 단어를 예측할 때이다. 첫번째, 두번째 LSTM셀은 이미 어텐션을 통해 je, suis를 예측하는 과정을 거쳤다고 가정할 때, 세번째 LSTM셀은 위에서 언급한 것과 같이 인코더의 모든 입력 단어를 다시 한번 참고하고자 한다. 

위의 softmax함수 부분을 보면 바의 높이가 다른 것을 알 수 있는데, 이는 입력 텍스트인 I, am, a, student가 각각 출력 단어 예측 시 얼마나 도움이 되는 지를 수치화한 것이다. 모든 입력 텍스트를 동등하게 참고하는 것이 아니라 현재 예측하고자 하는 단어와 유사한 입력 단어를 더 많이 참고한다고 했으므로 소프트맥스의 바가 높은 "am"과 "student"를 "I"와 "a"보다 상대적으로 더 참조할 것이다. 소프트맥스 위에 있는 초록색 삼각형이 이 수치 정보를 뜻한다. 

이를 통해, 디코더는 출력 단어를 더 정확하게 예측하게 된다.

 

 

4. 어텐션 메커니즘

 

이제 본격적으로 어텐션 메커니즘에 대해 알아보자.

 

1) 어텐션 스코어 구하기

 

 

인코더의 시점을 각각 1,2,... N이라고 했을 때(위의 그림에서는 N=4), 인코더의 히든 state를 각각 h1,... hN이라 한다.

또한, 디코더의 현시점 t에서의 디코더의 히든 state는 s_t라 하자. (+ 인코더의 히든 state와 디코더의 히든 state 차원이 같다고 가정.)

위에서 언급한 듯이, 시점 t에서 출력 단어를 예측하기 위해서는 직전 시점인 t-1에서의 히든 state와 t-1에서 나온 출력 단어가 필요하다. 하지만, 어텐션 메커니즘에서는 여기서 어텐션 값이라는 새로운 값을 더 필요로 한다. 이 값을 a_t라고 정의해보자. 이 어텐션 값을 어떻게 구할까? 이 어텐션 값을 구하기 위해서는 어텐션 스코어를 먼저 구해야 한다. 어텐션 스코어란 현시점에서 단어를 예측하기 위해 인코더의 모든 각각의 히든 state가 디코더의 현 시점 히든 state와 얼마나 유사한지를 판단하는 스코어 값이다. 보통 벡터 간의 유사도를 판단하기 위해서는 벡터의 내적, 코사인 값, 유클리디안 거리등을 사용하는데 여기서는 내적을 사용한다.

예를 들어 디코더의 t시점에서의 히든 state인 s_t와 인코더의 i번째 히든 state의 어텐션 스코어 계산방법은 다음과 같다.

 

 

식으로 정리하자면 다음과 같다.

특정 시점 i에서의 히든 state이 h_i였으니 모든 인코더의 히든 state와 내적을 구해보면, 

 

가 된다.

 

후 이제 겨우 첫 단계를 마쳤다. 다음 포스팅에서 어텐션에 대해 더 다루고 트랜스포머로 넘어가도록 하겠다.

728x90
반응형

댓글