본문 바로가기
인공지능/NLP

Attention과 장기 의존성

by EXUPERY 2021. 4. 15.
반응형

Seq2Seq(RNN과 장기의존성)

https://lilianweng.github.io/lil-log/2018/06/24/attention-attention.html

RNN을 기반으로한 seq2seq 모델은 encoder에서 input을 받아 고정된 크기의 벡터인 Context Vector를 만들어 냅니다. decoder는 이를 통해서 output을 만들었습니다. 순차적으로 출력하게됩니다. 하지만 크게 두 가지 문제가 있었습니다. Context Vector에 한 문장을 벡터로 표현하다보니 정보의 손실이 많이 발생합니다. 둘째로는 기울기의 소실 문제가 존재합니다. 순차적으로 입력되는 RNN 특성상 decoder로 들어가는 Context Vector는 시퀀스 뒤쪽의 영향을 더 많이 받을 수 밖에 없습니다. 특히 문장이 길어지면 시퀀스 앞쪽에 있는 단어의 영향이 거의 사라집니다. 즉, 문장이 길면 품질이 매우 떨어집니다. 이렇게 이전의 정보가 마지막까지 전달되지 못하는 것을 장기 의존성 문제라고 합니다. 이를 보정하기 위해서 Attention이라는 개념이 등장했습니다.

 

 

Attention

RNN구조가 보여주고 있는 문제는 Context Vector로 디코더에 넘기는 것이었기 때문에 병목현상이 발생하는 것이었습니다. Attention은 모든 토큰이 기억 될 수 있도록 만들어줍니다. 아래는 기본적인 Attention이 적용된 Seq2Seq입니다.

원래였다면 히든레이어(h3)이 Context Vector가 되어 디코딩 되었을 텐데, 여기서 Attention Layer를 하나 만들고, softmax를 사용해서 가중치를 줍니다. 위에서는 "I love you"가 들어와서 문장이 시작되어야 하므로 <start>라는 값을 반환하였습니다. 

다음 스텝에서는 이 start값을 레이어에 넣어줍니다. 마찬가지로 h1,h2,h3도 넣어줍니다. 다시말해 이전의 정보가 소실되는 위험에서 비로소 벗어날 수 있는 것입니다. 이러한 절차를 반복하여 <end>까지 출력하면 원하는 결과값을 얻을 수 있습니다.

 

 

반응형

댓글