-
Notifications
You must be signed in to change notification settings - Fork 23
Show Attend and Tell
이 글을 오후 4시 16분 신촌에서 작성하기 시작했습니다... 오후 3시 무렵부터 논문을 읽기 시작해서 한 시간 남짓 되는 시간 동안 작성한 글이니 아마 문맥도 어색하고, 군데군데 빵꾸가 나있을 가능성이 많고, (아니 빵꾸가 나있을 거고,) 제대로 설명하지 못한 부분도 많을 것 같아요.... 넓은 아량으로 이해해주시면 감사하겠습니다....
사진을 보고 그 사진에 대한 적절한 문장을 만들어내는 것은 아주 고전적인 문제죠. 이를 위해서는 사진에 어떤 물체가 있는지 찾아내는 것을 넘어, 물체와 물체 사이의 관계를 자연어로 표현할 수도 있어야합니다. 즉 단순한 detect + 단순한 generation의 문제는 아닌 것이죠. 여러 가지 시도들이 있어 왔습니다. Show and Tell이라든지.. 이러한 시도들처럼 Encoder-Decoder의 느낌의 구조는 가져가면서 새로운 방법을 추가했습니다. 그게 바로 attention이구요.
사람이 이미지를 보고 적절한 문장을 만들어낸다고 해봅시다. 과연 사람이 이미지의 모든 부분을 동일하게 중요하다고 인식할까요? 그러니까 새가 날아가는 사진이 있다고 했을 때, 새와 주위 배경 모두 똑같이 중요하다고 생각할까요? 아니겠죠. 중요한 것은 "새"이지 주변의 하늘이나 구름이 아닙니다. 따라서 아마 사람은 "새"에 주목을 할 것입니다. 이러한 관점에서 생각해본다면 이미지에서 특징을 뽑아낸 다음 중요한 부분만을 뽑아내는 attention을 적용하는 것이 합리적으로 보입니다. 실제로 이를 적용했더니 겨과가 더 좋아지기도 했구요. 단순한 Attentoin을 넘어 이 논문에서는 hard attention과 soft attention, 두 가지의 attention을 제안합니다.
그전에 간단하게 모델의 구조부터 짚고 넘어갑시다. 기본적으로 이미지에서 특징을 뽑아내는 Encoder와 이렇게 뽑아낸 특징에서 문장을 생성하는 Decoder로 구분할 수 있습니다. Encoder는 이미지 하나를 받아
입니다. 따라서 CNN을 사용할 때 FC를 사용하지 않고 작은 Conv layer를 사용했다고 하네요.
Decoder의 경우에는 LSTM을 사용합니다. 이전에 출력한 단어, 이전의 hidden state, 그리고 context vector
$$\mathbf{e}{ti} = f{att}(\mathbf{a}i, \mathbf{h}{t-1})$$
이고, $$z_t = \phi( {\mathbf{a}i}, {\alpha_i})$$라고 나타냅니다. $$\alpha$$는 softmax를 취한 것이므로 $\sum \alpha$는 1이 될 것입니다. 결국 여기서 핵심이 되는 것은 $f{att}$과
(여기서부터는 거의 이해를 하지 못했습니다) Hard Attention은 별도의 Sampling을 통해서 Attention을 뽑아내는 것이고, Smoft Attention은 이러한 Sampling 과정을 근사?하여 End-to-End, 즉 일반적인 Back prop이 가능하게 만들어준 것이라 합니다.
먼저 Hard Attention에 대해서 알아봅시다. 우리가 뽑아내고 싶은 것은 Attention, 즉 인코딩된 이미지 벡터에서 어느 부분에 초점을 맞춰야하는가입니다. 이를
이때 우리의 목표는, 주어진
Hard Attention의 경우, 일일이 샘플링을 해줘야한다는 문제가 존재합니다. 따라서 이를 일반적인 back prop으로 End-to-End 학습을 가능하게 하기 위해 Soft Attention을 제안합니다. Soft Attention의 경우
했더니 좋더라...
후반의 Attention부분은 이 글을 많이 참조했습니다...