예시로 이해하는 attention의 기본 아이디어
encoder의 기본 진행은 다음과 같다.
위에서 나온 4개의 encoder의 hidden vector $h_{1}^{(e)}$, $h_{2}^{(e)}$, $h_{3}^{(e)}$, $h_{4}^{(e)}$와 첫번째 step의 decoder output hidden vector $h_{1}^{(d)}$가 있는데
원래라면 첫번째 단어 생성을 위해서 $h_{1}^{(d)}$가 output layer로 들어가서 예측을 수행했을 것
그러나 attention은 첫번째 단어 생성을 위해 어떤 단어에 더욱 집중해야하는지 알기 위해 $h_{1}^{(d)}$와 $h_{1}^{(e)}$ ,$h_{2}^{(e)}$ ,$h_{3}^{(e)}$ ,$h_{4}^{(e)}$과의 내적 연산을 수행하여 각 vector에 대하여 score를 계산했다.
계산된 score를 softmax를 취하여 확률벡터를 구했다.
어느정도의 가중치로 집중해야하는지 보여주는 attention distribution을 구한 것이다.
이 attention distribution의 결과 (0.85,0.08,0.04,0.03)과
encoder의 hidden state vector $h_{1}^{(e)}$, $h_{2}^{(e)}$, $h_{3}^{(e)}$, $h_{4}^{(e)}$ 가중합을 구하여
하나의 attention output vector인 context vector를 구했다.
여기서는 이제 예시로 $h_{1}^{(d)}$에 대응하는
$$0.85h_{1}^{(e)} + 0.08h_{2}^{(e)} + 0.04h_{3}^{(e)} + 0.03h_{4}^{(e)}$$이라는 context vector가 생성된것.
$h_{1}^{(d)}$에 의한 첫번째 단어를 예측할 때
input의 첫번째 단어에 대해서는 85%, 두번째 단어에 대해서는 8%, 세번째 단어에 대해서는 4%, 네번째 단어에 대해서는 3%정도 필요하다는 의미를 준다.
첫번째 단어는 어떻게 예측할까?
context vector $0.85h_{1}^{(e)} + 0.08h_{2}^{(e)} + 0.04h_{3}^{(e)} + 0.03h_{4}^{(e)}$와
첫번째 decoder의 hidden state vector인 $h_{1}^{(d)}$를 concatenation하여
decoder의 output layer에 집어넣어 선형변환을 수행한다.
그리고 (softmax를 취하든지) 가장 확률이 높은 단어를 예측하는 것이다.
그리고 이제 이렇게 생성한 첫번째 단어와 $h_{1}^{(d)}$를
다음 decoder의 input으로 주고 생성한 $h_{2}^{(d)}$에 대해
위와 같은 동일한 attention 과정을 수행하여 context vector를 얻고 concat후에
동일하게 output layer에 넣어 두번째 단어를 예측하는 과정을 반복하는 것이다.
다시 요약하자면 encoder의 모든 hidden state vector와 decoder의 해당 step의 hidden state vector를 attention module에 넣는다.
attention module에서는 encoder의 hidden vector와 decoder의 hidden vector와의 내적에 의한 score들이 encoder의 각 hidden vector에 대해 계산된다.
softmax를 취하여 가중치 벡터인 attention distribution을 구한다.
attention distribution의 원소에 대응하는 encoder의 hidden vector와의 가중합을 구한다. 이것을 context vector라 한다.
context vector와 decoder의 hidden vector의 concat으로 decoder의 output layer에 들어간다. 여기서 선형변환이 이루어진다.
softmax를 취하든지 하여 확률이 가장 높은 단어를 뽑아낸다.
이 단어는 다음 decoder의 input으로 들어간다. 추후 위 과정을 반복하여 <EOS>가 생성되면 모델이 종료된다.
decoder의 hidden vector가 기존과는 달리 2가지 역할로
단어를 예측하는 역할과 encoder의 hidden vector중 어떤 word의 hidden vector에 집중할지 계산하는 역할을 한다.
'딥러닝 > NLP' 카테고리의 다른 글
attention 구조는 NLP를 어떻게 바꾸었는가 (0) | 2022.04.15 |
---|---|
teacher forcing 기법 (0) | 2022.04.15 |
attention 구조는 왜 등장했을까? -attention의 근본 아이디어- (0) | 2022.04.09 |
seq2seq model이란? (0) | 2022.04.05 |
RNN을 이용한 글자 수준의 언어 모델(Character-level language model) (0) | 2022.04.01 |