logo

seq2seq 모델 📂머신러닝

seq2seq 모델

정의

입력 벡터들의 수열 $\left\{ \mathbf{x}_{1}, \mathbf{x}_{2}, \dots, \mathbf{x}_{T_{x}} \right\}$ $(\mathbf{x}_{t} \in \mathbb{R}^{n})$을 컨텍스트 벡터context vector $\mathbf{c} \in \mathbb{R}^{d_{c}}$로 매핑하는 인코더와, 컨텍스트 벡터를 출력 벡터들의 수열 $\left\{ \mathbf{y}_{1}, \mathbf{y}_{2}, \dots, \mathbf{y}_{T_{y}} \right\}$ $(\mathbf{y}_{t} \in \mathbb{R}^{p})$로 매핑하는 디코더합성sequence-to-sequence, 줄여서 seq2seq 모델이라 한다. 인코더와 디코더를 각각 함수로 나타내면 다음과 같다.

$$ \begin{align*} \operatorname{Encoder} : \left( \mathbb{R}^{n} \right)^{T_{x}} &\to \mathbb{R}^{d_{c}} \\ \left\{ \mathbf{x}_{t} \right\}_{t=1}^{T_{x}} &\mapsto \mathbf{c} \end{align*} $$

$$ \begin{align*} \operatorname{Decoder} : \mathbb{R}^{d_{c}} &\to \left( \mathbb{R}^{p} \right)^{T_{y}} \\ \mathbf{c} &\mapsto \left\{ \mathbf{y}_{t} \right\}_{t=1}^{T_{y}} \end{align*} $$

seq2seq 모델은 이 둘의 합성이다.

$$ \operatorname{seq2seq} := \operatorname{Decoder} \circ \operatorname{Encoder} : \left\{ \mathbf{x}_{1}, \mathbf{x}_{2}, \dots, \mathbf{x}_{T_{x}} \right\} \mapsto \left\{ \mathbf{y}_{1}, \mathbf{y}_{2}, \dots, \mathbf{y}_{T_{y}} \right\} $$

  • 여기서 $T_{x}, T_{y} \in \mathbb{N}$은 각각 입력 수열과 출력 수열의 길이이며, 서로 같을 필요가 없다.

설명

seq2seq 모델은 NIPS 2014에서 발표된 논문 『Sequence to Sequence Learning with Neural Networks』에서 기계번역을 위해 제안된 인코더-디코더 구조의 신경망 모델이다1.

인코더와 디코더로는 보통 순환신경망(RNN)이 쓰이며, 원논문에서는 구체적으로 LSTM을 사용했다. 인코더는 입력 수열을 시점 순서대로 읽어 나가며 은닉상태hidden state $\mathbf{h}_{t}$를 갱신한다. 일반적으로 컨텍스트 벡터는 은닉상태들의 함수 $\mathbf{c} = q(\mathbf{h}_{1}, \dots, \mathbf{h}_{T_{x}})$로 정의할 수 있는데, 원논문에서는 그중 가장 단순한 선택으로 마지막 시점의 은닉상태를 그대로 컨텍스트 벡터로 쓴다($\mathbf{c} = \mathbf{h}_{T_{x}}$). 디코더는 $\mathbf{c}$를 초기 은닉상태로 삼아 출력 벡터를 한 시점에 하나씩 생성하는데, 이때 직전 시점의 출력이 다음 시점의 입력으로 들어간다. 실제로는 출력 길이 $T_{y}$가 미리 정해져 있는 것이 아니라, 디코더가 수열의 끝을 뜻하는 특별한 토큰을 출력할 때까지 생성을 계속한다.

seq2seq 모델의 특징은 정의에서 언급했듯 입력 수열과 출력 수열의 길이가 같을 필요가 없다는 것이다($T_{x} \ne T_{y}$). 대표적인 응용인 기계번역을 생각해 보면 당연히 요구되는 성질인데, "나는 학생이다"를 "I am a student"로 옮기듯 원문과 번역문을 토큰 단위로 쪼개 🔒(26/07/26)임베딩하면 두 수열의 길이는 일반적으로 다르기 때문이다.

한편 인코더와 디코더 사이를 오가는 정보는 고정된 차원 $d_{c}$의 컨텍스트 벡터 $\mathbf{c}$ 하나뿐이다. 입력이 아무리 길어져도 그 내용을 벡터 하나에 눌러 담아야 하므로, 입력이 길수록 정보 손실이 커지는 병목bottleneck이 생기고 이는 seq2seq 모델이 갖는 구조적인 한계라고 볼 수 있다. 이 문제를 해결하기 위해 디코더가 매 시점마다 인코더의 모든 은닉상태를 다시 참조하도록 한 것이 🔒(26/08/07)어텐션이고2, 나아가 순환 구조를 아예 버리고 어텐션만으로 수열을 처리하는 것이 트랜스포머3다.

같이보기


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

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

  3. Ashish Vaswani et al. Attention is all you need. Advances in neural information processing systems 30 (2017). ↩︎