Summary

img input에 대해 output으로 seq를 내놓는 task.

위와 같이 encoder 단에서 CNN을 사용하여 feature들을 추출하고, 이를 MLP 통과시켜 encoding.
이후 RNN을 사용하여 seq를 generation하는 패러다임.

Tip

Seq2Seq 관점에서 보자면, Seq2Seq의 encoder 부분을 CNN 으로 치환했다고 봐도 무방.

rough 하게 생각해보면, 만들어낼 seq에 ‘hat’, ‘person’처럼 targeting 하는 부분이 있다면, CNN 단에서 그 부분에 “집중” 하는 것이 더 좋을 것이라고 생각해볼 수 있다.

그러니 Attention이 들어가면 성능이 더 좋아질 수도 있지 않을까? 라고 생각해 볼 수 있는 포인트.

Warning

마찬가지로, bottle-neck 문제가 있다.
(Many-to-One) architecture를 따르다보니, input 정보를 하나의 context vector로 압축하는게 쉬운 일은 아니다.

또한, 기존 RNN 문제인 long-term dependency 문제 역시 존재.
Attention을 적용해보자!

Check

Attention : 모든 time step 마다 context vector를 생성.
→ 각 time-step 마다 context vector에 기여하는 img-region이 다르다!

  1. attention 수행하여 attention map 만들고,
  2. 이를 기존 Feature map이랑 element-wise mul 해준뒤,
  3. MLP 통과 시켜 context-vector 얻는다.
  4. 이를 RNN에 넣어서 seq generattion

그러면 첫 output은 다음과 같이 나오고,

이를 반복해서 다음 context vector는 아래처럼 만들어진다.

계속 반복해보면,

Note

  • Soft-Attention : input의 모든 부분에 대해 Weighted-Sum을 구하는 방식.
    • 모든 input region에 대해 0~1 사이 확률 값(attention score)를 부여하고, 이를 합쳐 context vector를 생성.
    • Differentiable하여 기존 Backpropagation을 통해 learnable.
    • input이 클 경우, cost-expensive
  • Hard-Attention: input 중 특정 영역을 sampling.
    • 확률 분오에 따라 특정 region을 하나 선택. 선택되지 않은 곳은 0으로 치환.
    • Non-differentiable.
    • 일반적 Backpropagation을 사용할 수 없어서, 강화학습의 REINFORCE(? 공부하자.) 같은 걸 사용한다.
    • inference 시, 연산 비용은 적을 수 있으나, 학습 과정이 까다롭고 variance가 클 수 있다고 한다.