오답노트
[NLP] Sequence-to-Sequence (seq2seq) 본문
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 문제점
- Context Vector에 모든 정보를 압축하므로 정보 소실이 일어난다.
- 따라서 긴 문장을 번역할 경우 성능이 하락한다.
- 기울기 소실(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 |