프로젝트/2022 융합보안논문경진대회

[딥러닝 / RNN] Sequence To Sequence (Seq2Seq Model)

pxatd 2021. 12. 27. 04:24
728x90

Sequence To Sequence란

Sequence To Sequence 모델은 LSTM (또는 GRU) 기반 모델로 고정된 길이의 시퀀스를 입력받아, 입력 시퀀스에 알맞은 길이의 시퀀스를 출력해주는 모형으로 2014년 구글 et. al 에 의해 최초로 제안되었다. 

 

기존 DNN 모델은 다양한 분야에서 좋은 성과를 거뒀지만, 이는 고정된 차원의 feature와 고정된 차원의 출력에 특화된 방법이다. 그렇기 때문에 입력과 출력의 길이가 매번 다른 데이터를 학습하고, 이를 응용하는 문제에는 적합하지 않다. DNN은 대표적으로 기계 번역에서 한계점을 갖는다. 기계 번역은 빈번하게 입력의 길이도 다르고, 그에 따른 출력의 길이도 다르다. 

 

예를 들어, How are you? 를 번역하는 문제를 고려해보면 잘 지내?로 3의 길이를 갖는 영어에서 2의 길이를 갖는 한국어로 번역된다. 기계 번역 처럼 입력과 출력의 길이가 매번 다른 경우 DNN으로 문제를 해결하기 어렵다. Sequence To Sequence 는 이러한 DNN의 한계점을 극복한 end-to-end 학습이 가능한 모델이다. 

 

 

 

 

Sequence To Sequence Model

Sequence to Sequence 는 LSTM(or GRU) 기반 encoder 부분과 decoder 부분으로 구성된 모델로 고정된 차원의 입력을 받아, 입력 값에 대응하는 가변적 길이의 결과 값을 출력해주는 모델이다. Sequence to Sequence 모델의 핵심은 encoder 부분과 decoder 부분으로 구분된다는 점이다. encoder는 입력 sequence의 상태를 추출해주는 역할을 한다. decoder는 encoder에서 생성된 상태를 초기값으로 이용하여 순차적으로 Sequence 를 생성하는 역할을 한다.

이러한 특징 덕분에 Sequence to Sequence 모델은 일반적인 딥러닝 모델과 다르게 학습 단계와 추정 단계에서 차이를 갖는다. encoder와 decoder의 역할 및 구체적인 내용은 밑에서 서술하겠다. 

 

 

 

 

Encoder

encoder는 입력 sequence에서 순차적으로 LSTM(or GRU)에 입력받아 sequence의 마지막단에서 상태를 추출한다. 쉽게 말해서 encoder의 역할은 각 단어를 순차적으로 받음으로써 최종적으로 문맥벡터(Context vector)를 만든다고 생각하면 된다.  

 영문문장을 국문문장으로 번역하는 예제에서, 단어단위로 토큰화 한 뒤 순차적으로 단어들을 입력받는다. 특히 마지막 "."은 입력 sequence의 종료를 나타내며 이를 별도로 EOS(End Of Sentenct)라고 표기한다. 종료단까지 LSTM을 통과시키고 나면 상태 백터 hfinal, cfinal을 얻을 수 있다. 

 

*EOS = 문장의 끝을 알리는 . ? ! 모든 것이 포함된다. sequence to sequence에서는 EOS가 상당히 중요하다. sequence의 끝을 알 수 있고 LSTM 또는 GRU 특성 중 같은 가중치를 계속 사용한다는 점에서 무한히 확장 가능하기 때문이다. 

 

 

 

 

Decoder

decoder은 encoder에서 추출한 상태를 초기 상태로 받는 LSTM (또는 GRU)으로 순차적으로 결과를 출력해주는 부분이다. encoder가 만든 문맥 벡터(Context vector)로부터 기계 번역을 시작한다. 

좌측부터 우측으로 Encoder에서 추출된 hfinal, cfinal을 초기상태로 입력받는다. 첫 LSTM에서는 입력으로 EOS를 받는다. EOS를 처음 입력으로 받는 이유는 학습 후 모델을 운용할 때 시작 값을 알 수 없기 때문에 학습 단계에 강제로 EOS로 시작하도록 구성하는 것이다. 첫 출력으로 y(1)이 얻어졌으면 이는 두번째 LSTM 입력 값으로 이용되며 EOS에 도달할 때까지 해당 과정이 순차적으로 반복된다. 

 

 

위 그림을 보면 입력과 출력에 1시점이 시간자차 있도록 설계되어 있다. 이렇게 1-step offset으로 학습하는 방식을 teacher forcing이라고 부른다. 

 

 

 

 

한계

DNN의 발전과 더불어 여러 문제를 딥러닝으로 해결할 수 있게 되었지만 여전히 문제는 존재했다. sequence to sequence의 핵심은 encoder와 decoder로 나누어 구성되어 있고 각각의 상태를 추출하여 결과 sequence를 출력하기 위해 고안되었다. 하지만, 문맥벡터 (Context vector)는 하나의 고정된 사이즈의 벡터이기 때문에 단어의 수가 매우 많아지면 기계 번역 문제를 해결하기 어렵다.

실제로도 입력 sequence의 길이가 길어질수록 상대적으로 성능이 안좋아진다고 알려져 있다. 이를 해결하기 위해서 attention 이라는 새로운 방식이 등장했다. 다음 글에서는 attention 방식에 대해 알아 볼 예정이다. 

 

 

 

 

참고

https://yjjo.tistory.com/35

https://www.youtube.com/watch?v=WsQLdu2JMgI 

 

reference research paper

Sequence to Sequence Learning with Neural Networks (2014 NIPS)

 

728x90