Sequence to Sequence(Seq2Seq)

개인적으로 공부하기 위해 블로그나 논문을 찾아보면서 정리한 글입니다. 내용에 이상이 있거나 저작권상 문제가 있을 경우 댓글 남겨 주세요.





Sequence to Sequence(Seq2Seq)



기존 Deep Neural Network(DNN) 모델에서는 배열 형태의 데이터(문장, 음성, 주가 변동 등 시계열 특성의 데이터)를 처리하는 데 한계가 있었습니다. 기존의 모델은 입력 데이터의 길이와 출력 데이터의 길이가 동일해야 한다는 단점이 있었습니다.




예를 들어, "I am a student"라는 문장을 프랑스 어로 번역한다면 "Je suis étudiant." 가 됩니다. 전자의 경우 'I', 'am', 'a', 'student.'로 4개의 단어로 구성되며, 후자의 경우 'Je', 'suis', 'étudiant.'로 총 3개의 단어로 구성됩니다.




고정된 차원 및 정해진 데이터 길이에 의존하는 DNN 모델에서, 상기의 데이터를 학습하고 결과를 예측한다는 것은 어려운 일이었습니다.




이러한 문제를 해결하기 위해 Sequence to Sequence(Seq2Seq)가 등장하였습니다. Seq2Seq는 두 개의 딥 러닝 아키텍처(각각 여러 개의 LSTM Cell로 이루어져 있습니다)와 하나의 Context Vector를 통해, 배열 데이터를 길이나 차원에 구애받지 않고 학습 시킬 수 있는 강력한 모델입니다. Seq2Seq는 이러한 특징을 통해, 다른 종류의 배열 데이터를 다루는 기계 번역이나, 영상에 제목을 다는 캡셔닝, 주파수를 문자로 인식할 수 있는 음성 인식 기술 등 다양한 분야에서 사용될 수 있습니다.



이제부터 Seq2Seq가 어떤 방법으로 배열 데이터를 학습하고, 그에 관련된 결과를 예측할 수 있는 지 알아보도록 하겠습니다.



Seq2Seq의 구조




그림 1 - 기본 Seq2Seq 구조

Seq2Seq는 두개의 딥 러닝 아키텍처와 입력 데이터를 압축된 벡터 상태인 Context Vector로 이루어져 있습니다.



예를 들어 "I am a student"라는 문장이 인코더로 들어가면, 이 문장을 통합 Vector로 압축시켜, 디코더에서 이 Vector를 통해 결과인 "Je suis étudiant."를 예측하게 됩니다. 그럼 인코더와 디코더의 내부 구조는 어떤지, 어떤 식으로 데이터가 입력, 출력되는 지 확인하도록 하겠습니다.






그림 2 - Seq2Seq의 세부 도식
인코더와 디코더 내부에는 여러 개의 LSTM Cell이 존재하며, 각 셀마다 입력 데이터와 출력을 위한 학습 데이터가 잘개 쪼개진 단어(토큰) 형태로 입력됩니다. 여기서 단어는, 단어의 모습 그대로 셀에 입력되는 것이 아니라 각 단어를 대변하는 Vector로 변환되어 들어갑니다.





그림 3 - 단어의 Vector화




그림을 볼 때, 디코더에서 학습 데이터와 결과 데이터에 <sos>와 <eos>라는 기호를 확인할 수 있습니다. 이에 대한 설명은 후술할 Decoder 파트에서 설명하도록 하겠습니다.



Encoder



 Encoder에 들어간 배열 데이터는 여러 겹의 LSTM Cell 을 거쳐 모든 단어의 정보를 보유한 히든 스테이트로 변환됩니다. 히든 스테이트 계산의 경우, 이전 포스트의 계산 방법을 그대로 따라가기 때문에 따로 링크를 걸어두도록 하겠습니다.


https://radioactivepkpk.blogspot.com/2019/11/lstmlong-short-term-memory-networks.html


Context Vector




Context Vector는 이름 그대로 문맥의 벡터로 입력 데이터의 맥락을 벡터로 표현한 것입니다.




Seq2Seq에서 Context Vector는, Encoder의 최종 LSTM Cell에서 산출한 히든 스테이트를 의미합니다. Encoder의 히든 스테이트는 Decoder가 정확한 예측을 할 수 있도록, 모든 입력 단어들에 대한 정보를 압축 상태로 가지고 있습니다.




Encoder의 히든 스테이트는 Decoder의 처음 LSTM Cell에서 초기 히든 스테이트로 작용합니다.




Decoder




그림 4 - Decoder


Decoder 또한 여러 겹의 LSTM Cell로 구성되어 있으며, 각 시점 마다 출력할 단어를 예측합니다.





Decoder의 처음 LSTM Cell은 Encoder에서 히든 스테이트를 받고, Decoder에 들어온 처음 값을 토대로 결과 값을 예측합니다.





그림에서 나온 <sos>는 ‘Start of Sequence’라는 의미로, 예측해야 할 문장이 시작됨을 의미합니다. 마찬가지로 <eos>는 ‘End of Sequence’로, 예측해야 할 문장이 끝났음을 의미합니다. 이 기호는 모델의 학습 단계에서 입력된 것들로 Decoder의 예측 능력을 강화하기 위해 추가되었습니다.





처음 입력된 히든 스테이트와 <sos>기호는, Decoder가 Softmax 함수를 통해 처음 등장할 단어를 예측하도록 돕습니다. 그리고 Decoder에서 출력된 첫 예측 값은 다음 LSTM Cell에 입력되어 다음 단어를 예측할 수 있도록 합니다. 그리고 LSTM Cell에서는 새로운 히든 스테이트를 계산하여 다음 LSTM Cell에 보냅니다.





그림을 설명하자면, ‘I am a student.’라는 문장의 Context Vector와 <sos> 기호가 처음 LSTM Cell에 입력되어 ‘Je’를 예측합니다. 현재 LSTM Cell은 히든 스테이트를 갱신하여 다음 Cell에 전송합니다. 그리고 ‘Je’는 두번째 LSTM Cell에 입력되어, 이전 히든 스테이트 값과 함께 두번째 단어인 ‘suis’를 예측하도록 돕습니다.





그리고 마지막 단어인 ‘étudiant.’가 LSTM Cell에 입력되고 그 결과로 <eos>를 출력했을 때, Seq2Seq는 문장 생성을 종료합니다.





출처


위키독스, 2019년 10월 21일, https://wikidocs.net/24996

Eugenio Culurciello, 2019년 4월 17일,https://medium.com/@culurciello/sequence-to-sequence-neural-networks-3d27e72290fe

Simeon Kostadinov, 2019년 2월 5일,https://towardsdatascience.com/understanding-encoder-decoder-sequence-to-sequence-model-679e04af4346

Ilya Sutskever, Oriol Vinyals, Quoc V.Le, Sequence to Sequence Learning with Neural Networks, 2014

댓글