* 저번 NPI 논문에서의 영감을 받은 모델 구조, NTP입니다. 바로 들어가겠습니다.

* 혹시 NPI에 대해 모르신다면 먼저 아래글을 읽어보시는 걸 추천드립니다.

  2019/10/01 - [AI/논문 리뷰] - [논문 리뷰] Neural Programmer-Interpreter

 

Abstract

 이 논문은 새로운 로봇 학습 프레임워크인 Neural Task Programming(NTP)를 제안합니다.

 Neural Program Induction과 few-shot demo learning 두 가지 분야를 합쳤습니다.

 NTP의 핵심 흐름은 아래와 같습니다.

본 논문의 Fig.1 (top)

 NTP는 입력으로 task specification(예를 들어 비디오 데모)을 받습니다. 이 task specification을 재귀적으로 분해하면서 sub-task의 task specification으로 나눕니다. 재귀적이라고 말했듯이 이는 반복됩니다.

 즉 비디오 데모라고 한다면, 전체 비디오를 부분부분 잘라서 sub task가 언젠가 최소의 Action이 될때까지 계속해서 분해하는 방식입니다. NTP 모델은 task specification을 보고 다음으로 실행해야 될 프로그램이 무엇인지 파악하고 호출합니다. 이 모델은 NPI와 닮았습니다. Compositional한 모델로 다음 프로그램을 호출할 때 새로운 NTP와 새로이 분해된 task specification을 입력으로 줍니다. 이 말은 아래에서 다시 설명드리겠습니다.

 NTP는 순차적인 task에서 강력한 일반화 능력을 가지고 있다고 합니다. 이 논문에서는 이를 증명하기 위해 3가지의 로봇 조작 task에서 실험을 진행합니다. 

 

본 논문의 Fig.1 (C)

 위 그림은 로봇 조작 task 중 하나인 Object Sorting task의 예시입니다. NTP는 이 환경에서 변화가 일어나 옮겨야 될 블록의 갯수가 많아지거나, 블록마다 할당된 바구니가 달라지거나 하는 unseen task에서도 강력한 일반화로 인해 잘 동작한다고 합니다.

 간단한 training 환경 코드는 이곳에서 확인하실 수 있습니다. stanfordvl.github.io/ntp/

 

Neural Task Programming: Learning to Generalize Across Hierarchical Tasks

Neural Task Programming

stanfordvl.github.io


Introduction

 이 논문이 제안하는 NTP는 계층적인 구조의 task들에 대해서 적용이 가능한 학습 알고리즘을 가지고 있습니다.

 

Task Variation 종류, 본 논문의 Fig.4

 NTP는 위 세 종류의 변화에 대해 일반화가 가능하다고 합니다.

 1) Semantics Variaitona - Goal의 변화입니다

 2) Topology Variation - Goal을 달성하기 위한 작업의 순서 변화입니다.

 3) Length Variation - Goal을 이루기 위해 해야할 일의 길이 변화입니다.

 이 세가지의 일반화가 가능한 것에 대해 이 논문에서는 일종의 meta-learning으로 보고 있습니다.

 

 이 논문이 전하는 바는 3가지로 정리하면 이렇습니다.

 1) 새로운 프레임워크 NTP - 계층적인 task에 대하여 meta-learning이 가능합니다

 2) NTP는 새로운 task(task 길이 변화, task goal 변화, task 순서 변화)에 대하여 강력한 일반화 능력으로 하나의 데모만으로 작업이 가능합니다.

 3) NTP가 visual input을 통해 end-to-end로 학습이 가능한 것을 증명합니다.


 

Neural Task Programming

NTP의 구조, 본 논문의 Fig.2

 위 그림에 나온 모듈들을 간단하게 설명해드리겠습니다.

 1) Observation Encoder : 현재 환경을 보고 feature를 출력하는 인코더입니다.

 2) Task Specification Interpreter : 현재의 상황과, 프로그램, 그리고 주어진 task_specification을 통해 5나 6의 일을 합니다.

 3) Task Specification Encoder : task specification에서 feature를 출력하는 인코더입니다.

 4) Core Network : 코어 네트워크로 LSTM 기반이 아닌, Reactive 기반의 네트워크를 사용한다고 합니다. 다음 프로그램과, 프로그램의 종료 확률을 출력으로 내게 됩니다.

 5) API Decoder : 다음에 실행할 프로그램이 Primitive한 API일 경우에 API를 위한 매개변수를 생성하는 Decoder입니다.

 6) Task Specification Selection : 다음 하위 프로그램에게 줄 task specification을 적절하게 선택하는 과정입니다. 여기서 나온 task specification이 다음 프로그램에게 주어지게 됩니다. 

 

 전체적인 흐름은 NPI와 많이 유사합니다. 차이점은 아래와 같습니다.

 1) NPI의 Primitive Action을 NTP는 Robot API를 사용합니다. 이는 task의 적용을 실제 환경같은 더 넓은 범위에 할 수 있게 합니다.

 2) NPI는 LSTM 기반의 코어 네트워크를 가졌습니다만, NTP은 Reactive 코어 네트워크를 사용한다고 합니다. 자세한 내용은 나와있지 않아 알 수가 없지만, 이를 통해 Error로부터의 회복에 더 강하다고 합니다. 이는 예외 상황이 발생하기 쉬운 로봇 환경에서 이점이 됩니다. 

 3) NPI는 다음 프로그램을 생성할 때 input으로 기존의 h state를 사용했지만, NTP는 적절한 task specification을 받습니다. 이를 통해 다양한 Task variation들에 대해서도 적절한 프로그램을 뽑을 수 있다고 합니다.

 

실제 NTP가 돌아가는 Flow, 본 논문의 Fig..3

 위 그림은 NTP가 돌아가는 흐름이라고 보실 수 있습니다. 맨 위의 영상들의 Sequence는 task specification을 의미하고 있습니다. 맨 처음 프로그램을 호출할 때는 빨간 색의 범위에 있는 task specification을 입력으로 넣습니다. 그 뒤 호출하게 될 프로그램에 대해서는 주황 색 범위의 task specification이 입력으로 들어가게 됩니다. 이런 식으로 하위 프로그램에게는 그 프로그램이 필요한 task specification을 제공하여, 필요한 정보만을 입력으로 줄 수 있습니다.

 

<Task Specification Scoping>

 그렇다면 과연 task specification을 적절하게 자르는 과정은 어떤 방식으로 이루어지는 걸까요?

 task specification은 time step마다의 값이라고 볼 수 있습니다.

 

 이렇게 나온 값마다 {'Start', 'End', 'Inside', 'Outside'} 확률을 구하기 위해 softmax를 적용합니다. inside와 outside 확률도 구하지만, 실전에서는 가장 높은 확률의 start와 end를 기준으로 자르는 것이 좋은 성능을 보여주었다고 합니다. 

 

 

 

 

 


Experiments

+ Recent posts