안녕하세요, 이번 포스트에서는 제가 주로 연구했었던 Vision&Language 관련 논문을 리뷰해볼까 합니다.

일단 기본적으로, Vision & Language 연구이지만, RL을 이용하여 성능을 최대화 시켰다는 것에 좋은 평을 받아 oral 페이퍼가 되지 않았나 싶습니다.

다음과 같은 순서로 쉽게 풀어 설명해보겠습니다.

List

  • Vision & Language History 간략 리뷰
  • 이번 논문에 등장하는 RL 개념 이해하기
  • Sequence Generation 기초 개념 이해하기
  • 본 논문의 핵심 아이디어 및 학습 방법
  • 결과

 

Vision & Language History 간략 리뷰

 

그림1.png
CNN+RNN Image Captioning 모델[1]

 

사실 Vision & Language 가 매우 큰 관심을 불러 일으킨지 얼마되지 않았습니다.

이 논문 [1]에서 두가지 태스크를 수행했는데 하나는 Image-Text align이고, 하나는 Image Captioning이었습니다. 뒤에 또 align 관련 내용도 나오게 되는데 정말이지 유명해지지 않을 수 없는 페이퍼 인것 같습니다. 일단 기본적으로 이 paper 전후로 나온 Image Captioning 모델들은 여기서 제안한 framework에서 크게 벗어나지 않습니다.

이미 train 된 CNN 에 image를 넣고 나온 CNN feature를 RNN의 첫번째 hidden state의 인풋으로 주고, caption을 생성해 나가는 구조입니다. CNN feature는 FC7 layer 4096-dim의 벡터를 사용합니다. CNN model은 VGGNet을 사용합니다.

 

그림2.png
CNN+LSTM Image Captioning 모델 [2]
그 다음은 google 에서 나온 논문[2]인데요,  InceptionNet을 사용하고(심지어 fine tuning 도 합니다), LSTM을 사용하여 성능을 끌어 올렸습니다. 또 CNN feature를 LSTM gate에 추가해주어, 매 단어를 생성할때마다 이미지 정보를 참조 할 수 있게 끔 하였습니다.

그림3.png
CNN+LSTM+Attention Image Captioning 모델 [3]
이 논문[3]은 Attention을 Image Captioning task에 적용한 논문입니다. ‘Pooling 된 CNN feature를 넣어 주지 말고 Conv 맵에서 그때 그때 보고싶은 곳을 집중해서 볼 수 있게 하면 더 좋지 않을까?’하는 아이디어에서 나온 논문입니다. 매 단어를 생성할때마다, Conv map에 attention(spatial attention)을 줘서 단어를 생성할 때마다 보고 싶은곳을 집중해서 보며 단어를 생성해냅니다.

그림5.png
특정 단어를 생성할때의 attention map 결과 [3]
결과물을 보시면 감이 오실텐데, 왼쪽 상단 첫번째 그림을 보시면 frisbee를 생성할 때 frisbee에 해당하는 이미지의 영역을 더 집중해서 본다는 걸 알 수 있습니다. (물론 결과는 attention의 probability를 이용해서 시각화 한 것이고 이런 사진 자체를 보는것이 아니라, 그 부분에 해당하는 feature를 본것이지만 모델입장에서는 이 부분을 집중해서 보는것이지요. ) 그래서 ‘모델을 설계할때 의도한 대로 굉장히 잘 보는구나’ 라고 생각하실 수 있는데요, 한 가지 함정이 있습니다.

그림6.png
각각의 단어를 생성할때의 attention map 결과 (위는 soft attention 아래는 hard attention) [3]
과연 잘보는게 맞는지 의문이 들기도 하고, 쓸데없이 ‘the’ 같은 단어를 생성할때도 어딘가를 봐야만 한다는 치명적인 단점이 있습니다. 이 사진에 대해 간단히 부연 설명을 하자면, 위는 soft attention 이구요 (softmax로 계산한) 밑은 hard attention(한곳을 1.0의 확률로 보고 나머진 0의 확률로 보는경우)입니다. Hard attention은 완전히 이상한 결과를 보여줍니다. 그런데 자세히보면 soft attention도 “새”일 때 혹은 “새”가 아닐때 를 제외하면 썩 좋은결과라고 보긴 힘듭니다.무튼 여기까지가, Image  Captioning에 대한 간략한 history 리뷰였습니다.

 

이번 논문[6]에 등장하는 RL 개념 이해하기

 

스크린샷 2017-06-14 오후 5.17.04.png
Value/Policy vs Actor-Critic

 

먼저 살펴볼 개념은 value based, policy based 그리고 actor-critic method에 관련된 내용입니다. 위 그림을 자세히 살펴보면 차이를 알 수 있습니다. 먼저 value based RL은 value function을 배우는 방법인데요, 현재 state가 얼마나 좋은 state 인지를 배우는 방법론입니다. 다음 state로 나아가기 위해선 value function을 기준으로 주어진 state에서 가장 좋은 action을 취하는 방식으로 동작합니다. 가장 좋은 action이란, 현재 state에서 취할 수 있는 action들이 있으면 그 중에서 어떤 action을 취했을때 가장 value 값이 크게 나오는지에 따라 결정을 내립니다.  \arg\max_{s}(V(s)) 이지요. 결론은 agent(행위의 주체)가 좋은 state를 선택하여 좋은 state로 나아갈 수 있게 끔 학습된다고 보시면 됩니다.

Policy based RL은 policy를 배우는 방법인데, 주어진  state 에서 어떤 action이 가장 좋은지를 배우는 방법입니다. state가 주어지면 선택할 수 있는 action들에 대해 좋은 action이면 높은 확률로 선택하게 끔 학습이 됩니다. Sampling으로 생각을 해보면, 더 자주 좋은 action을 선택하게 되겠지요. Value based와 달리 ‘현재 상태가 얼마나 좋은지’보다 ‘주어진 상태에서 어떻게 잘 선택해야지 reward 를 많이 받을 수 있을까’를 배운다고 보면 됩니다. 물론 두 가지 경우 모두, 결국엔 잘 배우고 많이 sampling을 하게 되면 optimum을 찾을 수 있습니다. 같은 state 에서 좋은 action이라는 것이 곧 좋은 state로 가게 끔 만들어 주기 때문입니다. 그런데 training 의 양상이 다르고, 지향하는 것도 다르다는 것입니다.

Actor-Critic은 이 두 가지 방법을 혼합시켜, 많은 경우에 훨씬 더 안정적으로 training 할 수 있는 방법론이라고 보시면 됩니다. 핵심은 value 와 policy를 둘 다 배우는 것입니다. Policy 를 update 하는 term에 value function을 넣어주어, policy를 업데이트하고, value network는 별도로 업데이트 해주는 방식으로 동작합니다.

스크린샷 2017-06-14 오후 5.36.56.png스크린샷 2017-06-14 오후 5.36.49.png스크린샷 2017-06-14 오후 5.37.04.png

각각의 특징을 위 세개의 그림[4]으로 표현해보았습니다. 왼쪽에서 부터 value based, policy based, actor-critic 각각 어디에 초점을 두고 학습되는 것인지를 표현해 본것입니다. Value based의 경우는 현재 state 가 얼마나 좋은지를 알아야하기 때문에, 좀 더 미래지향적이라고 할 수 있습니다. 미래를 보고, 현재의 상태가 얼마나 좋은 상태인지를 예측하는 것입니다. 물론 미래지향적이라도 현재를 보기는 합니다.  그에 반해 policy based의 경우는 현재 state 에서 어떤 action이 좋은지를 위주로 보기때문에, 좀 더 현재 상태를 중요시한다고 생각할 수 있습니다. 물론 마찬가지로 미래를 보기는 해야겠지요. 마지막으로 actor-critic은 두 가지를 동시에 고려한다고 할 수 있겠습니다.

여기까지 actor-critic을 살펴봤는데, 한 가지 더 알아야 할 것이 남아있습니다.

스크린샷 2017-06-14 오후 5.47.34.png

Model based RL 과 model free RL에 대한 내용입니다.  일반적인 RL은 environment와 상호작용을 합니다. Agent가 어떤 action을 하게되면, environment에 따라 다음 state 로 옮겨지고, agent한테 reward를 전달해줍니다. 그런데 이것이 어려운 경우가 있거나, 혹은 성능에 악영향을 미치는 경우가 있습니다. 예를 들어 로봇을 훈련 시킨다면, 실제 environment 에서 동작을 시켜보고 reward를 받게 되면 너무 느려집니다. 뿐만 아니라 reward를 정확히 define 하기 어렵거나, 성능이 떨어지는 경우도 있을 수 있습니다. 그래서 model based RL은 environment대신 model이 agent에게 reward를 주게 됩니다.  간단하게 생각하면 state와 action이 주어졌을때 실제로 움직이지 않아도 바로 reward가 계산될 수 있으면 model based RL인 겁니다.  Neural Net일수도 있고, 굉장히 간단한 모델일 수도 있습니다. 이번 논문[6]에서처럼 Neural net일 경우는 agent가 좋은 결과로 나아갈 때 혹은 도달했을 때 적합한 reward를 줄 수 있게끔 training 을 따로 시켜야 합니다. Training이 다 되면, model에 현재 state와 action을 input으로 주고 reward를 받을 수 있게 됩니다. Agent(value/policy network)와 함께 training 하게 되면 불안정해질 수 있으니 agent와 따로 training을 시키게됩니다. Model이 training 다 되면 model 의 parameter는 고정된채로 agent를 학습시킵니다.

RL의 기초적인 개념들을 다 살펴보았는데요. 이제 sequence generation 의 기초개념을 살펴볼겁니다.

Sequence Generation 기초 개념 이해하기

그림7.png

하나의 sequence의 생성 확률을 생각해봅시다. 그 확률은 chain rule에 따라 위 식과 같이 풀어 쓸 수 있게 됩니다. 이렇게 모든 경우에 대해 계산을 해주고 가장 best sequence 를 뽑아내면 이상적인데요, 이게 불가능합니다. Sequence length가 10이어도  \#word^{10}  의 경우의 수가 나오기 때문입니다.

그림8.png

그래서 위 식과 같이 굉장히 greedy 하게 probability가 가장 높은 단어를 즉 매번 argmax를 취해 선택할 수 있습니다.

그림1.png
Beam search [5]
 조금만 더 발전시키면 global optimum 에 더 가까운 seqeunce를 찾을 수 있습니다. Search space를 넓히는 것이 기본 아이디어입니다. 모든 경우에 대해 조합 해보는 것이 아니라, Bucket을 만들고 이 bucket안에 들어가는 seqeunce에 대해서만 모든 조합을 해보는 겁니다. 예를 들면 Bucket size가 10이라고 가정해봅시다. 그럼 seqeunce 10개에 대해 나올 수 경우의 수는 \#word * 10 이 됩니다. 여기서 상위 10개를 추려 bucket을 업데이트합니다. 이 과정을 반복하면 bucket에는 항상 10개의 seqeunce가 들어있고, argmax에 비하면 굉장히 다양한 seqeuence 조합을 해볼 수 있게 됩니다. Bucket의 size가 클수록 global optimum을 찾을 확률이 올라가고 속도는 느려지게 됩니다.

본 논문의 핵심 아이디어 및 학습 방법

그림1.png
Model framework [6]
이제 본격적으로 논문[6] 내용을 살펴볼겁니다. 앞서 설명했던 개념들이 그대로 적용되어 있어서 금방 볼 수 있습니다. 먼저framework은 actor-critic  그리고 model based RL 입니다.

그림1.png
Policy network [6]
먼저 policy network은 policy CNN에 image를 통과시키고, policy RNN에 넣어 단어(action)가 나올 probability를 생성해주는 뭉텅이를 지칭합니다. 사실 이 부분만 가지고 supervised training을 한다면 기존의 가장 단순한 image captioning framework[1]과 똑같습니다.

그림1.png
Policy network equation [6]
수식으로 봐도 image captioning framework[1]와 똑같습니다.

그림2.png
Value network [6]
허나 이 논문[6]에서는 value function도 모델링합니다. policy 와는 구조가 다르게 생겼습니다. Image 뿐만 아니라 현재까지 생성했던 caption(state)까지도 input으로 넣어주고 점수 output으로 내는 모델로 구성했습니다. Value function은 현재 state 가 얼마나 좋은지를 판단하여 value를 estimate하는 것이 목적이기 때문에 이렇게 구성하였습니다.

이제 policy 그리고 value network를 training 하기 위해, reward를 define 해야합니다. Model based이기 때문에 model이 reward를 줄 수 있어야하합니다. 이제 이런 model을 어떻게 만드는지를 살펴볼 것 입니다.

스크린샷 2017-06-15 오후 1.51.55.png
Image – Text align model [1]
앞서 말해드렸던 대로 가장 처음에 소개시켜드렸던 논문[1]이 다시 등장했습니다. 기본적으로 task는 image 와 text(caption)의 상관관계를 측정하는 task입니다. Image 와 관련성이 크면 높은 score를, 작으면 낮은 score를 도출 할 수 있게끔 model을 traning 시켜야합니다. Karpathy는 이 논문에서[1] 위와 같은 model을 만들고 max margin loss 를 이용해서 training을 시킵니다. 오른쪽 loss term을 보시면, S_{kl}   이 있고, S_{kk}  가 있는데요, 각각 aligned pair가 아닌 경우와 aligned pair의 경우를 나타냅니다. Aligned pair인 경우는 image와 caption이 정확하게 일치하는 경우이기 때문에 score가 커져야합니다. 그래서 부호가 음수가 붙어있습니다. loss 를 줄이기위해선 커져야 하는 term이 되는 겁니다. 이와 반대로 aligned pair가 아닌 경우는 부호가 양수 즉 score가 작아지게 끔 training 됩니다.

스크린샷 2017-06-15 오후 3.57.21.png
Visual semantic embedding margin max loss [6]
이 논문[6]에서도 image 와 caption이 얼마나 잘 어울리는지를 알아야 적합한 reward를 줄 수 있기 때문에 아주 유사한 loss function을 정의해 training 합니다. CNN에 넣은 feature 벡터와, caption RNN의 마지막 hidden state를 dot product한 similarity 를 score라고 놓고 margin max loss 를 define한 겁니다. Image 의 CNN feature와 caption을 RNN에 넣었을 때의 마지막 hidden state를 가지고 aligned pair와 아닌 경우의 차이를 극대화 시킬 수 있습니다.

그림1.png
Reward [6]
학습을 다 마치면, dot product가 normalized된 형태 즉 cosine similarity로 reward를 계산해서, reward가 최대 1이 되도록 만들어줍니다.

Reward를 정의했으니, policy network와 value network을 training 해야합니다.  근데 바로 actor-critic method에서 사용하는 loss term으로 training 을 하기는 힘듭니다. 불안정적이고, training 자체도 잘 안됩니다. 단어를 어떻게 생성해야 좋은지 전혀 모르기 때문입니다. 그래서 2 step 으로 나누어 training을 하게 됩니다.

스크린샷 2017-06-15 오후 4.43.00.png
First step policy-value training loss[6]
First step은 단어를 잘 생성하는 법 그리고 현재 state 가 얼마나 좋은지 대충 감을 익혀보는 단계라고 할 수 있습니다. Policy의 loss term을 단순한 supervised learning 하듯이 cross entropy loss 로 주어서 다음단어만 잘맞추면 되게끔 학습을 시킵니다. 단순한 image captioning [1]과 똑같이 하는 것입니다. Value network는 현재 state가 얼마나 좋은지를 예측해야하기 때문에 reward와의 L2 loss로 정의해주면 됩니다. (Advanced – 추가로 이 연구에서는 중간에 받는 reward는 없고 final reward가 0 or 1입니다. 즉 ‘the’ 만 나와도 reward 가 1일수 있습니다. 문장들을 생성하면서, 나온 중간 단계를 caption(state)들을 random하게 선택하고, [이미 끝까지 생성된 문장들이니 정답을 맞췄는지 틀렸는지 알 수 있습니다.] 맞췄으면 r=1 로 loss를 계산하고 아니면 r=0으로 주고 loss를 계산합니다. 이때 state 를 random하게 뽑아서 state간의 correlation을 낮추는 것이 중요하다고 합니다.)

스크린샷 2017-06-15 오후 4.59.58.png
Second step policy-value training loss[6]
Second step에서는 드디어 RL 을 하게 됩니다. Policy와 value network의 loss를 각각 define하는데, 보시다 싶이 policy loss term에 value function이 들어가 있습니다. 서로 상호 작용하면서 training이 될 수 있게 됩니다. 논문[6]에 수식이 어떻게 도출되었는지 설명이 없었지만, 이 기회에 설명을 해보겠습니다.

스크린샷 2017-06-15 오후 5.18.48.png
Expectation of reward maximization [7]
Policy network가 해야하는 일은 agent가 받을 reward의 expectation 을 최대화하는 것입니다. 그렇기 때문에 expectation 을 미분해 gradient 를 구하는데, 풀어써 보면, 맨 마지막 식을 도출할 수 있게됩니다. 아직 완벽히 일치하지 않는데요, loss term에 baseline function을 빼주어 variance를 낮추게 되면 완벽히 똑같은 식을 도출 할 수 있습니다.

스크린샷 2017-06-15 오후 5.27.22.png
Baseline function [7]
Baseline function은 위 Expectation of reward maximization term에 더하거나 빼주어도 mean 값에 차이를 주지 못하는 function을 뜻합니다. 위 수식을 보시면 state dependent한 어떤 function이 있으면, 평균값은 어떤 function이던지 0이 됩니다.  Baseline function을 value function으로 놓으면 이 역시 성립할 뿐만 아니라, variance가 줄어 학습이 잘된다고 증명되었습니다. 그래서 이 논문[6]에서도 value function을 baseline function으로 놓고 푼 것입니다.

스크린샷 2017-06-15 오후 4.59.58.png
Second step policy-value training loss[6]
이제 위 policy network의 loss term이 어떻게 도출되었는지를 알게되었고, value network의 loss term을 도출해야하는데 아주 간단합니다. Reward와의 L2 loss 를 미분해주면 바로 구할 수 있습니다.

이 loss를 가지고 policy 와 value network를 fine tuning 시키면, 최종 학습모델이 나오게됩니다. 근데 이 모델을 가지고 어떻게 inference해야하는지를 알아야 최종적으로 caption을 generate 할 수 있습니다.

앞서 언급했던 beam search 개념을 잘 생각해보시고 다음 수식을 보시면 이해가 수월하실 겁니다.

스크린샷 2017-06-15 오후 5.38.18.png
Beam search with policy and value network [6]
단순한 Beam search는 다음 단어를 조합해서 best sequence로 나아갈때 probability만을 기준으로 삼습니다. 하지만 이 논문[6]에서는 probability를 담당하는 policy network외에도 caption의 quality가 얼마나 좋은지를 알려줄 수 있는 value network이 있습니다. Actor-critic을 설명할때 말씀 드렸다싶이,  policy는 단순히 다음단어를 잘 예측하는 short term 이라고 볼 수 있고, value는 다음 단어를 조합한 caption이 얼마나 좋을지를 알려주기 때문에 long term이라고 볼 수 있습니다. 그렇기 때문에 이 두가지를 모두 고려해 score를 define하고 이걸 기준으로 beam search를 하게되면 일반 beam search보다 훨씬 더 높은 확률로 global optimum을 찾을 수 있을것이라 기대할 수 있습니다.

결과

그림1.png
Performance – Other’s baselines [6]
성능은 BLEU-1 을 제외한 나머지 모든 metric에서 state-of-the-art 를 찍었습니다.

그림1.png
Performance – Our’s baselines [6]
각 구성들이 얼마나 성능에 영향을 미쳤는지 분석해주었습니다. 그중 가장 영향을 많이 미친 요인은 value network의 유무입니다.

스크린샷 2017-06-15 오후 7.59.21.png
Examples [6]
결과물들을 보시면 좀 더 detail한 내용을 담고 있는 caption들이 많이 생성됨을 볼 수 있습니다.

 

 

[1] Deep Visual-Semantic Alignments for Generating Image Descriptions, CVPR 2015, Karpathy

[2] Show and Tell: A Neural Image Caption Generator, CVPR 2015, Vinyals

[3] Show, Attend and Tell: Neural Image Caption Generation with Visual Attention, ICML 2015, Xu

[4] https://kr.pinterest.com/pin/325103666832692392/

[5] A stochastic beam search for the berth allocation problem, DSS 2007, Wang

[6] Deep Reinforcement Learning-based Image Captioning with Embedding Reward, CVPR 2017, Ren

[7] Policy Gradient, lecture note 7, Silver

Posted by:Cesc Chunseong Park

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s