Seq2Seq + Attention 모델
- 2014년에 발표된 모델이지만 최근 10년 동안의 자연어 처리 연구 중에 가장 영향력이 컸던 3가지 중 하나로 뽑힘
- 기계번역, 문서 요약, 그리고 이미지 캡셔닝 등의 문제에서 아주 큰 성공을 거둔 딥러닝 모델
- 글자, 단어, 이미지의 feature 등의 아이템 시퀀스를 입력으로 받아 또 다른 아이템의 시퀀스를 출력한다.
Seq2Seq Model
- Seq2seq 모델은 하나의 encoder와 하나의 decoder로 이루어져 있습니다.
- encoder는 입력의 아이템을 처리하여 거기서 정보를 추출한 후 하나의 벡터(Context Vector)로 만들어 냅니다.
-
encoder는 context를 decoder에게 보내고 decoder는 출력할 아이템을 하나씩 선택합니다.
- encoder와 decoder는 둘 다 recurrent neural networks (RNN)을 이용하는 경우가 많습니다.
- 기계번역의 경우에는 context가 하나의 벡터의 형태로 전달됩니다.
- context는 float로 이루어진 하나의 벡터입니다.
- context 벡터의 크기는 원하는 값으로 설정할 수 있지만 보통 encoder RNN의 hidden unit 개수로 정합니다.
- Seq2seq 모델 디자인을 보게 되면 하나의 RNN은 한 타임 스텝마다 두 개의 입력을 받습니다.
- 하나는 sequence의 한 아이템이고 다른 하나는 그전 스텝에서의 RNN의 hidden state입니다.
- 두 입력들은 RNN에 들어가기 전에 꼭 vector로 변환되어야 합니다.
- 하나의 단어를 벡터로 바꾸기 위해서 우리는 "word embedding"이라는 기법을 이용합니다.
- 이 기법을 통해 단어들은 벡터 공간에 투영되고, 그 공간에서 우리는 단어 간 다양한 의미와 관련된 정보들을 알아낼 수 있습니다.
encoder와 decoder 모두 RNN이며, RNN은 한번 아이템을 처리할 때마다 새로 들어온 아이템을 이용해 그의 hidden state를 업데이트합니다. hidden state는 그에 따라 encoder가 보는 입력 시퀀스 내의 모든 단어에 대한 정보를 담게 됩니다. 마지막 단어의 Encoder hidden state가 바로 우리가 decoder에게 넘겨주는 context입니다.
Problem : Input sequence bottlenecked through fixed-sized vector.
Idea : Use new context vector at each step of decoder!
Attention
연구를 통해 context가 이런 seq2seq 모델의 가장 큰 걸림돌인 것으로 밝혀졌습니다.
기존 Seq2seq 문제점 : 하나의 고정된 벡터로 전체의 맥락을 나타내는 방법은 특히 긴 문장을 처리하기 어렵게 만들었습니다. (문장이 길어질 수록 먼저 들어왔던 Item들에 대한 정보가 희미해진다.)
이 문제점에 대한 해결 방법으로 제시된 것이 "Attention"
: 디코딩 과정에서 현재 스텝에서 가장 관련된 입력 파트에 집중할 수 있게 해줌.
그렇다면 기존 Seq2seq와 attention 모델의 차이점은?
- 첫번째로 encoder가 decoder에게 넘겨주는 데이터의 양이 attention 모델에서 훨씬 더 많다는 점입니다. attention모델에서는 모든 스텝의 hidden states를 decoder에게 넘겨줍니다.
- 두번째로는 attention 모델의 decoder가 출력을 생성할 때에 현재 스텝에서 관련 있는 입력을 찾아내기 위한 추가 과정을 거칩니다. encoder에서 받은 전체 hidden states를 보고 각 스텝의 hidden state마다 점수를 매기고 softmax를 계산하여 해당 hidden state에 곱해서 더합니다.
위와 같이 점수를 매기는 과정은 decoder가 단어를 생성하는 매 스텝마다 반복됩니다.
attention의 전체적인 작동과정
1. attention 모델에서의 decoder RN은 <END>와 추가로 initial decoder hidden state를 입력받습니다.
2. decoder RNN은 두 개의 입력을 가지고 새로운 hidden state 벡터를 출력합니다(h4).
3. Attention 과정 : encoder의 hidden state 모음(고정인가?)과 decoder의 hidden state h4벡터를 이용하여 그 스텝에 해당하는 context 벡터 (C4)를 계산합니다.
4. h4와 C4를 하나의 벡터로 concatenate 합니다.
5. 이 벡터를 feedforward 신경망(seq2seq 모델 내에서 함께 학습되는 layer)에 통과시킵니다.
6. feedforward 신경망에서 나오는 출력은 현재 타임 스텝의 출력 단어를 나타냅니다.
7. 이 과정을 다음 타임 스텝에서도 반복합니다.
attention을 이용하면 각 decoding 스텝에서 입력 문장에서 어떤 부분을 집중하고 있는지에 대해 볼 수 있습니다.
Image Captioning with RNNs and Attention
: 어떤 이미지가 들어왔을 때, 이것을 설명하는 문장을 만들어 내는 것
CNN으로 이미지를 읽어내고, RNN으로 문장을 만들어내는 과정을 거쳐야 한다.
- 일반적인 Machine Translation model의 Encoder RNN의 역할을 CNN에게 맡기는 것입니다.
- 그래서 Language Model이라는 것은 이전 단어들이 주어졌을 때 다음 단어의 확률 분포와 같습니다. 아래 예시를 보면 "cat sat on mat"이라는 문장에 대해서 LSTM이 출력하는 것들이 결국에는 이전 단어들이 나왔을 때, 해당 단어가 나올 조건부 확률임을 확인할 수 있습니다.
이러한 아이디어로, Pretrained CNN Model을 가져오고, Fully conn에 RNN을 이어붙여 만든 Show and Tell 논문도 있습니다.
Attention이 추가된 Show, Attend and Tell이라는 논문도 있습니다.
여기서는 내가 지금 주어진 이미지 안에서 어느 영역을 보고 지금 단어를 만들지에 대한 것입니다. 위 자료처럼, 물 위를 나는 새라는 이미지가 있으면 A bird라는 단어를 위해 사진 속 새에 집중하고, water이라는 단어를 위해 사진 속 수면을 집중하는 것입니다.
두 논문의 구조적인 차이는, 전자는 CNN의 fully conn 출력을 LSTM에 넣었던 것에 비해, 후자는 CNN의 Conv feature map을 통해 Attention을 구현한 후 LSTM에 넣었다는 점입니다. Conv feature map을 사용함으로써 Spatial 한 정보를 잃지 않았던 것입니다.
Self-attention layer & Attention Layer
'Open Lecture Review > Deep Learning for Computer Vision' 카테고리의 다른 글
Lecture 19: Generative Models 1 (0) | 2022.02.18 |
---|---|
Lecture 14: Visualizing and Understanding (0) | 2022.02.18 |
Lec12_Recurrent Neural Networks (0) | 2022.02.14 |
Lecture 11_Training Neural Networks 2 (0) | 2022.02.13 |
Lec10_Training Neural Networks 1 (0) | 2022.02.07 |