NLP cont.

Andrew·2021년 2월 17일
0
post-custom-banner

[Contents]

1) Sequence to Sequence with Attention

Sequence to Sequence with Attention

  • Sequence를 Encoding와 Decoding할 수 있는 sequence to sequence에 대해 알아본다
  • Sequence to sequence는 encoder와 decoder로 이루어져 있는 framework으로 대표적인 자연어 처리 architecture 중 하나이다
  • Encoder와 Decoder로는 다양한 알고리즘이 사용될 수 있지만 여기서는 RNN과 Attention을 결합한 sequence to sequence 모델을 학습한다
  • RNN 모델이 갖고 있는 단점을 보완하고자 Attention(논문에서는 alignment로 표현되고 있습니다) 기법이 처음 등장
  • 다양한 Attention의 종류와 이를 활용한 translation task에 대해서 알아본다

Further Readings

Seq2Seq Model

  • It takes a sequence of words as input and gives a sequence of words as output

    • Many-to-many
      - ex) machine translation
  • It composed of an encoder and a decoder

  • encoder의 마지막 단어까지 읽어들인 후 나오는 hidden state vector 즉, encoder의 마지막 time step의 hidden state vector는 decoder RNN의 h0h_0 즉, 첫번째 time step의 입력으로 주어지는 그 이전 time step의 hidden state vector의 역할을 한다
  • 단어별로 문장을 생성하는 task에서 첫번째 단어에 특수 문자 SOS 토큰을 넣어준다
    • 이러한 특수한 단어를 vocab 상에 정의해두고 이를 가장 처음에 decoder time step에 넣어주므로써 실질적으로 생성되는 첫번째 단어부터 예측을 수행한다
  • 문장이 끝나는 시점에는 다른 특수문자인 EOS 토큰을 넣어준다
    • 이 토큰이 나올때까지 decoder RNN을 구동하고
    • 이 토큰이 생성되면 그 시점까지가 최종적인 출력으로써 더이상 단어를 생성하지 않는다

Seq2Seq Model with Attention

  • Attention provides a solution to the bottleneck problem
  • Core idea : At each time step of the decoder, focus on a particular part of the source sequence
  • Attention 모듈의 motivation
    • LSTM, GRU 로 long term dependency 문제를 해결했다 해도 문장이 굉장히 길어지면 앞에 나온 단어에 대한 정보는 LSTM, GRU 구조를 지나가면서 정보가 변질 혹은 소실될수 있다
    • Attention을 사용하게 되면 decoder에서는 encoder의 마지막 time step에서 나온 hidden state vector 에만 의존하는 것이 아니라 encoder의 입력문장에서 주어졌던 각각의 단어들을 순차적으로 encoding하는 과정에서 나온 encoder hidden state vector hteh^{e}_t 들을 전체적으로 사용한다
      • decoder에서는 각 time step에서 단어를 생성할때 그 time step에 맞는 즉, 필요한 encoder hidden state vector를 선별적으로 가져가서 예측에서 도움을 주는 형태로 활용한다

Attention 모듈의 동작 과정

  • use the attention distribution to take a weighted sum of the encoder hidden states
  • the attention output mostly contains information the hidden states that received high attention
  • 동작 과정
    • decoder의 첫번째 입력으로 h0h_0와 SOS 토큰의 word embedding 벡터가 주어지고 이 둘을 입력으로 받아서 decoder RNN이 decoder hidden state vector즉 h1dh^{d}_1 가 생성된다
    • 계산된 decoder의 첫번째 time step의 hidden state vector를 가지고 다음 단어의 예측을 수행하는데 사용할 뿐만 아니라 이 벡터를 통해 encoder에서 주어진 hidden state vectors 중 현재 어떤 hidden state vector들을 필요로 하는지를 선정하는 역할을 수행한다
      • decoder hidden state vector가 encoder hidden state vector 각각과 내적의 연산을 수행하게 된다
      • 아래 그림의 예시로 내적값이 각각 7, 1, -1, -2 로 계산이 됬다면 decoder hidden state vector와 각 encoder hidden state vector 간의 내적에 기반한 유사도라고 생각할수 있다
      • 이 값들을 softmax를 통과시켜서 즉, 이 값들이 각각의 encoder hidden state의 대응하는 확률값을 계산해줄수 있는 입력벡터 혹은 logit 벡터로 생각을 하면
      • 그 확률값이 가령 0.85, 0.08, 0.04, 0.03 로 계산이 되면 이 값들은 encoder hidden state vector의 부여되는 가중치로써 사용되고
      • encoder hidden state vector에 대해서 가중치세트를 적용해서 가중 평균을 구할수 있고 가중평균으로써 나오는 하나의 encoding vector를 구할수 있다
      • 즉, 이것이 바로 decoder hidden state vector를 사용해서 그 time step에 필요로 하는 정보는 첫번째 time step encoding hidden state vector를 85% 필요로하고, h2eh^{e}_2 는 8%, h3eh^{e}_3 는 4%, h4eh^{e}_4 는 3% 의 정보를 필요로한다고 의미한다
      • 그러면 이를 통해 나오는 Attention 모듈의 output이라 볼수 있는 encoder hidden state vector의 가중평균된 벡터는 context vector라고도 부른다
      • 정의 하자면 Attention모듈의 입력으로 decoder hidden state vector 하나와 encoder hidden state vectors 세트이고 출력으로 나오는 것은 encoder hidden state vector의 가중평균된 vector 한개가 output 으로 나온다

  • 이렇게 만들어진 context vector(attention 모듈의 output vector)는 앞서 계산한 decoder hidden state vector와 concate이 되어서 output layer의 입력으로 들어가고
  • 그로부터 다음에 나오는 단어를 예측하게 된다
  • 결국 output layer는 현재 decoder hidden state vector와 선별적으로 정보를 뽑아온 가중평균된 context vector와 함께 사용되어서 decoder의 특정 time step의 예측값을 반환한다

  • 첫번째 단어를 예측한 이후 두 번째 time step의 입력은 전 time step의 예측단어의 word embedding과 전 time step의 decoder hidden state vector이다
  • 이를 통해 두 번째 decoder hidden state vector가 생성되고 동일하게 이를 이용해서 encoder hidden state vectors들과 각각 내적을 하여Attention output 을 생성한다
    • 이를 통해 나오는 유사도 값은 앞선 time step과는 다르게 나올 것이다
  • 합이 1인 형태의 상대적인 가중치로 나오는 softmax layer의 ouput 을 attention vector라 부른다
    • Attention distribution 부분
  • EOS 토큰이 나올때 까지 위과정을 수행하게 된다
  • 이런 방식으로 decoder에서 각 time step별로 단어를 순차적으로 예측하는 과정에서의 decoder hidden state vector의 역할 =
    • decoder hidden state vector가 해당 time step에서의 output layer(다음에 등장해야할 단어) 에 들어가는 입력으로 사용됨과 동시에
    • encoder hidden state vector 들중 어떤 단어 벡터를 중점적으로 가져와야할 지 즉, attention 가중치를 결정해주는 역할 또한 해준다
    • 따라서 다음 단어를 예측하는데 있어서 encoder hidden state vector 들을 잘못 가져온 경우 attention 가중치를 적절히 원하는 정보가 선택될수 있도록 hidden state vector가 backpropagation에 의한 학습과정이 진행된다
    • 아래 그림에서 보라색 arrow = backpropagation, green arrow = 순전파
  • decoder에서 각 time step에서 실제로 다음에 등장하는 단어들은 각 time step마다 ground truth의 단어들을 입력으로 넣어준다
    • 학습 초반이나 decoder의 각 time step에서 예측을 잘못한 경우 즉, SOS 토큰 이후 첫번째 단어가 the 가 아니라 a 라는 단어로 예측을 하더라도 ground truth 에서의 단어를 입력으로 넣어준다
    • 하지만 모델을 다 학습한 후 실제 예측 혹은 inference에 이 모델을 사용하는 방식을 생각해보면 첫번째 단어에서 a라는 단어가 예측이 됬다하면 이 단어를 다음 time step에 입력으로 넣어준다
    • 학습때는 decoder 매 time step마다 예측되는 값이 그 다음 time step에 입력으로 쓰이지 않고 ground truth 를 입력으로 주게 되는 방식을 Teacher Forcing 이라 부른다
    • Teacher Forcing 을 쓴 경우에는 실제 ground truth를 넣는 것이기 때문에 학습이 더 빠르고 용이하게 진행되지만 실제로 이 모델을 사용할때는 예측값들이 실제와는 괴리감이 있는 경우가 있는데 이를 해결하기 위해 Teacher Forcing 을 사용하지 않는 방식과 사용하는 방식을 적절히 결합한 한습방식이 존재한다
      • 처음에는 teacher forcing만으로 모든 배치를 구성해서 학습을 진행하다가
      • 모델이 어느정도 예측이 정확해지면 학습 후반부에는 teacher force를 사용하지 않고 실제로 예측값을 다음 time step에 입력으로 주어서 학습한다

Different Attention Mechanisms

  • Luong attention : they get the decoder hidden state at time t1t_1 then calculate attention scores, and from that get the context vector which will be concatenated with hidden state of the decoder and then predict the output

    • score(ht,hˉs)={htThˉsdothtTWahˉsgeneralvaTtanh(Wa[ht;hˉs]),concatscore(h_t, \bar{h}_s) = \begin{cases}h^T_t \bar{h}_s & dot \\ h^T_tW_a \bar{h}_s & general \\ v^T_a tanh(W_a[h_t; \bar{h}_s]), & concat \end{cases}
    • hth_t = decoder 에서 주어지는 hidden state vector
    • hˉs\bar{h}_s = encoder에서 각 단어별의 hidden state vectors
    • score(ht,hˉs)score(h_t, \bar{h}_s) = 두 벡터 간의 유사도를 구하는 연산에는 dot(내적), general(generalized dot product), concat 이 3가지 연산이 있다
      • general
        • WaW_a 행렬 :
          • 모든 서로 다른 dimension 간의 곱해진 값들의 각각 부여되는 가중치를 가지는 행렬
          • attention 모듈에서의 유사도를 결정해주는 학습가능한 parameter
      • concat
        • decoder와 encoder의 hidden state vector가 있을때 둘의 내적 혹은 확장된 generalized dot product 과는 방식을 달리
        • 입력으로 주어지는 decoder hidden state vector 와 이와 유사도를 구해야하는 또 다른 벡터은 encoder hidden state vectors가 입력으로 주어졌을때 이 두 벡터간의 유사도를 구하는 그래서 최족적으로는 scalar값이 나오도록 하는 추가적인 학습 가능한 MLP(multi layer neural net)을 만든다
        • 두 벡터를 concat 해서 fully connected layer 하나를 두어서 유사도를 나타내는 최종 스칼라값을 반환
        • 혹은 layer를 더 쌓아서 hidden layer에서 non linear layer를 적용하고 마지막에 선형변환을 통해 유사돌르 나타내는 최종적인 스칼라값을 반환
        • concat = vaTtanh(Wa[ht;hˉs])v^T_a tanh(W_a[h_t; \bar{h}_s])
          • WaW_a = W1W_1
          • vaTv^{T}_a = W2W_2
        • vaTv^{T}_a 가 행렬이 아닌 벡터로 표현된 이유:
          • W2W_2와 내적되는 column vector의 결과값은 두 입력벡터(encoder와 decoder의 hidden state vector)의 유사도를 나타내는 scalar값을 반환해야하기 때문에 W2W_2는 row vector가 되야한다 따라서 vaTv^{T}_a 로 나타난다
    • dot(내적)연산을 채택했을때는 학습 가능한 parameter가 포함되 있지 않았다면 general, concat 연산을 사용할 경우 학습이 가능한 parameter 즉, 학습이 필요로 하는 그래서 최적화가 필요로하는 attention 모듈로 바뀐다
    • 그렇게 되면 backpropagation의 과정을 통해서 유사도를 구하는 선형변환 행렬들이 학습하게 된다
  • Bahdanau attention : At time t, we consider the hidden state of the decoder at time t-1. Then we calculate the alignment, context vectors as above. But then we concatenate this context with hidden state of the decoder at time t-1. So before the softmax, this concatenated vector goes inside a LSTM unit.

  • Luong has different types of alignments. Bahdanau has only a concat-score alignment model

Attention is Great

  • Attention significantly improves NMT(Neural Machine Translation (기계번역)) performance
    • It is useful to allow the decoder to focus on particular parts of the source
  • Attention solves the bottleneck problem (encoder의 마지막 hidden state vector 만을 사용해서 번역을 수행했어야 한다는 그래서 필연적으로 긴 문장에 대해서는 번역이 잘 이루어지기 어려운 문제를 해결)
    • Attention allows the decoder to look directly at source; bypass the bottleneck
  • Attention helps with vanishing gradient problem
    • Attention 을 사용하게 되면서 encoder의 모든 time step의 단어들과 연결되있는 path 가 존재하기 때문에 backpropagation 을 수행할때 원하는 encoder 특정 time step에 hidden state vector까지 gradient를 큰 변질없이 빠르게 전달해줄 수 있게 됬다
    • Provides a shortcut to far-away states
  • Attention provides some interpretability
    • By inspecting attention distribution, we can see what the decoder was focusing on
    • The network just learned alignment by itself
profile
아기개발자
post-custom-banner

0개의 댓글