Sequence to Sequence(Seq2seq)
: 이름 그대로 sequential data를 Input으로 받은 후 일련의 처리과정을 거쳐 sequential output으로 반환하는 방법
특징:
- 입력과 출력의 sequence 수는 같지 않아도 된다
- Encoder와 Decoder로 이루어져 있다.
- Encoder: 입력된 정보를 어떻게 처리해서 저장 할 것인지?
- Decoder: Encoder로부터 압축된 정보를 어떻게 풀어 낼 것인지?
Encoder에서 각각의 item input sequence를 process해서 해당 정보들을 하나의 벡터로 생성한다. 이게 Context vector
Decoder는 해당 Context vector를 받아 output sequence를 생성한다.
RNN에서의 작동 방식을 살펴보자.
Context vector는 그 자체가 vector로 표현된다.
이때, RNN에서 각각의 입력이 들어갈 때마다 hidden state가 한번씩 업데이트 되고 가장 마지막의 hidden state가 Context vector로 된다. 즉, Decoder는 Incoder가 전달해 준 Context vecotr(마지막 hidden state)를 output으로 출력.
하지만, RNN, LSTM, GRU는 Long Term Dependency의 완벽한 해결이 힘들기에 Context vector 자체가 long sequence를 처리하는데는 어려움이 있다.
Attention
Attention은 model이 각각의 input sequence 중, 현재의 output item이 주목해야 하는 부분에 바로 연결(가중치 부여) 시켜 해당 부분을 더 잘 활용하게 한다
Attention의 구조
- Bahdanau Attention: attention score 자체를 학습하는 Neural Network모델(train)
- Luong Attention: 현재의 current state, 과거의 hidden state들에 대한 유사도 측정 후 attention score를 만든다.(untrain)
Bahadanu, Luong 모두 비슷한 성능이 나타나기에, 모델 학습이 필요 없는 Luong를 실용적으로 많이 사용한다.
Attention in Seq2Seq Learning
Attention 매커니즘이 적용된 Seq2Seq Learning은 기존의 방식과 다음과 같은 다른점들이 있다.
- Encoder가 final hidden state 뿐 아니라 전체 hidden state의 전체 정보를 Decoder로 전달하기에 Output 추출 시 모든 hidden state를 고려할 수 있다.
- Decoder의 관점에서 Encoder가 가져오는 여러개의 hidden state를 가지고 Output 생선 전 extra step을 지시한다.
- Encoder가 보낸 hidden state를 전부 확인한다.
- 기본적 가정: 각 hidden state는 해당 연결된 단어의 sequence에 영향을 가장 많이 받는다. ex) hidden state #3은 3번째 입력단어의 단어에 대한 정보를 가장 많이 가지고 있다.
- 각 hidden state에 점수 부여
- Attention Score: 해당 점수는 Encoder의 hidden state와 해당 Decoder의 hidden stated의 내적이라 생각해도 무방하다.
- Attention Weight 계산
- Attention Score에 softmax 함수 취해 정규화 한다. 즉, 이러한 가중치는 Decoder의 현재 시간 단계에 대한 각 Encoder hidden state의 중요성을 나타낸다
- Context vector 생성:
- 정규화된 Attention Weight를 사용해 Encoder hidden state의 가중 평균을 계산해 Context Vector 생성: Decoder가 현재 시점에서 중요한 인코딩 정보를 모아놓은 벡터이다.
- Encoder가 보낸 hidden state를 전부 확인한다.
일반적으로 hidden state #n 과 context vector #n 를 concat 해서 사용한다.
위의 그림에서 한번 설명해보면
- time step #4의 Context vector는 encoder hidden state #1,#2,#3와 decoder 첫전째 hidden state #4의 Attention Score 계산 해서 결합해 Context vector 생성한다.
- time step #4의 Context vector와 hidden state #4를 concat 해서 Output "I" 생성
- initial decoder hidden state과 END token(Decoder를 작동시킬 시점)을 합쳐 hidden state #4가 나온다.
- 해당 Output에 해당하는 "I" vecotr가 다음의 입력으로 들어가고, 이게 hidden state #5를 만든다. 그리고 hidden state #5와 연결된 Attention Score를 결합해 Output 또 생성.
해당 게시물을 유튜브 고려대학교 산업경영학부 DSBA 연구실 Seq2Seq 영상을 바탕으로 작성됐습니다.