-
어텐션 매커니즘(Attention Mechanism)개인 스터디/NLP 2020. 7. 20. 15:33
"운동장에 공이 있다"는 말을 들을 때, 모든 말이 똑같이 중요해 보이지는 않을 것입니다.
"운동장", "공이"는 다른 단어들보다 더 중요해 보입니다.
실제로 많은 문장에서 단어들이 갖는 중요도는 서로 많이 다릅니다.
더욱이 번역 과제에서, 번역된 문장의 각 부분은 번역 전 문장의 서로 다른 단어들에 의존합니다.
그런데 Seq2Seq 모델에서는 이런 특성을 반영하지 않고, 모든 단어를 똑같이 취급해 문맥 벡터(context vector)를 생성합니다.
어탠션 매커니즘에서는 디코더 네트워크가 각 순간에 전체 입력 문장을 확인하도록 하여,
각 순간마다 입력 단어들의 중요도를 산정합니다.
1. Bahdanau et al. NMT model
Seq2Seq 모델은 입력 시퀀스를 인코딩하는 인코더와, 문맥 벡터를 통해 문장을 번역하는 디코더로 이루어져 있습니다.
$x_1, \ldots, x_n$을 입력 시퀀스, $y_1, \ldots, y_n$을 원하는 출력 시퀀스라고 합시다.
Encoder:
$(h_1, \ldots, h_n)$을 입력 시퀀스를 표현하는 hidden vector라고 합시다.
예컨대 bi-LSTM의 결과값으로 주어진 문맥 벡터라고 할 수 있습니다..
Decoder:
계산하고자 하는 값은 디코의 $i$번째 hidden state인 $s_i$ 입니다.
이 값은 다음과 같이 재귀적으로 계산됩니다.
$s_i = f(s_{i-1}, y_{i-1}, c_i)$
$s_{i-1}$: $i-1$번째 hidden state
$y_{i-1}$: $i-1$번째로 생성된 출력 단어
$c_i$: decoder의 time step $i$와 연관된 문맥 벡터
문맥 벡터 $c_i$는 $i$번째 디코딩 time step과 관련된 정보를 담고 있습니다.
Seq2Seq에서는 단 하나의 문맥 벡터를 모든 time step에서 사용했던 것과 대조됩니다.
각 $c_i$를 얻는 방법에 대해 살펴봅시다.
각 hidden vector $h_j$에 대해서 다음 점수를 계산합니다.
다음 식은 alignment model이라고 불리며, $j$번째 입력값이 $i$번째 출력값과 어느 정도 관계가 있는지를 바로 전 시점에서의 hidden state 값 ($s_{i-1}$)을 통해 계산합니다.
$e_{i, j} = a(s_{i-1}, h_j)$
$a$: 실수상의 함수, ex) 레이어 하나를 가지는 fully connected neural network
모든 $h_j$에 대해 계산을 끝낸 후 scalar 값인 $e_{i, 1}, \ldots, e_{i, n}$을 얻습니다.
softmax 레이어를 통해 이 값들을 정규화해주어, $\alpha_i = (\alpha_{i, 1}, \ldots, \alpha_{i, n})$를 계산합니다.
이 때 각 $\alpha_i$는 어텐션 벡터(attention vector)라고 불립니다.
$\alpha_{i, j} = \frac{\exp(e_{i, j})}{\sum_{k=1}^n \exp(e_{i, k})}$
마지막으로 $\alpha_i$를 통해 hidden vector의 가중합을 구합니다.
$c_i = \sum_{j=1}^n \alpha_{i, j}h_j$
이런 절차를 거침으로써, 매 time step마다 연관된 문맥 정보에 가중치를 주어 출력 단어 생성에 반영할 수 있습니다.
이 과정을 그림으로 나타내면 그림1과 같습니다.
2. Connection with translation alignment
어텐션 기반의 모델은 각 출력값을 계산할 때 입력값의 각 부분들에 가중치를 주는 방식으로 학습합니다.
이를 번역의 관점으로 보면, 어텐션을 어순을 정렬하는 과정이라고 생각할 수 있습니다.
Bahdanau는 $i$번째 decoding 스텝의 $\alpha_{ij}$는 입력 문장들 중 번역된 문장의 $i$번째 단어에 대응하는 단어를 찾아낸다고 말합니다.
이에 기반해서, 어텐션 스코어를 사용해 alignment table을 만들 수 있습니다.
alignment table은 학습된 기계 번역 모델을 사용해 입력 문장의 어떤 단어가 출력 문장의 어떤 단어에 대응하는지를 보여줍니다.
reference:
[1] CS224N: https://web.stanford.edu/class/cs224n/readings/cs224n-2019-notes06-NMT_seq2seq_attention.pdf
[2] Neural Machine Translation By Jointly Learning to Align and Translate, D. Bahdanau et al.
'개인 스터디 > NLP' 카테고리의 다른 글
시퀀스 투 시퀀스(Seq2Seq) 모델 (0) 2020.07.17 단어 임베딩 -2: Iteration based methods (Word2Vec, FastText) (0) 2020.07.01 단어 임베딩 -1: 원핫 임베딩, SVD기반 임베딩 (1) 2020.06.30