일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 딥러닝
- Numpy data I/O
- namedtuple
- seaborn
- Operation function
- Python 유래
- 정규분포 MLE
- VSCode
- Python
- Numpy
- BOXPLOT
- 가능도
- Comparisons
- ndarray
- python 문법
- unstack
- 표집분포
- boolean & fancy index
- 최대가능도 추정법
- subplot
- 카테고리분포 MLE
- type hints
- pivot table
- dtype
- groupby
- linalg
- Python 특징
- Array operations
- scatter
- 부스트캠프 AI테크
- Today
- Total
또르르's 개발 Story
[18] Sequence to Sequence with Attention 본문
1️⃣ Seq2Seq Model
Sequence to Sequence model은 sequence of words가 입력으로 들어오고, sequence of words가 출력으로 나가는 구조입니다. 즉, 입력은 word 단위의 문장, 출력도 word 단위의 문장입니다.
Sequence to Sequence는 입력과 출력 간의 delay가 존재하는 RNN의 many to many 방식입니다.
many to many 방식에는 챗봇 (Dialogue system), 번역 등이 있습니다.
seq2seq model은 Encoder and Decoder 구조로 되어 있습니다.
Encoder와 Decoder은 각각의 Rnn 모델을 가집니다. (not shared = 독립적인 모델)
Encoder의 마지막 timestep vector는 hidden state vector가 됩니다.(주황색 부분)
hidden state vector은 decoder의 $h_{0}$ vector 역할을 하게 됩니다.
가장 처음에 decoder에 <start token> = <SOS>를 넣어줌으로써 첫 번째 문자를 예측합니다.
그리고 마지막 <end token> =<EOS>를 출력함으로써 더이상 문자를 예측하지 않습니다.
하지만 encoder와 decoder 사이의 $h_{0}$ vector는 문장의 길이가 길어짐에 따라 $h_{0}$ vector에 수많은 정보를 압축해야 하고 멀리 있는 정보는 사라질 수밖에 없습니다.
2️⃣ Seq2Seq Model with Attention
Attention 모델의 가장 큰 아이디어는,
encoder에서 나오는 각각의 $h^{e}_{1}, h^{e}_{2}, ...., h^{e}_{n}$ hidden state vector (encoder outputs)들 전체적으로 decoder에 제공해주는 것입니다. 즉, decoder는 각 timestep에서 단어를 생성할 때 필요한 encoder hidden state를 선별적으로 가지고 와 예측에 활용하는 방법입니다.
Attention 모델에서는 Encoder에서 나온 각각의 $h^{e}_{1}, h^{e}_{2}, ...., h^{e}_{n}$ hidden state vector들을 산출합니다. 이후, decoder에서 처음 나온 $h^{d}_{1}$ vector는 $h^{e}_{1}, h^{e}_{2}, ...., h^{e}_{n}$ 벡터들과 내적을 하게 되고(파란색 화살표), Attention Scores는 $h^{d}_{1}$와 $h^{e}_{1}, h^{e}_{2}, h^{e}_{3}, h^{e}_{4}$ 벡터 간 (내적에 기반한) 유사도라고 할 수 있습니다.
Softmax 함수를 통과시키면 Attention distribution이 나오게 되고, distribution을 통해 Attention output (가중평균)을 구할 수 있습니다.
그런 후에 Decoder의 hidden state vector $h^{d}_{0}$과 context vector인 attention output vector를 concat시켜 다음에 나올 word를 예측합니다.
Backpropagation에서도 attention distribution에서 원하는 정보가 적절히 선택될 수 있도록 attention scores에서 $h^{e}_{n}$으로 정보를 보내는 학습과정(보라색 화살표)이 진행됩니다.
Attention에서 학습 초기에 decoder에서 잘못된 정답을 뽑아 다음 step의 입력으로 넣어줄 수 있으므로, 다음 step에서는 올바른 ground truth를 입력으로 넣어주는 방식을 사용하게 됩니다. 이러한 방식을 Teacher forcing이라고 합니다.
Teacher forcing을 사용하면 학습이 빠르게 진행되는 장점을 가지지만, 실제 상황에서 사용하는 환경과는 괴리를 가질 수 있습니다. 그래서 teacher forcing을 적절히 사용하는 방식도 존재합니다. 초반에는 teacher forcing을 사용하다가 학습이 어느 정도 수행된 후에는 실제 상황과 비슷한 환경을 주어서 (teacher forcing을 사용하지 않고) 학습을 시키는 방법을 사용합니다.
3️⃣ Different Attention mechanisms
Attention score를 계산하는 Attention mechanism에는 단지 내적만 있는 것이 아닌 다양한 mechanism들이 존재합니다.
$score (h_{t}, \bar {h_{t}})$에서 $h_t$는 각 decoder의 hidden state vector, $\bar {h_{t}}$는 각 encoder의 hidden state vector를 나타냅니다.
$score (h_{t}, \bar {h_{t}})$를 계산하는 방법은 다음과 같습니다.
- 내적
- general dot product
(두개의 vector의 유사도를 구하기 위해 가운데에 학습 가능한 행렬을 둠으로써, 내적을 확장한 형태로 사용 가능) - concat
(";" 표시는 concat, 이후 선형 변환을 수행함)
(여기서 v_a는 행렬이 아닌 벡터인 이유는, 마지막 값을 scalar값으로 출력해야 하기 때문에 row vector 형태로 나옴)
4️⃣ Attention의 장점
- Neural Maching Translation 분야에서 성능을 뛰어나게 올려줌
Decoder의 매 timestep마다 어떤 정보를 활용해야 하는지를 알려주기 때문입니다. - Encoder의 bottleneck problem을 해결
$h_{0}$에 모든 정보가 몰리는 문제를 해결합니다. - Vanishing gradient problem 해결
Attention Scores를 통해 gradient를 업데이트할 수 있어, 새로운 path가 생성됩니다. - 흥미로운 해석 가능성을 제공
Decoder가 word를 생성하면서 어떤 단어에 집중을 했는지 해석할 수 있습니다.
'부스트캠프 AI 테크 U stage > 이론' 카테고리의 다른 글
[19] Transformer 이해하기 (2) (0) | 2021.02.18 |
---|---|
[18-1] Beam Search와 BLEU score (0) | 2021.02.17 |
[17] RNN, LSTM, GRU 정리 (2) (0) | 2021.02.16 |
[16] NLP 종류 / Bag-of-Words / Word Embedding (0) | 2021.02.15 |
[15] Generative Models (0) | 2021.02.05 |