오답노트

[NLP] Sequence-to-Sequence (seq2seq) 본문

Python/DL

[NLP] Sequence-to-Sequence (seq2seq)

권멋져 2022. 10. 6. 21:31

https://wikidocs.net/24996

 

1) 시퀀스-투-시퀀스(Sequence-to-Sequence, seq2seq)

이번 실습은 케라스 함수형 API에 대한 이해가 필요합니다. 함수형 API(functional API, https://wikidocs.net/38861 )에 대해서 우선 숙 ...

wikidocs.net

Sequence-to-Sequence (seq2seq)

seq2seq 모델은 번역에서 많이 사용되는데, 시퀀스 입력 데이터에 대해 적절한 시퀀스 출력을 학습하기 위한 모델이다.

두 개의 RNN을 이용해 모델링되어 있는데

입력 문장을 받는 RNN 셀이 Encoder,

출력 문장을 출력하는 RNN 셀이 Decoder 이다.

 

Encoder는 입력 문장의 모든 단어들을 순차적으로 입력 받은 뒤에 이 모든 단어 정보들을 압축해서 하나의 벡터로 만드는데, 이 벡터를 Context Vector라고 한다.

 

Context Vector는 인코더 RNN 셀의 마지막 시점의 hidden state이다.

Encoder가 Context Vector를 Decoder로 전송하면 디코더는 컨텍스트 벡터를 받아서 단어를 하나씩 순차적으로 출력한다.

 

 

Decoder 는 각 시점의 RNN 셀에서 출력 벡터가 나오면 해당 벡터는 softmax 함수를 거쳐서 각 단어별 확률값으로 변환된다.

 

seq2seq 문제점

  1. Context Vector에 모든 정보를 압축하므로 정보 소실이 일어난다.
  2. 따라서 긴 문장을 번역할 경우 성능이 하락한다.
  3. 기울기 소실(vanishing gradient)이 발생한다.

 

 

Attention

Attention 기법은 정보 소실로 인해 제대로 된 예측을 하지 못하는 seq2seq의 단점을 보안한다.

디코더에서 출력하는 단어를 예측하는 매 시점 마다, 인코더에서 전체 입력 문장을 다시 한 번 참고한다.

이 때, 전체 입력 문장을 전부 동일한 비율로 참고하는 것이 아닌, 해당 시점에서 예측해야할 단어와 연관 있는 입력 단어를 집중(Attention)해서 참고한다.

 

대표적인 Attention 기법으로는 Bahnadau Attention 과 Luong Attention이 있다.

Attention Score 계산

인코더 시점에서의 hidden state를 ht,

디코더 시점에서의 hidden state를 St 라고 하고, 이 둘의 차원은 동일하다.

 

Attention Score는 현재 디코더의 시점 t에서 단어를 예측하기 위해, ht와 St의 유사한 정도를 판단하는 Score이다.

 

St를 전치하여 ht와 내적을 수행하면 t 시점에 대한 Attention Score가 를 알 수 있다.

 

위와 같은 계산을 모든 시점에서 수행하고 이 Attention Score의 모임에 softmax를 취해서 모든 값을 합치면 1이되는 확률 분포가 된다.

 

이 값을 Attention Weight라고 한다.

 

Attention Value 계산

Attention Value는 인코더의 각 hidden state와 Attention Weight를 가중합한 것이다.

 

Attention Concatenate

Attention Value가 구해지면 디코더의 현재 시점의 t의 hidden state St와 결합(Concatenate)하여 하나의 벡터로 만든다.

이 벡터를 디코더의 출력 단어 예측 연산의 입력으로 사용하여 예측을 더 정확하게 할 수 있다.

 

tanh 적용

Attention Value와 hidden state St와 결합한 벡터를 출력층으로 보내기전에 가중치 행렬 Wc와 곱한 후에 tanh 함수를 적용하고, 이 값을 출력층의 입력값이 된다.

 

비선형 함수인 tanh를 적용함으로써 학습을 더 깊게 할 수 있다.

 

 

 

'Python > DL' 카테고리의 다른 글

[NLP] BERT  (0) 2022.10.07
[NLP] Transformer  (0) 2022.10.07
[NLP] Long Short-Term Memory (LSTM)  (1) 2022.10.06
[NLP] RNN (Recurrent Neural Network)  (0) 2022.10.06
[NLP] CNN 기반 텍스트 분류  (0) 2022.10.06