본 게시물은 LG aimer 커리큘럼에 수록된 주재걸 교수님의 강의 자료를 포함하고 있습니다.

 

Seq2Seq

[그림 1] RNN-based Sequence Modeling

Seq2Seq은 RNN 기반의 sequence modeling 중 many to many 방법을 사용합니다. many to many는 여러 개의 time step으로 이루어진 sequential한 모델을 말합니다. 대표적으로 입력 단에서 특정 어느 나라 말을 끝까지 시간순으로 읽은 후, 출력단에서 순차적으로 다른 나라말로 번역(예측)이 되는, 기계독해 - Machine Translation을 예로 들 수 있습니다.

 

Architecture

[그림 2] seq2seq model architecture

이처럼 Seq2Seq 모델은 번역 문제를 학습하기 위해 널리 사용되는 알고리즘입니다. Seq2Seq 모델은 크게 인코더와 디코더 두 개로 구분됩니다. 인코더에서는 단어를 순차적으로 입력 받은 뒤에 마지막 이 모든 단어를 압축해서 하나의 context vector로 만듭니다. Seq2Seq 모델에서 가장 중요한 점은 바로 context vector가 고정되어 있다는 점입니다.

인코더 아키텍처와 디코더 아키텍처는 여러 개의 LSTM 셀들로 구성되어 있습니다. 입력 문장을 받는 LSTM 셀을 인코더라고 하고, 출력 문장을 출력하는 LSTM 셀을 디코더라고 합니다. RNN으로 설명하는 자료도 있지만 보통 long term dependency 문제 및 높은 성능을 위해 LSTM cell 혹은 GRU cell을 사용합니다. 해당 자료에서는 통일감 있는 설명을 위해 LSTM cell을 기준으로 설명하겠습니다.

Encoder

입력 문장은 단어 토큰화를 통해 단어 단위로 쪼개지고, 단어 토큰 각각은 임베딩을 거쳐  LSTM cell의 마지막 시점의 hidden state vector를 decoder LSTM cell의 입력으로 넘겨주는데 이를 context vector라고 합니다. context vector는 decoder LSTM cell의 첫 번째 hidden state vector로 사용됩니다. 또한 encoder의 hidden state vector는 입력 문장의 정보를 잘 축적하는 vector입니다. 일반적으로 encoder 모델과 decoder 모델은 parameter를 공유하지 않습니다.

Decoder

[그림 4] decoder 구조

decoder는 초기 입력 문장으로 문장의 시작을 알리는 start of sentence, <sos>가 입력됩니다. decoder는 <sos>가 입력되면 예측한 입력 값을 다음 시점의 LSTM cell의 입력 값으로 사용합니다. 디코더는 기본적으로 다음에 올 단어를 예측하고, 그 예측한 단어를 다음 시점의 LSTM cell의 입력으로 넣는 행위를 반복합니다. 이 행위는 문장의 끝을 의미하는 심볼인 end of sentence, <eos>가 단어로 예측될 때까지 반복합니다. 이 과정은 테스트 과정 동안의 이야기입니다.

훈련 과정에서는 decoder에게 encoder가 보낸 context vector와 실제 정답 상황인 <sos> $y_0$ $y_1$를 입력 받았을 때, $y_0$ $y_1$ <eos>가 나와야 한다고 정답을 알려주면서 훈련합니다. 반면 테스트 과정에서는 앞서 설명한 과정과 같이 decoder는 오직 context vector와 <sos>만을 입력으로 받은 후에 다음에 올 단어를 예측하고, 그 단어를 다음 시점의 LSTM cell의 입력으로 넣는 행위를 반복합니다.

 decoder는 출력 단어로 여러 단어 중 하나를 선택해야 합니다. 이를 선택하기 위해서 softmax 함수를 통해 출력 sequence의 각 단어 별 확률 값을 반환하고, decoder는 출력 단어를 결정합니다.

Embedding

[그림 3] 임베딩 변환

Seq2Seq에서 사용되는 모든 단어들은 embedding vector로 변환 후 입력으로 사용합니다. 예를 들어 'I', 'am', 'a', 'student'라는 단어들에 대한 embedding vector는 위와 같은 모습을 가집니다. embedding vector는 수백 개의 차원도 가질 수 있습니다.

Attention

Architecture

[그림 4] Attention이란?

Attention은 이름에서 알 수 있듯이 무언가를 예측할 때 특정 부분을 집중해서 보는 방법입니다. Attention 기법은 Seq2Seq 모델의 병목 현상에 대한 해결법을 제시했습니다. 기존 Seq2Seq 모델에서는 context vector의 크기가 고정되어 encoder의 정보가 유실되거나 제대로 반영되지 않는 문제가 있었습니다. Attention 기법을 적용하면 제한된 context vector를 사용해도 encoder의 hidden state vector에 직접 접근해 필요한 정보를 추가적으로 가져올 수 있습니다.

이런 Attention 기법의 핵심 아이디어는 decoder의 개별 time step에서 decoder가 서로 다른 부분의 source sequence를 활용할 수 있도록 한 것입니다. 따라서 Attention 기법을 적용하면 encoder의 마지막 time step의 hidden state vector 뿐만 아니라 decoder의 각 time step에서 encoder에서 나온 여러 단어별로 encoding 된 hidden state vector들 중에 필요한 vector를 직접적으로 사용할 수 있습니다.

[그림 5] Attention 기법의 작동 원리

decoder는 처음 입력으로 encoder의 output인 context vector와 문장의 시작을 알리는 <bos>를 받게 됩니다. 이 때 decoder는 output을 도출할 때 context vector와 <bos>를 고려할 뿐만 아니라 encoder의 모든 hidden state vector와 내적해서 attention score를 계산합니다. decoder의 $h_t$가 encoder 단어들과 내적하게 된다면 개별 단어들의 hidden state vector와의 유사도를 계산할 수 있습니다. 각 time step의 decoder $h_t$와 개별 encoder $h_t$가 서로 내적해서 attention score를 구했다면 score를 softmax 함수에 통과시킵니다. softmax 함수를 지나게 되면 0~1 사이의 값으로 attention weight이 산출되게 됩니다. attention weight은 하나의 vector로 결합되어 최종 attention output이 됩니다. 이런 attention output은 대게 가장 높은 attention을 받은 hidden state의 정보를 포함하고 있습니다. 특정 time step의 decoder 는 가장 가중치가 높은 encoder 단어의 hidden state vector를 output으로 예측하는데 참고합니다.

이렇게 참고된 decoder 모델은 decoder의 개별 time stpe에서 가장 필요로 하는 encoder time step의 hidden state vector와 높은 유사도를 띄도록 model이 전체적으로 학습됩니다.

attention 모듈이 없었을 때는 back propagation을 할 때 마지막 decoder cell부터 처음 encoder cell까지 긴 과정을 거슬러 올라가야 했지만 attention 기법을 사용하면 훨씬 짧은 path가 생깁니다.

Contribution

1. Attention 기법은 NMT((neural machine translation)) 성능을 유의미한 수준으로 개선했습니다.

  • decoder가 특정 source sequence에 접근할 수 있도록 한 것은 매우 효과적인 방법입니다.

2. Attention은 병목 현상을 해결했습니다.

  • 제한된 크기의 context vector는 source 정보를 유실하거나 왜곡시킬 수 있습니다. attention 모듈을 사용하면 context vector 뿐만 아니라 직접적으로 source sequence에 접근할 수 있어 병목 현상 문제를 해결할 수 있습니다.

3. Attention은 기울기 소실 문제를 해결하는데 도움이 됩니다.

  • 기존 Seq2Seq 모델에서 back propagation을 수행할 때는 긴 과정을 거슬러 올라갔지만 attention 모듈을 통해 개별 단어에 훨씬 빠르고 간단한 step으로 접근이 가능합니다.

4. Attention 기법은 해석 가능합니다.

  • 단어 별 attention weight을 사용해서 decoder가 output을 계산할 때 어떤 단어에 집중했는지 확인 가능합니다.

 

다음 글에서는 attention 모듈에서 발전한 self-attention 모듈에 대해 살펴보겠습니다.

더보기

+ Recent posts