* 해당 글은 작성자의 복습을 위한 포스팅입니다
- Dzmitry Bahdanau et. al., ICLR, 2015
- 논문 링크: https://arxiv.org/pdf/1409.0473.pdf
- Github: https://github.com/graykode/nlp-tutorial (not official)
$\mathscr{A}$ Intro
본 논문은 Yoshua Bengio, 조경현 교수님이 참여하셨고, Attention 기법의 시초라고 볼 수 있다.
2013년 정도 부터 Neural Machine Traslation (NMT) 이 기계번역 (machine translation) 영역에서 좋은 효과를 보이고 있어 많이 연구되고, 사용되고 있다. NMT의 대표적인 모델로는 encoder-decoder가 많이 사용되었는데, 이는 기존 encoder-decoder 특징을 그대로 사용하고 있다. Encoder를 통해 문장을 fixed-length latent vector로 변환하고, latent vector는 decoder를 통해 우리가 원하는 결과(번역)를 얻을 수 있다.
하지만 이런 encoder-decoder의 가장 큰 문제는 어떠한 길이의 문장이라도 encoder를 통해 정해진 길이의 latent space로 encoding 되기 때문에, 이 과정에서 큰 손실이 일어날 수 있다. 입력 문장이 길면 길수록 더 큰 손실이 일어나며 성능도 빠르게 떨어지는 현상을 보인다.
이 논문에서 주장하는 가장 중요한 포인트는 기존 encoder-decoder와 달리 "모든 입력 문장을 fixed-length latent vector로 변환하지 않고, 입력 문장을 sequence of vectors로 encoding한 뒤, 선택적으로 latent vector의 subset을 골라 decoding을 진행한다" (align & translate)는 것이다. 이럴 경우, 문장 정보를 한 곳에 몰아 넣는 것을 피할 수 있고, 긴 문장을 입력 받아도 좋은 성능을 보일 수 있다.
본 논문의 기본이 되는 RNN Encoder-Decoder의 자세한 식은 논문을 참고하면 되겠다. 아래 PPT 슬라이드는 NMT Baseline을 정리해놓은 것이다.
$\mathscr{B}$ Method
본 논문은 기존 encoder-decoder를 발전시켜 새로운 architecture를 소개하고 있다. encoder와 decoder 각각 다른 기법을 적용했다.
1. Decoder: General Description
이해를 돕기위해 Figure 1에 나오는 notaion을 살펴보자.
$f, q$: non-linear functions
$h_t$: $t$ 시간의 Encoder의 hidden state
$s_t$: $t$ 시간의 Decoder의 hidden state
$y_t$: $t$ 시간의 예측 결과 (output)
$c$: context vector (latent)
기존 encoder-decoder에서 사용되었던 output $y$에 대한 확률(식 (1))과 달리, 새로운 식 (2)을 정의한다.
$$p(y_i|y_1,\ldots,y_{i-1},c)=g(y_{i_1},s_t,c)\tag{1}$$
$$p(y_i|y_1,\ldots,y_{i-1},x)=g(y_{i-1},s_i,c_i)\tag{2}$$
이 때, $s_i=f(s_{i-1}, y_{i-1}, c_i)$ 이다. 식 (2)을 풀어 설명하면, $i$ 시간에서 새로운 output $y_i$의 확률은 $i-1$ 시간의 output, $i$ 시간의 decoder의 hidden state 와 context vector에 의해 결정된다. 기존 encoder-decoder의 식 (1)과 다른 점은 output $y_i$가 context vector 전체 $(c)$가 아닌 $i$ 시간에 해당하는 context vector에 영향을 받는다는 것이다. $c_i$는 encoder hidden state $(h_1,\cdots,h_{T_x})$에 영향을 받는데, 이 때, $h_i$는 입력 문장에 대한 모든 정보를 포함하고 있지만 그 중에서도 $i$ 번째 단어에 더 강한 focus를 두고 있다. $i$ 시간의 context vector $c_i$는 식(3)과 같이 encoder hidden layer들의 weighted sum으로 구할 수 있다.
$$c_i=\sum_{j=1}^{T_x}\alpha_{ij}h_j\tag{3}$$
식 (3)에 사용된 $\alpha_{ij}$는 hidden state $h_j$에 해당하는 weight 이고 식 (4)와 같이 계산된다.
$$\alpha_{ij}=\frac{exp(e_{ij}}{\sum_{k=1}^{T_x}exp(e_{ik})}\tag{4}$$
마지막으로 식 (4)에 사용되는 $e$는 Alignment Score라 부르며 식 (5)로 표현한다.
$$e_{ij}=a(s_{i-1}, h_j)\tag{5}$$
이 alignment score는 현재 많이 사용되고 있는 attention score랑 같은 역할을 하는 값으로, $j$ 위치에 있는 input 값이 $i$ 위치에 있는 output과 얼마나 많은 연관이 있는지 수치적으로 나타내준다. 식 (5)에서, $a$는 feedforwad neural network로 구성된 alignment model이라 부르며 다른 구성 요소들과 동시에 학습된다.
위의 복잡한 내용을 간단히 정리하면 다음과 같다.
target word $y_i$를 구하기 위해 context vector 전체가 아닌, $y_i$와 가장 관련 깊은 context vector $c_i$를 사용한다. 이 때, decoder의 $i-1$ 위치의 hidden state 값과 encoder의 모든 위치의 hidden state 값들의 alignment score를 모두 계산하여 weighted sum을 해준다. 이럼으로써, decoder의 $i-1$ 위치의 hidden state 값이 encoder 전체 hidden state와 얼마나 많은 상관관계가 있는지 $c_i$로 표현할 수 있다. 즉, output의 $i-1$번 째 단어가 입력 문장의 각 단어와 얼마나 연관성이 있는지를 반영하여 $i$번 째 단어를 출력한다. (간단히 이해하고자 정리한 것인데, 여전히 복잡하다.)
2. Encoder: Bidirectional RNN for Annotating Sequences
기존 RNN은 앞 단어가 뒤 단어 (오른쪽 방향) 에만 영향을 끼치는 모델이다. 본 논문은 앞에서 뒤 뿐만 아니라, 뒤에서 앞으로도 반영하도록 하기 위해 bidirectional RNN (BiRNN)을 사용한다. BiRNN은 말 그대로 forward RNN과 backword RNN를 동시에 반영하는 구조다. forward RNN은 기존 RNN과 같이 입력 문장을 앞에서 뒤로, backword RNN은 이와 반대로 뒤에서 앞으로 읽으며 계산을 진행한다. 이 때, forward hidden states는 $(\overrightarrow{h_1}, \cdots, \overrightarrow{h_{T_x}})$ 로 표시하고, backward hidden states는 $(\overleftarrow{h_1}, \cdots, \overleftarrow{h_{T_x}})$로 표시한다. 만약 $x_j$번째 단어에 대한 forward, backward hidden states를 concatenating 한다면 $h_j=[\overrightarrow{h^\top_j} ; \overleftarrow{h^\top_j}]^\top$으로 표시한다. BiRNN을 사용하면, 입력 문장의 앞뒤 단어에 모두 영향을 받기 때문에 더 정확한 정보를 가지고 학습될 수 있다. Figure 2는 본 논문에서 제시한 모델을 나타낸다.
$\mathscr{C}$ Experments
주 실험 내용으로는 영어-프랑스 번역에 관한 데이터셋을 사용했으며, 비교할 벤치마크 모델로는 조경현 교수님의 RNN Encoder-Decoder 모델 (RNNencdec)을 사용했다. 본 논문에서 제시한 모델은 RNNsearch라는 이름을 사용한다. 실험 디테일은 아래와 같다.
- 1000 hidden units, SGD, 80 sentences as a minibatch
번역 성능 측정으로 BLEU score를 사용했고, 결과는 Table 1과 같다.
모델 뒤에 붙어있는 -30, -50의 의미는 학습시킬 때 사용한 문장의 최대 길이를 뜻한다. No UNK은 Unknown token을 사용하지 않을 때 score를 의미한다. 전체적으로 RNNsearch가 RNNencdec보다 높은 점수를 보이고 있으며, 본 논문에서는 Moses와 굉장히 비슷한 성능을 보인다는 것을 강조하고 있다. (Moses는 통계 기반의 번역 모델이며 phrase 단위의 번역 패턴을 학습한다.)
또한, RNNsearch는 RNNencdec이 가지고 있던 큰 단점인 fixed-length context vector 문제를 해결하고자 했고, 이는 Figure 3을 통해 확인할 수 있다.
Figure 3은 입력 문장에 길이에 따른 RNNsearch와 RNNencdec의 BLEU score를 나타낸다. 짧은 길이의 문장에서는 큰 성능차이가 없지만, 30 이상의 길이에서는 RNNencdec 성능이 대폭 감소하는 것을 확인할 수 있다. 그리고, RNNsearch 같은 경우 -30 보다 -50이 더 robust 한 것을 확인 할 수 있고, 학습시 사용한 문장의 길이보다 더 긴 문장을 사용하더라도 성능이 유지되는 것을 확인할 수 있다.
$\mathscr{D}$ Discussion
1. Alignment
본 논문에서는 Alignment(=Attention)이 어떻게 적용되고 있는지 Figure 4와 같이 시각화했다. 행과 열에 각각 영어와 프랑스 단어가 할당되어 있고, 각 단어들이 어느 단어와 얼마나 연관되어 있는지 나타낸다. 하얀색에 가까운 색일수록 더 많은 연관이 있다는 뜻이다. 예를 들어, 영어의 Economic이란 단어는 프랑스어의 zone과 economique라는 단어에 attention을 하고 있는데, 그중에 economique라는 단어에 더 큰 집중을 하고 있다.
또한, hard-alignment는 개념을 소개하며 관사와 명사같은 phrase도 모두 분리시켜 학습해야 더 좋은 결과를 얻을 수 있다고 한다.
2. Long Sentences
Figure 3에서 보인 학습 결과를 실제 번역을 통해 검증하고 있다. RNNsearch 가 RNNencdec보다 더 긴 문장에 robust하고 성능이 좋다는 것을 보여준다.
* 참고문헌