draft

value based RL : 현재 state가 얼마나 좋은 state인지를 학습. 주어진 state에서 가장 큰 value값이 나오는 action을 취하는 방식(argmax). 미래 지향적. 현재를 보기 힘듬. policy based RL : 주어진 state에서 어떤 action이 가장 좋은지를 학습. 주어진 state에서 선택할 수 있는 action들에 대해 좋은 action일수록 더 높은 확률로 선택되게끔 하는 방식.(sampling) 현재 지향적. 미래를 보기 힘듬. Actor-critic RL : 두 가지 방법을 혼합하여 value와 policy를 둘 다 학습. policy를 update하는 term에 value function을 넣어주어서 업데이트하고, value network는 별도로 업데이트한다. 두가지를 동시에 고려.

Model free RL vs. Model based RL typical RL의 경우 agent가 action을 하면, environment에 따라 다음 state로 옮겨지고, agent한테 reward를 준다. 하지만 reward를 정확히 define하기 어렵거나 로봇의 경우에는 실제 환경에서 학습하기 어려울 수 있다. 따라서 model based RL은 environment 대신 model이 agent에게 reward를 준다. 간단히 생각하면 state와 action이 주어졌을 때 실제로 움직이지 않아도 바로 reward를 계산할 수 있으면 model based RL인것이다. 이 모델이 neural net일수도 있고, 간단한 모델일수도 있다. 논문의 경우처럼 neural net인 경우, agent가 좋은 결과로 나아갈 때 혹은 도달했을 때 적합한 reward를 줄 수 있게끔 별도로 training 시켜야 한다. training이 다 되면 model에 현재 state와 action을 input으로 주고 reward를 output으로 받을 수 있게 된다. Agent와 함께 training하게 되면 불안정해질 수 있어서 agent와 별도로 training시켜야한다. Model이 모두 training되면 model의 parameter은 고정된채로 agent를 학습시킨다.

Sequence Generation (greedy vs. beam search) 하나의 sequence를 생성할 확률을 생각해보자. 그 확률은 chain rule에 따라 풀어쓸 수 있는데, 모든 경우에 대해 계산하고 가장 best sequence를 뽑아내면 이상적이지만 이것이 불가능하다. sequence length가 10이어도 #word^10의 경우의 수가 나오기 때문이다. 따라서 greedy한 approach를 적용하여 가장 높은 확률의 단어를 매번 argmax를 취해 선택할 수 있다.

이를 조금 더 발전시키면 global optimum에 가까운 sequence를 찾을 수 있는데, search space를 넓히는 것이 기본 아이디어이다. 모든 경우에 대해 조합해보는 것이 아니라, bucket을 만들고 이 bucket size안에 들어가는 sequence에 대해서만 모든 조합을 확인해보는 것이다. 가령, bucket size가 5이라고 할 때, seqeunce 5개에 대해 나올 수 있는 경우의 수는 #word^5가 된다. 여기서 상위 10개를 추려 bucket을 업데이트 한다. 이 과정을 반복하면 bucket에는 항상 10개의 sequence가 들어있고, argmax에 비해 굉장히 다양한 sequence 조합을 볼 수 있게된다. 이를 beam search라고 한다. bucket size가 클수록 global optimum에 가까워지지만 학습 속도가 느려지게 된다.

논문의 프레임워크는 actor-critic과 model-based RL이다. current state로 이미지와 sequence가 주어진다면, policy network는 다음에 올 단어(action)를 예측하고 value network는 그에 따른 reward를 예측하여 다음 action을 선택하게 된다. policy network는 policy CNN에 image를 통과시키고 policy RNN에 넣어 단어(action)가 나올 probability를 생성해주는 뭉텅이를 지칭한다. 여기까지는 기존 encoder-decoder 형태의 image captioning 프레임워크와 동일하다. 따라서 이 논문에서는 value network에 주목하자. image뿐만 아니라 현재까지 생성된 caption(state)까지도 input으로 넣어주고 점수(value)를 output으로 뽑아내는 모델이다. value function은 현재 state가 얼마나 좋은지를 판단하여 value를 estimate하는것이 목적이다.

이제 policy network과 value network을 학습시키기 위해 reward를 정의해야한다. model-based RL이기 때문에 model이 reward를 줄 수 있어야 한다. 이러한 모델을 어떻게 구성했는지를 살펴보자. 앞서 언급한 가장 basic한 image-captioning 논문[1]이 등장한다. image-captioning의 기본은 image와 text의 상관관계를 측정하는 것이다. 따라서 image와 관련성이 크면 높은 score를, 작으면 낮은 score를 도출할 수 있게끔 model을 구성해야 한다. [1]에서는 위와 같은 모델을 만들고 max margin loss을 이용해 학습시킨다. 오른쪽의 loss term을 보면 S_kl과 S_kk가 있는데, 이는 각각 aligned pair가 아닌 경우와 aligned pair의 경우를 가리킨다. aligned pair의 경우 image와 caption이 정확하게 일치하는 경우이기 때문에 score이 커져야한다. 그러므로 부호가 음수가 붙어있다. loss를 줄이기 위해선 커져야 하는 term이기 때문이다. 이와 반대로 aligned pair가 아닌 경우에는 부호가 양수, 즉, score이 작아지게끔 학습된다.

이 논문에서도 image와 caption이 얼마나 관련성이 높은지를 알아야 적합한 reward를 줄 수 있기 때문에 아주 유사한 loss function을 정의해 학습시킨다. CNN의 결과로 얻은 feature vector와 caption RNN의 마지막 hidden state를 dot product한 similarity를 score라고 놓고 max margin loss를 정의한다. image의 CNN feature과 caption을 RNN에 넣었을 때의 마지막 hidden state를 가지고 aligned pair와 아닌 경우의 차이를 극대화 시킬 수 있다. 학습을 모두 마치면 dot product가 정규화된 형태, 즉, cosine similarity로 reward를 계산해서 reward가 최대 1이 되도록 만들어준다. reward를 정의했으니 policy network과 value network를 학습시켜야 한다. 그러나 곧바로 actor-critic method에서 사용하는 loss term으로 학습하기는 힘들다. 불안정적이고 학습자체도 잘 되지 않는다. 단어를 어떻게 생성해야 좋은지 전혀 모르기 때문이다.

따라서 2 step으로 나누어 학습하게 된다. 1step은 단어를 잘 생성하는 법 그리고 현재 state가 얼마나 좋은지 대충 감을 익혀보는 단계라고 할 수 있다. Policy network의 loss term을 기존의 방식과 동일하게 cross-entropy loss로 주어서 단어를 잘 맞추게끔 학습을 시킨다. value network는 현재 state가 얼마나 좋은지를 예측해야하기 때문에 reward와 L2 loss로 정의해준다.

추가로 이 논문에서는 중간에 받는 reward는 없고 final reward가 0 또는 1이다. 즉 ‘the’만 나와도 reward가 1일 수 있다. 문장을 생성하면서 나온 중간 단계 (caption(state))들을 랜덤하게 선택하고 정답이면 r=1로 loss를 계산하고 아니라면 r=0으로 주고 loss를 계산한다. (이미 끝까지 문장이 생성되었으니 정답인지 아닌지를 알 수 있다.) 이 때 state를 랜덤하게 뽑아서 state간의 correlation을 낮추는 것이 중요하다고 한다.

2step에서는 드디어 RL을 하게 된다. Policy와 Value network의 loss를 각각 정의하는데, 보다시피 policy loss term에 value function이 들어간다. 이러면 서로 상호작용하면서 학습이 될 수 있다. policy network가 해야하는 일은 agent가 받을 reward의 expectation을 최대화하는 것이다. 때문에 expectation을 미분해 gradient를 구하는데 풀어써보면 마지막 식을 도출할 수 있다. 아직 완벽히 일치하지는 않는데, loss term에 baseline function을 빼주어 variance를 낮추게 되면 완벽히 똑같은 식이 도출된다.

baseline function은 위의 expectation of reward maximization term에 더하거나 빼주어도 mean값에 차이를 주지 못하는 function을 말한다. 위 수식을 보면 state dependent한 어떤 function이 있으면, 평균값은 어떤 function이던지 0이 된다. baseline function을 value function으로 놓으면 이 역시 성립할 뿐 아니라, variance가 줄어 학습이 잘된다고 증명되었다. 그래서 이 논문에서도 value function을 baseline function으로 놓고 푼 것이다.

이제 위 policy network의 loss term이 어떻게 도출되었는지를 알게되었고, value network의 loss term을 도출해야하는데 아주 간단하다. reward와의 L2 loss를 미분해주면 바로 구할 수 있다. 이 loss를 가지고 policy netwokr와 value network를 fine-tuning 시키면 최종 학습모델이 나오게 된다. 근데 이 모델을 가지고 어떻게 inference해야하는지를 알아야 최종적으로 caption을 생성할 수 있는 모델이 된다. 앞서 언급한 beam search 개념을 잘 생각해보고 다음 수식을 확인해보자.

단순한 beam search는 다음 단어를 조합해서 best seqeunce로 나아갈 때 probability만을 기준으로 삼는다. 하지만 이 논문에서는 probability를 담당하는 policy network 외에도 caption의 quality가 얼마나 좋은지를 알려줄 수 있는 value network가 있다. policy는 다음 단어를 잘 예측하는 short term이라고 볼 수 있고, value는 다음 단어를 조합한 caption이 얼마나 좋은지를 알려주기 때문에 long term이라고 볼 수 있다. 때문에 이 두 가지를 모두 고려해 score를 정의하고 이를 기준으로 beam search를 하게 되면 일반 beam search보다 훨씬 더 높은 확률로 global optimum에 도달할 수 있다.