logo

논문 리뷰: 바다나우 어텐션 📂머신러닝

논문 리뷰: 바다나우 어텐션

개요 및 요약

  • 레퍼런스, 수식의 번호, 표기법 등은 가능한 한 논문을 그대로 따른다.

논문 『Neural Machine Translation by Jointly Learning to Align and Translate1는 ICLR 2015에서 발표되었으며, 저자는 Dzmitry Bahdanau, KyungHyun Cho 그리고 Yoshua Bengio이다. 트랜스포머 등에 쓰이는 현대적인 🔒(26/08/07)어텐션 아이디어를 처음 도입한 논문으로 꼽히며, 여기서 제안된 형태의 어텐션은 제1저자의 이름을 따 흔히 바다나우 어텐션Bahdanau attention 혹은 additive attention이라 불린다.

당시 신경망 기계번역neural machine translation의 주류였던 인코더-디코더 구조, 즉 seq2seq 계열 모델은 원문 문장 전체를 고정된 차원컨텍스트 벡터 하나로 압축한 뒤 디코더가 그로부터 번역문을 생성한다. 저자들은 이 고정 길이 벡터가 성능 향상의 병목이라고 추측한다.

"In this paper, we conjecture that the use of a fixed-length vector is a bottleneck in improving the performance of this basic encoder–decoder architecture"

논문에서는 이를 해결하기 위해 디코더가 번역문의 단어를 하나 생성할 때마다 원문에서 관련 있는 부분을 스스로 탐색할 수 있는 방법을 제안한다. 원문의 $j$번째 단어 주변을 요약한 벡터를 $h_{j}$라 할 때, $i$번째 목표 단어를 위한 컨텍스트 벡터 $c_{i}$는 하나로 고정되지 않고 매 시점 다음과 같이 가중합으로 새로 계산된다.

$$ c_{i} = \sum_{j=1}^{T_{x}} \alpha_{ij} h_{j}, \qquad \alpha_{ij} = \frac{\exp (e_{ij})}{\sum_{k=1}^{T_{x}} \exp (e_{ik})}, \qquad e_{ij} = a (s_{i-1}, h_{j}) $$

가중치 $\alpha_{ij}$를 계산하는 정렬 모델 $a$는 작은 신경망으로, 번역 모델의 나머지 부분과 함께 학습된다. 정렬align과 번역translate을 동시에 학습한다는 제목이 여기서 나왔다. 이 확장만으로 영어-프랑스어 번역에서 기존 인코더-디코더를 크게 앞서고, 당시 최고 수준이었던 구 기반phrase-based 통계 번역 시스템에 필적하는 성능을 얻었다고 보고한다.

최근의 표기법

최근 사용하는 어텐션의 표기법으로 해당 논문을 요약하면 다음과 같다. 🔒(26/08/07)어텐션이란 쿼리 행렬 $\mathbf{Q}$, 키 행렬 $\mathbf{K}$, 밸류 행렬 $\mathbf{V}$와 스코어 함수 $f$에 대해서 다음과 같이 정의되는 연산이다.

$$ \operatorname{Attention} (\mathbf{Q}, \mathbf{K}, \mathbf{V}) := \mathbf{V} \operatorname{Softmax} \left( f (\mathbf{Q}, \mathbf{K}) \right) $$

바다나우 어텐션에서, 디코더가 $i$번째 단어를 생성하는 시점의 쿼리는 디코더의 직전 은닉상태 $s_{i-1}$ 하나뿐이다. 키와 밸류는 서로 구분되지 않으며, 둘 다 인코더의 은닉상태(어노테이션)들이다.

$$ \mathbf{q}_{i} = s_{i-1}, \qquad \mathbf{K} = \mathbf{V} = \begin{bmatrix} h_{1} & h_{2} & \cdots & h_{T_{x}} \end{bmatrix} $$

스코어 함수 $f$는 쿼리와 키 각각을 선형변환해서 더한 뒤 $\operatorname{Tanh}$를 취하는 작은 신경망(=정렬 모델 $a$)이다.

$$ \left[ f (\mathbf{q}_{i}, \mathbf{K}) \right]_{j} = a (s_{i-1}, h_{j}) = \mathbf{w}_{a}^{\mathsf{T}} \operatorname{Tanh} \left( W_{a} s_{i-1} + U_{a} h_{j} \right) $$

여기서 $W_{a}, U_{a}, \mathbf{w}_{a}$는 정렬 모델의 학습 파라미터이며, 스코어 벡터 $\mathbf{w}_{a}$는 밸류 $\mathbf{v}_{j}$와 무관한 별개의 벡터다. $\operatorname{Tanh}$는 인자로 들어온 벡터의 각 성분에 하이퍼볼릭 탄젠트 $\tanh$를 취하는 함수다(정렬 모델 $a$의 자세한 정의는 논문 표기를 그대로 따르는 §A.1.2에 있다).

이 시점의 어텐션 출력이 곧 컨텍스트 벡터 $c_{i}$다.

$$ \mathbf{c}_{i} = \operatorname{Attention} (\mathbf{q}_{i}, \mathbf{K}, \mathbf{V}) = \mathbf{V} \operatorname{Softmax} \left( f (\mathbf{q}_{i}, \mathbf{K}) \right) = \sum_{j=1}^{T_{x}} \alpha_{ij} h_{j} $$

논문의 표기와 최근 표기의 대응은 다음과 같다.

논문의 표기어텐션의 표기의미
$s_{i-1}$쿼리 $\mathbf{q}_{i}$디코더의 직전 은닉상태
$h_{j}$키 $\mathbf{k}_{j}$이자 밸류 $\mathbf{v}_{j}$인코더의 $j$번째 어노테이션
$e_{ij} = a (s_{i-1}, h_{j})$스코어 $\left[ f (\mathbf{q}_{i}, \mathbf{K}) \right]_{j}$쿼리와 키의 적합도
$\alpha_{ij}$어텐션 가중치스코어의 소프트맥스
$c_{i}$어텐션의 출력밸류들의 가중평균, 컨텍스트 벡터

정리하면 바다나우 어텐션은 (i) 키와 밸류를 구분하지 않고 인코더의 어노테이션이 두 역할을 겸하며, (ii) 쿼리가 디코딩 스텝마다 하나씩 순차적으로 만들어지고, (iii) 스코어 함수가 덧셈인 어텐션이다.

1 Introduction

논문이 나왔을 당시 제안된 신경망 번역 모델 대부분은 인코더-디코더 계열, 즉 seq2seq 모델에 속한다. 저자들은 원문 문장의 모든 정보를 고정 길이 벡터 하나에 압축해야 한다는 점이 이 구조의 잠재적인 문제라고 지적한다. 이 문제를 해결하기 위해, 정렬과 번역을 동시에 학습하는 인코더-디코더의 확장을 도입한다. 여기서 말하는 정렬이란 번역될 단어가 원문의 어디를 참조하면 좋을지를 선택하는 함수를 말하며, 어텐션에서는 이것을 키벡터로 계산한다. 번역은 원문 언어의 단어와 번역문 언어의 단어를 이어주는 함수를 말하며, 어텐션에서는 이것을 밸류벡터로 계산한다. 제안된 모델은 번역문의 단어를 하나 생성할 때마다 원문에서 가장 관련 있는 정보가 몰려 있는 위치들의 집합을 (소프트-)탐색(soft-)search하고, 이 위치들에 연관된 컨텍스트 벡터와 그때까지 생성된 목표 단어들에 기반해서 다음 목표 단어를 예측한다.

기본 인코더-디코더와 구별되는 가장 중요한 특징은 입력 문장 전체를 하나의 고정 길이 벡터로 인코딩하려 들지 않는다는 점이다. 대신 입력 문장을 벡터들의 시퀀스로 인코딩해 두고, 번역을 디코딩하는 동안 그 벡터들의 부분집합을 적응적으로adaptively 선택한다. 실험에서는 정렬과 번역을 함께 학습하는 제안 방식이 기본 인코더-디코더를 유의미하게 능가하며, 그 개선은 긴 문장에서 더 뚜렷하지만 문장 길이에 상관없이 관찰된다고 보고한다.

2 Background: Neural Machine Translation

확률적 관점에서 번역은 주어진 원문 $\mathbf{x}$에 대한 조건부 확률 $p(\mathbf{y} | \mathbf{x})$를 최대화하는 번역문 $\mathbf{y}$를 찾는 것과 같다. 즉 다음의 최적화 문제를 푸는 것과 같다.

$$ \hat{\mathbf{y}} = \argmax\limits_{\mathbf{y}} p(\mathbf{y} | \mathbf{x}) $$

신경망 기반의 기계번역 방식은 흔히 인코더디코더의 두 부분으로 구성되어있다. 인코더는 입력된 원문 $\mathbf{x}$를 적절한 특징벡터 $\mathbf{c}$로 인코딩하고, 디코더는 이를 번역문 $\mathbf{y}$로 디코딩한다.

$$ \mathbf{x} \overset{\text{encoding}}{\mapsto} \mathbf{c} \overset{\text{decoding}}{\mapsto} \mathbf{y} $$

2.1 RNN Encoder–Decoder

Cho et al.(2014)2와 Sutskever et al.(2014)3이 제안한 프레임워크인 RNN 인코더-디코더(seq2seq 모델)를 간단히 정리한다. 인코더는 입력 문장, 즉 벡터들의 시퀀스 $\mathbf{x} = (x_{1}, \cdots, x_{T_{x}})$를 벡터 $c$로 인코딩한다. 가장 흔한 방식은 순환신경망(RNN)을 쓰는 것이다.

$$ h_{t} = f (x_{t}, h_{t-1}) \tag{1} $$

$$ c = q \left( \left\{ h_{1}, \cdots, h_{T_{x}} \right\} \right) $$

여기서 $h_{t} \in \mathbb{R}^{n}$은 시점 $t$의 인코더의 은닉상태hidden state이고, $c$는 은닉상태들의 시퀀스로부터 생성되는 벡터이며, $f$와 $q$는 어떤 비선형 함수다. 예컨대 Sutskever et al. (2014)은 $f$로 LSTM을 쓰고 $q \left( \left\{ h_{1}, \cdots, h_{T} \right\} \right) = h_{T}$로 두었다. 디코더는 $t^{\prime}$ 시점에서 컨텍스트 벡터 $c$와 이전에 예측한 모든 단어 $\left\{ y_{1}, \cdots, y_{t^{\prime}-1} \right\}$이 주어졌을 때 다음 단어 $y_{t^{\prime}}$을 예측하도록 학습된다. 즉 번역문 $\mathbf{y} = \left( y_{1}, \cdots, y_{T_{y}} \right)$에 대한 결합 확률을 순서 있는 조건부 확률들의 곱으로 분해한다.

$$ p(\mathbf{y}) = \prod_{t=1}^{T} p \left( y_{t} \mid \left\{ y_{1}, \cdots, y_{t-1} \right\}, c \right) \tag{2} $$

RNN을 쓰면 각 조건부 확률은 다음과 같이 어떤 비선형 함수 $g$로 모델링된다.

$$ p \left( y_{t} \mid \left\{ y_{1}, \cdots, y_{t-1} \right\}, c \right) = g (y_{t-1}, s_{t}, c) \tag{3} $$

여기서 $g$는 $y_{t}$의 확률을 출력하는 비선형 함수이고 $s_{t}$는 디코더의 은닉상태다. 기존의 방법들은 원문 $\mathbf{x}$가 고정된 차원의 컨텍스트 벡터 $c$로 인코딩되었고, 본 논문에서는 이것이 성능 향상을 막는 병목이라 주장한다.

3 Learning to Align and Translate

제안하는 새 아키텍처는 인코더로 양방향 RNN(§3.2)을, 디코더로는 번역을 디코딩하는 동안 원문을 탐색하는 것을 흉내 내는 구조(§3.1)를 쓴다.

3.1 Decoder: General Description

Figure 1

새 아키텍처에서는 $(2)$의 각 조건부 확률을 다음과 같이 정의한다.

$$ p(y_{i} \mid y_{1}, \dots, y_{i-1}, \mathbf{x}) = g (y_{i-1}, s_{i}, c_{i}) \tag{4} $$

$s_{i}$는 시점 $i$의 디코더의 은닉상태로, $s_{i} = f (s_{i-1}, y_{i-1}, c_{i})$로 계산된다. 기존 인코더-디코더에서는 모든 $y_{i}$ 예측 과정에서 고정된 컨텍스트 벡터 $c$를 사용하는 것과 달리 확률이 목표 단어 $y_{i}$마다 서로 다른 컨텍스트 벡터 $c_{i}$를 사용한다는 점에 주목하라.

컨텍스트 벡터 $c_{i}$는 인코더가 입력 문장을 인코딩한 어노테이션annotation들의 시퀀스 $(h_{1}, \cdots, h_{T_{x}})$에 의존한다. ($h_{j}$는 인코더인 BRNN의 두 은닉상태를 결합한 것이다) 각 어노테이션 $h_{j}$는 입력 시퀀스 전체의 정보를 담되 $j$번째 단어 주변에 강하게 집중attention한 벡터인데, 어떻게 계산되는지는 다음 절에서 다룬다. 컨텍스트 벡터는 어노테이션들의 선형결합으로 계산된다.

$$ c_{i} = \sum_{j=1}^{T_{x}} \alpha_{ij} h_{j} \tag{5} $$

각 어노테이션 $h_{j}$의 가중치 $\alpha_{ij}$는 소프트맥스 꼴로 계산된다.

$$ \alpha_{ij} = \frac{\exp (e_{ij})}{\sum_{k=1}^{T_{x}} \exp (e_{ik})} \tag{6} $$

여기서 $e_{ij} = a (s_{i-1}, h_{j})$는 위치 $j$ 주변의 입력과 위치 $i$의 출력이 얼마나 잘 맞는지를 점수화하는 정렬 모델alignment model이다. 점수는 $y_{i}$를 내놓기 직전의 디코더 은닉상태 $s_{i-1}$과 입력 문장의 $j$번째 어노테이션 $h_{j}$에 기반한다. 정렬 모델 $a$는 순방향 신경망feedforward neural network으로 파라미터화되어 시스템의 다른 모든 구성요소와 함께 학습된다. 전통적인 기계번역과 달리 정렬을 신경망으로 두어 정렬 모델과 번역 모델 전체를 동시에 학습할 수 있다는 것이 논문의 설명이다.

모든 어노테이션의 가중합은 가능한 정렬들에 대한 기대 어노테이션expected annotation으로 이해할 수 있다고 한다. $\alpha_{ij}$를 목표 단어 $y_{i}$가 원문 단어 $x_{j}$에 정렬될(그로부터 번역될) 확률이라 보면, $c_{i}$는 그 확률에 대한 어노테이션들의 기댓값이다. 그리고 논문의 바로 다음 대목에서 attention이라는 단어가 언급된다.

"Intuitively, this implements a mechanism of attention in the decoder. The decoder decides parts of the source sentence to pay attention to. By letting the decoder have an attention mechanism, we relieve the encoder from the burden of having to encode all information in the source sentence into a fixed-length vector."

직관적으로 말하면, 이는 디코더에 어텐션 메커니즘을 구현한 것이다. 디코더는 원문 문장의 어느 부분에 주의를 기울일지를 결정한다. 디코더에 어텐션 메커니즘을 부여함으로써, 원문 문장의 모든 정보를 하나의 고정 길이 벡터에 인코딩해야 하는 부담을 인코더로부터 덜어줄 수 있다.

3.2 Encoder: Bidirectional RNN for Annotating Sequences

$(1)$의 보통 RNN은 입력을 첫 단어 $x_{1}$부터 마지막 $x_{T_{x}}$까지 순서대로 읽지만, §3.1의 방식은 $i$시점의 출력 $y_{i}$가 입력벡터의 수열 전체를 참조하고있다. 이것이 가능한 이유는 인코더의 구조로 양방향 순환신경망bidirectional RNN, BRNN을 사용했기 때문이다. (논문에서는 BiRNN이라 표기되어있다) BRNN은 출력 $y_{i}$가 시점에 상관없이 모든 입력 벡터 $\left\{ x_{1}, \dots, x_{T_{x}} \right\}$를 참조한다.

BRNN은 순방향 RNN $\overrightarrow{f}$와 역방향 RNN $\overleftarrow{f}$로 구성된다. 순방향 RNN은 데이터를 순서대로($x_{1}$부터 $x_{T_{x}}$까지) 입력받으며 순방향 은닉상태 $\left\{ \overrightarrow{h}_{1}, \cdots, \overrightarrow{h}_{T_{x}} \right\}$를 계산하고, 역방향 RNN은 데이터를 반대 순서로 입력받아 역방향 은닉상태 $\left\{ \overleftarrow{h}_{1}, \cdots, \overleftarrow{h}_{T_{x}} \right\}$를 계산한다. 각 단어 $x_{j}$의 어노테이션은 이 둘을 이어붙여concatenate 얻는다.

$$ h_{j} = \begin{bmatrix} \overrightarrow{h}_{j} \\ \overleftarrow{h}_{j} \end{bmatrix} $$

이렇게 하면 어노테이션 $h_{j}$는 앞 단어들과 뒤 단어들의 요약을 모두 담는다. RNN의 은닉상태는 가까운 데이터를 더 잘 표현하는 경향이 있기 때문에, $h_{j}$는 자연스럽게 $x_{j}$ 주변 단어들에 집중하게 된다고 한다.

A Model Architecture

실험 결과에 대한 내용은 생략하고, 실험에 사용된 모델 RNNsearch의 아키텍처의 수식을 상세히 기술한다.

A.2.1 Encoder

모델은 원-핫 벡터들의 수열인 원문을 입력받아, 마찬가지로 원핫벡터들의 수열인 번역문을 출력한다.

$$ \mathbf{x} = (x_{1}, \dots, x_{T_{x}}), \quad x_{i} \in \mathbb{R}^{K_{x}}, \qquad \mathbf{y} = (y_{1}, \dots, y_{T_{y}}), \quad y_{i} \in \mathbb{R}^{K_{y}} $$

$K_{x}$와 $K_{y}$는 각각 원문 언어와 번역문 언어의 어휘 크기이고, $T_{x}$와 $T_{y}$는 원문과 번역문의 길이다. 인코더인 양방향 순환신경망의 순방향 은닉상태는 다음과 같이 계산된다.

$$ \overrightarrow{h}_{i} = \begin{cases} (1 - \overrightarrow{z}_{i}) \odot \overrightarrow{h}_{i-1} + \overrightarrow{z}_{i} \odot \overrightarrow{\tilde{h}}_{i} & \text{if } i > 0 \\ 0 & \text{if } i = 0 \end{cases} $$

여기서 $\odot$는 벡터의 성분별 곱셈을 의미하는 아다마르 곱이다. 논문에서는 함수의 합성을 의미하는 $\circ$로 표기했으니 주의가 필요하다. 각 항은 다음과 같다.

$$ \begin{align*} \overrightarrow{\tilde{h}}_{i} &= \tanh \left( \overrightarrow{W} \overline{E} x_{i} + \overrightarrow{U} \left[ \overrightarrow{r}_{i} \odot \overrightarrow{h}_{i-1} \right] \right) \\ \overrightarrow{z}_{i} &= \sigma \left( \overrightarrow{W}_{z} \overline{E} x_{i} + \overrightarrow{U}_{z} \overrightarrow{h}_{i-1} \right) \\ \overrightarrow{r}_{i} &= \sigma \left( \overrightarrow{W}_{r} \overline{E} x_{i} + \overrightarrow{U}_{r} \overrightarrow{h}_{i-1} \right) \end{align*} $$

$\overline{E} \in \mathbb{R}^{m \times K_{x}}$는 단어 임베딩 행렬이고, $\overrightarrow{W}, \overrightarrow{W}_{z}, \overrightarrow{W}_{r} \in \mathbb{R}^{n \times m}$과 $\overrightarrow{U}, \overrightarrow{U}_{z}, \overrightarrow{U}_{r} \in \mathbb{R}^{n \times n}$은 가중치 행렬들이며, $m$은 임베딩 차원, $n$은 은닉 유닛의 개수다. $x_{i}$가 1-of-$K$ 벡터이므로 $\overline{E} x_{i}$는 임베딩 행렬에서 해당 단어의 열을 뽑는 연산이다.

역방향 은닉상태 $\overleftarrow{h}_{1}, \cdots, \overleftarrow{h}_{T_{x}}$도 입력을 반대 순서로 읽으며 같은 방식으로 계산된다. 이때 임베딩 행렬 $\overline{E}$는 순방향과 역방향 RNN이 공유하지만, 가중치 행렬들은 공유하지 않는다. 두 은닉상태를 이어붙이면 §3.2에서 말한 어노테이션이 된다.

$$ h_{i} = \begin{bmatrix} \overrightarrow{h}_{i} \\ \overleftarrow{h}_{i} \end{bmatrix} \in \mathbb{R}^{2n} $$

A.2.2 Decoder

디코더의 은닉상태 $s_{i}$는 인코더가 내놓은 어노테이션들로부터 다음과 같이 계산된다.

$$ s_{i} = (1 - z_{i}) \odot s_{i-1} + z_{i} \odot \tilde{s}_{i} $$

$$ \begin{align*} \tilde{s}_{i} &= \tanh \left( W E y_{i-1} + U \left[ r_{i} \odot s_{i-1} \right] + C c_{i} \right) \\ z_{i} &= \sigma \left( W_{z} E y_{i-1} + U_{z} s_{i-1} + C_{z} c_{i} \right) \\ r_{i} &= \sigma \left( W_{r} E y_{i-1} + U_{r} s_{i-1} + C_{r} c_{i} \right) \end{align*} $$

$E$는 목표 언어의 단어 임베딩 행렬이고, $W, W_{z}, W_{r} \in \mathbb{R}^{n \times m}$, $U, U_{z}, U_{r} \in \mathbb{R}^{n \times n}$, $C, C_{z}, C_{r} \in \mathbb{R}^{n \times 2n}$는 가중치 행렬들이다.

이제 디코더에서 번역문이 어떻게 출력되는지 첫번째 단계부터 보자. 초기 은닉상태는 역방향 RNN의 마지막 은닉상태, 즉 원문을 끝에서부터 읽어 온 요약으로부터 다음과 같이 계산된다. $W_{s} \in \mathbb{R}^{n \times n}$이다.

$$ s_{0} = \tanh \left( W_{s} \overleftarrow{h}_{1} \right) $$

컨텍스트 벡터 $c_{1}$은 아래와 같이 계산된다.

$$ c_{1} = \sum_{j=1}^{T_{x}} \alpha_{1j} h_{j}, \qquad \alpha_{1j} = \frac{\exp (e_{1j})}{\sum_{k=1}^{T_{x}} \exp (e_{1k})}, \qquad e_{1j} = v_{a}^{\mathsf{T}} \tanh \left( W_{a} s_{0} + U_{a} h_{j} \right) $$

초깃값 $y_{0}$가 문장의 시작을 알리는 어떤 토큰으로 주어져있다고 하자. 디코더의 은닉상태 $s_{1}$은 아래와 같이 계산된다.

$$ \begin{align*} z_{1} &= \sigma \left( W_{z} E y_{0} + U_{z} s_{0} + C_{z} c_{1} \right) \\ r_{1} &= \sigma \left( W_{r} E y_{0} + U_{r} s_{0} + C_{r} c_{1} \right) \\ \tilde{s}_{1} &= \tanh \left( W E y_{0} + U \left[ r_{1} \odot s_{0} \right] + C c_{1} \right) \\ s_{1} &= (1 - z_{1}) \odot s_{0} + z_{1} \odot \tilde{s}_{1} \end{align*} $$

디코더 상태 $s_{1}$과 컨텍스트 벡터 $c_{1}$, 직전에 생성된 단어 $y_{0}$가 주어졌을 때 다음 단어의 확률벡터(확률분포)는 다음과 같이 정의된다.

$$ p (\cdot \mid s_{1}, y_{0}, c_{1}) = \operatorname{softmax} \left( W_{o} t_{1} \right) \in \mathbb{R}^{K_{y}} $$

$$ t_{1} = \begin{bmatrix} \max \left\{ \tilde{t}_{1, 1}, \tilde{t}_{1, 2} \right\} & \cdots & \max \left\{ \tilde{t}_{1, 2l-1}, \tilde{t}_{1, 2l} \right\} \end{bmatrix}^{\mathsf{T}} \in \mathbb{R}^{l} $$ $$ \tilde{t}_{1} = U_{o} s_{0} + V_{o} E y_{0} + C_{o} c_{1} $$

여기서 $\tilde{t}_{i,k}$는 $\tilde{t}_{i}$ 벡터의 $k$번째 성분이다. $W_{o} \in \mathbb{R}^{K_{y} \times l}$, $U_{o} \in \mathbb{R}^{2l \times n}$, $V_{o} \in \mathbb{R}^{2l \times m}$, $C_{o} \in \mathbb{R}^{2l \times 2n}$는 가중치 행렬들이다. 벡터 $\tilde{t}_{i} \in \mathbb{R}^{2l}$의 성분을 둘씩 짝지어 큰 쪽만 남기는 것이 은닉층 하나짜리 맥스아웃 층이고, 그 출력 $t_{i} \in \mathbb{R}^{l}$에 $W_{o}$를 곱해서 어휘 크기 $K_{y}$차원의 점수를 만든 뒤 소프트맥스로 정규화하면 확률이 된다. 여기서 값이 가장 큰 인덱스의 단어를 선택하면 그것이 곧 $y_{1}$가 된다.

$$ y_{1} = \operatorname*{argmax}_{1 \le w \le K_{y}} \left[ p (\cdot \mid s_{1}, y_{0}, c_{1}) \right]_{w} $$

이후 이 과정을 반복하면 번역문 $\left\{ y_{1}, \dots, y_{T_{y}} \right\}$를 얻는다.

A.1.2 Alignment Model

정렬 모델은 길이가 각각 $T_{x}$, $T_{y}$인 문장 쌍마다 $T_{x} \times T_{y}$번 계산되어야 한다는 점을 고려해서 설계해야 한다. 논문에서는 계산량을 줄이기 위해 은닉층이 하나인 단층 퍼셉트론을 쓴다.

$$ a (s_{i-1}, h_{j}) = v_{a}^{\mathsf{T}} \tanh \left( W_{a} s_{i-1} + U_{a} h_{j} \right) $$

여기서 $W_{a} \in \mathbb{R}^{n \times n}$, $U_{a} \in \mathbb{R}^{n \times 2n}$, $v_{a} \in \mathbb{R}^{n}$은 가중치 행렬이다. $U_{a} h_{j}$는 $i$에 의존하지 않으므로, 문장마다 한 번만 미리 계산해 두면 계산 비용을 최소화할 수 있다. $\tanh$ 안에서 쿼리 $s_{i-1}$의 선형변환과 키 $h_{j}$의 선형변환이 더해지는 이 꼴이, 앞서 바다나우 어텐션이 additive 어텐션이라고도 불린다고 한 이유다.


  1. Dzmitry Bahdanau, Kyunghyun Cho, and Yoshua Bengio. “Neural machine translation by jointly learning to align and translate.” arXiv preprint arXiv:1409.0473 (2014). ↩︎

  2. Kyunghyun Cho, et al. Learning phrase representations using RNN encoder-decoder for statistical machine translation. Proceedings of the Empirical Methods in Natural Language Processing (EMNLP 2014). ↩︎

  3. Ilya Sutskever, Oriol Vinyals, and Quoc V. Le. Sequence to sequence learning with neural networks. Advances in neural information processing systems 27 (2014). ↩︎