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』에서 🔒(26/07/28)기계번역을 위해 제안된 인코더-디코더 구조의 신경망 모델이다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}$가 미리 정해져 있는 것이 아니라, 디코더가 수열의 끝을 뜻하는 특별한 🔒(26/07/30)토큰을 출력할 때까지 생성을 계속한다.

seq2seq 모델의 특징은 정의에서 언급했듯 입력 수열과 출력 수열의 길이가 같을 필요가 없다는 것이다($T_{x} \ne T_{y}$). 대표적인 응용인 기계번역을 생각해 보면 당연히 요구되는 성질인데, "나는 학생이다"를 "I am a student"로 옮기듯 원문과 번역문을 토큰 단위로 쪼개 🔒(26/08/01)임베딩하면 두 수열의 길이는 일반적으로 다르기 때문이다.
한편 인코더와 디코더 사이를 오가는 정보는 고정된 차원 $d_{c}$의 컨텍스트 벡터 $\mathbf{c}$ 하나뿐이다. 입력이 아무리 길어져도 그 내용을 벡터 하나에 눌러 담아야 하므로, 입력이 길수록 정보 손실이 커지는 병목bottleneck이 생기고 이는 seq2seq 모델이 갖는 구조적인 한계라고 볼 수 있다. 이 문제를 해결하기 위해 디코더가 매 시점마다 인코더의 모든 은닉상태를 다시 참조하도록 한 것이 🔒(26/07/22)어텐션이고2, 나아가 순환 구조를 아예 버리고 어텐션만으로 수열을 처리하는 것이 🔒(26/07/24)트랜스포머3다.
같이보기
Ilya Sutskever, Oriol Vinyals, and Quoc V. Le. “Sequence to sequence learning with neural networks.” Advances in neural information processing systems 27 (2014). ↩︎
Dzmitry Bahdanau, Kyunghyun Cho, and Yoshua Bengio. “Neural machine translation by jointly learning to align and translate.” arXiv preprint arXiv:1409.0473 (2014). ↩︎
Ashish Vaswani, et al. “Attention is all you need.” Advances in neural information processing systems 30 (2017). ↩︎

저희들의 저서 「줄리아 프로그래밍」이 2024 세종도서 학술부문에 선정되었습니다!

