[Abstract]

본 논문이 하고자하는 것, 본 논문의 Fig.1

 데모 비디오들로부터 행동 결정 로직을 해석하는 일은 사람을 사람을 흉내 내고 협력하는 데 있어서 키 포인트라고 말하며, 이 로직을 시각적으로 복잡한 여러 데모 비디오들로부터 DSL*을 이용하여 프로그램 포맷으로 생성해내는 Neural Program Synthesizer 모델을 이 논문은 제안합니다. 

 이 모델의 핵심 요소 두 가지는 아래와 같습니다.

 1) Summarizer module - 여러 개의 데모 비디오를 Compact 하게 통합하여 주는 모듈

 2) Multi-task objective - end-to-end 학습에서 모델의 학습 능력을 높이기 위한 부가적인 목적함수들

 

이 논문의 데모 코드는 https://github.com/shaohua0116/demo2program 에서 확인할 수 있습니다.

 


* DSL(Domain Specific Language) - 특정 도메인에 특화된 언어로써 이 논문의 모듈이 프로그램을 생성할 때 이를 이용해 생성합니다. 프로그램은 연속된 각각의 토큰들로 생각할 수 있습니다. 이 논문에서는 크게 3가지(Action, Perception, Control flow)로 토큰들을 분류합니다.

 

[Approach]

전체적인 모듈의 구조가 나타난 본 논문의 Fig.3

 위의 그림은 전체적인 모델의 구조를 보여줍니다.

 모델은 크게 3가지 모듈로 나눌 수 있습니다. 

 1) Demonstration Encoder - 데모 비디오 입력을 통해, 에이전트의 Action과 Perception을 Embedding 합니다.

 2) Summarizer Module - 각각의 데모 비디오들로부터 나온 Embedding을 통합하는 역할을 합니다.

 3) Program Decoder - Summarizer로부터 나온 Vector를 코드의 Sequence로 decode 합니다.

 

 각 모듈에 대한 추가 설명은 아래에 이어서 하겠습니다.

 

Demonstration Encoder와 Summarizer Module의 구조가 나타난 본 논문의 Fig.4

<Demonstration Encoder>

 어떠한 프로그램으로부터 생성된 데모 비디오가 k개까지 있다고 할 때, 각각의 데모 비디오들은 일정한 time step을 구분으로 하는 state의 연속된 sequence라고 표현할 수 있습니다. state를 encoder(CNN)에 입력으로 얻은 feature 값을 S로 위 그림에서 표현합니다.

 Demo Encoder는 LSTM을 사용하며, S를 차례대로 입력으로 넣고 최종적으로 나오게 되는 cell state c, hidden state h가 데모의 전체적인 내용을 함축한다고 생각할 수 있게 됩니다. Average Pooling 과정에서는 각각의 ch를 더해 평균을 낸 Z 를 만들게 됩니다.

<Summarizer Module>

 위에서 만들어진 Z 를 활용하여 데모들을 Review하는 과정을 거치게 됩니다. 이때의 LSTM은 Z 로 Initialized되며, 각 step마다의 입력은 Demo Encoder 과정에서 step마다의 hidden state h 를 이용하게 됩니다. 이는 데모들의 전체적인 관점에서 다시 한번 각각의 데모들을 리뷰하는 과정이라고 보실 수 있겠습니다. 이를 이용해 최종적으로 데모마다 벡터를 뽑게 되고, 이를 Relation Network를 이용하여 최종적으로 모든 데모들이 요약된 벡터 Vsummary 를 만들게 됩니다. Relation Network 관련 부분은 단순하게 생각하면 각각의 데모마다의 관계를 계산하는 모듈이라고 생각할 수 있을 것 같습니다. 

Relation Network 관련된 본 논문의 수식 (4) 

<Program Decoder>

  프로그램을 생성하는 모듈입니다. Vsummary 로 initialized된 LSTM을 사용하며 각각의 step마다 이전 step에서의 토큰Embedding을 입력으로 받고, 출력으로 다음으로 나오게 될 토큰들의 확률을 계산합니다.

 


<Learning>

Training 과정에서의 Loss, 본 논문의 수식 (5)

 M : training example의 총 개수

 N : 토큰의 총 개수

 W : 이전 토큰들의 sequence

 D : 데모

 데모 D와 이전 토큰들의 시퀀스가 주어질 때 다음 토큰으로 ground-truth 토큰이 되게끔 합니다.

 

<Multi-task Objective>

 위 모델은 End-to-End로 학습을 진행합니다. 하지만 데모들로부터 각각의 time step에서 Action들과 Perception을 잘 인식하여 뽑아냈는지 확인하기가 어렵습니다. 만약 환경이 시각적으로 좀 더 복잡하다면 이는 모델에게 있어 더 어려운 일이 될 것입니다. 이를 해결하기 위해 두 가지의 Loss 함수를 추가적으로 이용합니다. 

본 논문의 수식 (6)

 첫 번째로 Action Loss 입니다. Summarizer Module에서 Relation Network에 들어가기 전 review 과정에서 나왔던

V 와 이전까지의 액션들의 시퀀스 A가 주어질 때 다음 action이 ground-truth action이 되게끔 합니다. 즉, 각각의 데모 비디오로부터 올바른 action sequence를 뽑아내게끔 도와주는 역할을 하는 것으로 보입니다. 

본 논문의 수식 (7)

 두 번째로 Perception Loss 입니다. perception은 각각의 perception에 대해서 {0, 1} 바이너리로 표현된 L차원 벡터로 이루어져 있습니다. 이번에도 review 과정에서 나왔던 V 와 이전까지의 perception sequence가 주어질 때 L개의 perception에 대해서 올바른 ground-trueth perception이 나오도록 합니다. 이 또한 위의 Action Loss와 비슷하게 올바른 perception을 뽑아낼 수 있도록 도와주는 역할을 하는 것으로 보입니다.

 지금까지 나온 세 가지 Loss를 각각에 가중치를 곱해 더한 값을 Loss 함수로 위 모델은 사용하게 됩니다.

 

[Experiments]

 위 논문은 Karel과 VizDoom 두 가지 환경을 사용하여 실험을 진행합니다. 

 평가 척도로는 3가지를 제시하였습니다.

 1) Sequence Accuracy - 코드가 정확하게 일치하는지를 평가하는 척도

 2) Program Accuracy - 같은 의미의 코드라도 다르게 쓰일 수가 있는데 이 점을 감안하여 코드 일치를 평가하는 척도

 3) Execution Accuracy - ground-truth 프로그램과 실행 결과를 비교해서 평가하는 척도

  

 <Karel Environment>

 Karel 환경은 8x8 Grid 2D 환경으로, 5가지의 Action 및 5가지의 Perception 토큰이 존재하는 간단한 환경입니다. 랜덤으로 35000개의 프로그램을 생성하여, 25000개의 train, 5000개의 valid, 5000개의 test 집합으로 나누었다고 합니다. 각각의 프로그램마다 10개의 seen demo와 5개의 unseen demo를 생성했습니다. (unseen demo는 execution accuracy를 평가할 때 사용됩니다.)

Karel 환경에서의 모델 비교, 본 논문의 Table.1

 첫 번째 실험은 아까의 세 가지 척도를 활용하여 모델들을 비교하는 실험입니다. Induction 모델은 프로그램을 생성하지 않고, 단순히 Action들의 Sequence를 만들어내는 모델입니다. 비교할 때 공평성을 위해 Perception 정보를 매 step마다 입력으로 넣어주었다고 하며, 그 결과가 괄호 안의 값이라고 보시면 됩니다. 위 논문에서 제안한 두 가지 요소들이 더해짐으로써 성능이 좋아지는 것을 확인할 수 있습니다. 

데모 갯수에 따른 summarizer 성능 증가 비교, 본 논문의 Table.2

 두 번째 실험은 summarizer module의 힘을 보여주는 실험입니다. seen demo의 개수를 k라고 할 때, k가 늘어날수록 Summarizer module을 통한 Execution Accuracy가 증가하는 것을 확인할 수 있습니다.

<VizDoom Environment>

  Doom은 플레이어가 연속된 상태 공간에서 몬스터, 아이템 및 무기로 상호작용을 하는 3인칭 슈팅 게임입니다. VizDoom은 Doom을 베이스로 한 AI platform입니다. 120x160x3 pixel로 표현되는 7개의 Action, 6개의 Perception 토큰이 존재하는 좀 더 복잡한 환경입니다. 이번에는 80000개의 train, 8000개의 test 집합을 생성하였고, 각각의 프로그램마다 25개의 seen demo와 10개의 unseen demo를 생성했습니다.

VizDoom 환경에서의 모델 비교, 본 논문의 Table.3

 첫 번째 실험은 모델 비교 실험입니다. 환경이 좀 더 복잡해지자 Induction 모델의 성능이 확연히 떨어지는 것을 확인할 수 있습니다. 이는 명시적으로 프로그램을 생성해내는 Synthesis 모델의 장점이 드러난다고 볼 수 있습니다. 그리고 한 가지 더 눈여겨볼 점으로 생성된 프로그램들의 구문이 99.9% 정확했습니다. 이는 DSL의 구문 또한 모델이 학습한다고 볼 수 있습니다.

if-else로 이루어진 프로그램에서의 모델 비교, 본 논문의 Table.4

 두 번째 실험은 condition에 따른 행동 변화의 추론에 대한 중요성을 입증하기 위한 실험입니다. 이를 위해 if-else 구문으로 이루어진 간단한 프로그램들로 모델을 비교하며 실험했습니다. Induction model은 condition에 따른 행동 변화를 추론하는 데 있어서 어려움을 가지고 있는 것이 성능으로 드러납니다. 그에 반해 모든 모듈이 포함된 Synthesis 모델은 높은 성능이 보입니다.

K개의 seen demo가 주어질 때의 Execution Accuracy, 본 논문의 Fig.7

 위 그림은 k개의 seen demo가 있을 때 나타나는 execution accuracy 성능을 보여줍니다. Induction model은 demo가 많이 주어지더라도 그에 맞는 성능을 이끌어내지 못하는 점을 확인할 수 있습니다. 그리고 summaraizer module은 demo의 개수가 늘어날수록 급격하게 유무의 차이가 나타나는 점을 확인할 수 있습니다. 이를 통해 summarizer module이 중요한 역할을 한다는 점을 다시 확인할 수 있습니다.

 

[Conclusion]

이 논문은 여러 데모 비디오로부터 프로그램을 생성해내는 모델을 제안했으며, 이에 추가로 성능을 높이기 위한 summarizer module과 multi-task objective를 제안했습니다. 평가를 위해 fully-observable의 Karel 환경과 partially-observable의 VizDoom 환경에서 실험을 진행했으며, 실험을 통해 제안된 모델이 좋은 성능을 낸다는 것을 증명했습니다.

 

 


* 공부하면서 리뷰를 하고 있기 때문에, 틀린 점이 있다면 지적해주시면 감사하겠습니다.

+ Recent posts