머신러닝, 딥러닝 ML, DL/이론

[Deep Learning] seq2seq (Encoder - Decoder)

킹남지 2021. 8. 18. 18:18
반응형

RNN을 응용한 seq2seq에 대해 정리하겠습니다.

 

seq2seq

seq2seq(sequence to sequence)는 이름 그대로, 어떤 Sequence(시계열 데이터)를 입력 받아 다른 Sequence(시계열 데이터)로 mapping(변환)하는 방법입니다. 

 

일반적인 RNN에서는 입력과 출력 sequence의 크기가 고정됐었지만, (입력 sequence의 크기는 패딩을 통해 동일한 크기로 만들어 주는 처리를 했었습니다.) 기계 번역이나 음성 인식과 같은 분야에서는 각 sequence에 대한 길이를 미리 알 수 없고, 가변적인 출력 sequence에 대한 처리가 필요합니다. 이런 문제의 해결을 위해 seq2seq을 사용합니다.

 

 

구조

seq2seq의 구조 예시입니다.

Seq2Seq의 예시

입력 'ABC'를 받아 'WXYZ'를 출력하고 있습니다. 

 

입력 sequence를 처리하는 부분을 인코더(Encoder), 출력 sequence를 생성하는 부분을 디코더(Decoder)라고 부릅니다.

그래서 seq2seq을 Encoder-Decoder 모델이라고도 합니다. Encoder와 Decoder로는 RNN을 사용할 수 있고, 논문에서는 LSTM을 사용했습니다.

 

 

Encoder 부분에서 입력 sequence를 인코딩하고, Decoder 부분에서 인코딩된 정보를 전달 받아 출력 sequence를 만들어냅니다.

 

좀 더 자세히 정리하면 

 

Encoder 부분에서 입력 sequence를 LSTM을 통해 hidden state를 전달하며 마지막 단계의 hidden state를 Decoder로 전달합니다. 이 마지막 hidden state를 컨텍스트 벡터(Context Vector)라고 부릅니다.

(Cell state는 전달하지 않습니다. 일반적으로 LSTM의 Cell state는 다른 계층에 전달하지 않습니다. LSTM의 Cell은 자기 자신만 사용한다는 전제로 설계됐기 때문입니다.)

 

즉, Context Vector는 입력 sequence의 정보를 하나의 고정된 크기의 벡터 표현으로 압축한 것이고, 인코딩한다는 것은 결국 임의 길이의 sequence를 고정 길이 벡터로 변환하는 작업으로 생각할 수 있습니다.

 

그 다음 Context Vector를 전달받은 Decoder는 출력 sequence를 생성합니다. (Encoder와 다른 점은 Context vector를 입력받는다는 점 뿐입니다.)

 

 

수식

위의 내용을 수식으로 표현하면 아래와 같습니다.

$p(y_1, \dots, y_{T'}|x_1,\dots,x_T) = \displaystyle \prod_{t=1}^{T'} p(y_t|v, y_1, \dots, y_{t-1}) $

 

입력 sequnece, $x$를 반복해 출력 sequence, $y$를 생성합니다. $v$는 Context Vector를 나타냅니다.

 

문장으로 예를 들면

좌변의 수식, $p(y_1, \dots, y_{T'}|x_1,\dots,x_T)$은 입력 문장이 들어왔을 때 출력 문장(번역 문장)에 대한 조건부 확률입니다.

당연히 $T$와 $T'$은 다를 수 있습니다.

 

우변의 수식은 $t$시점의 $y$ 단어를 생성하기 위해 Context Vector와 $t$시점 이전의 $y$가 입력되는 것을 의미합니다.

그리고 소프트맥스를 적용해 $p(y_t|v, y_1, \dots, y_{t-1})$와 같이 확률로 표현됩니다.

 

문제점

seq2seq은 Encoder에서 입력 Sequence를 고정된 길이의 벡터로 변환합니다. 고정 길이 벡터로 변환한다면 아무리 입력 sequence의 길이가 길어도 항상 같은 길이의 벡터로 변환됩니다. 따라서 필요한 정보가 벡터에 다 담기지 못하게 됩니다.

 

그래서 이러한 문제을 해결하기 위해 어텐션, Attention 이라는 방법이 제시됩니다.

 

다음에 Attention에 대해 정리해보겠습니다.

읽어주셔서 감사합니다.^^

 

[참고자료]

[1] https://arxiv.org/abs/1409.3215

[2] 밑바닥부터 시작하는 딥러닝2 (사이토 고키)

반응형