• Seq2Seq 모델에는 여전히 부족한 점이 존재

    • 만약 입력 시퀀스 길이가 길어지면 한정된 길이의 context vector에 모든 입력 시퀀스의 정보를 담기가 상당히 어려워짐

      image.png

  • 이 문제를 해결하기 위해 등장한 것이 바로 attention 메커니즘

    • Attention 메커니즘은 디코더가 출력 시퀀스의 각 단어를 생성할 때, 입력 시퀀스의 어떤 부분이 중요한지를 “주목”하게 만드는 알고리즘

      image.png

  • 다음과 같이 입력 시퀀스가 들어온다고 가정하면, 입력 단어에 대한 각각의 은닉 상태(hidden state)들을 따로 저장

    image.png

  • 그런 다음 Seq2Seq 떄와 마찬가지로 context vector를 만들고 디코더에 넣어서 디코더의 은닉상태와 출력값을 다음과 같이 구할 수 있음

    image.png

  • Attention 메커니즘의 핵심은 현재 디코더 은닉상태와 가장 관련이 있는 것으로 추정되는 입력과의 관계성을 찾는 것

    • 여기서 두 은닉상태의 관계성을 결정 짓는 척도는 두 벡터간의 유사성

      image.png

    • 벡터간의 유사성을 계산하는 attention 점수 계산법은 크게 3가지 정도로 나누어 볼 수 있음

      image.png

  • 다음과 같이 출력 시퀀스의 hidden state와 각 입력 시퀀스 간에 attention score를 dot product를 사용해 계산

    image.png

  • 그 다음 각 attention score들의 softmax 값을 구함

    • Softmax를 하는 이유는, 각 attention score들을 확률분포로 바꾸어주고, 정규화해서 학습을 더 효과적으로 하기 위함

      image.png

  • 그 다음 각 attention score들과 기존의 입력 시퀀스의 hidden state들과 곱함

    • 이렇게 곱해주는 이유는, 각 attention score들은 간단한 스칼라값이기 때문에, 곱셈을 통해서 기존의 입력 시퀀스의 hidden state들에게 attention 가중치를 증폭해주는 효과

      image.png

  • Attention score가 가미된 입력 시퀀스의 hidden state들을, 다 더하여 새로운 context vector를 만들면 됨

    image.png

  • 새로운 context vector는 다음번 디코더 LSTM의 hidden state로 입력하고, 차례로 필요한 값들을 입력하면, 다음 번 hidden state를 구할 수 있고, 똑같은 방식으로 그 다음 턴의 attention context vector를 구할 수 있음

    • 물론 디코더의 출력이 EOS이기 때문에, Attention을 더 이상 계산할 필요는 없음

      image.png

      image.png