[ICLR '18] NerveNet: Learning Structured Policy with Graph Neural Networks

minha·2022년 7월 29일

RL

목록 보기
1/6
post-thumbnail

NerveNet: Learning Structured Policy with Graph Neural Networks

  • 풀고자 하는 task: Continous control (Locomotion control 포함) →\rightarrow Infinite-horizon discounted MDP
    (Infinite-horizon: 각 episode에 대한 time step이 무한할 수 있음)

  • Model-free RL: Agent가 직접 Environment와 상호작용을 하면서 Policy 혹은 Value funtion을 직접 learn함
    < Model-based vs Model-free for 복잡한 multi-joint agent >

    • Model-based
      • Sample efficiency가 높음
      • 최적의 Model 또한 함께 학습해야하는 과정이 추가로 생김 →\rightarrow 논문에서는 이러한 이유 때문에 locomotion control과 같은 복잡한 문제 상황에서는 Model-free가 낫다고 판단한 것 같음. 또한, 여기서 중점적으로 보는 task 중의 하나인 multi-task learning에서는 model-based로 하면 여러 모델을 만들어야하는것 아닌지...?
    • Model-free
      • 아무래도 environment와 지속적으로 상호작용 해야하므로 sample efficiency가 보다 낮을 수밖에 없음
  • 아이디어
    사실 RL agent는 수많은 서로 연결된 sub-component들로 구성되어 있다. 하지만, 기존의 policy network는 주로 MLP를 사용하여 environment으로 부터 획득한 state observation에서 추출한 각 component에 대한 정보를 단순 concatenation하고 MLP의 인풋으로 활용하였다. MLP 기반 policy network는 observation의 단순 concatenation을 받아서 각 component이 취해야 할 action을 각기 따로 출력해야 한다. Sub-component 정보를 한번 뭉뚱거린 후 각 component에 대한 명령값을 출력하기 보다 GNN을 활용하여 각 component를 독자적으로 처리해서 action을 뽑아내는 것이 어떨까?
    따라서 NerveNet에서는 agent의 구조적인 특성을 고려하는 inductive bias를 부과하기 위해 policy network를 GNN으로 구성하였다.

  • Graph Construction →\rightarrow Tree graph 형태

    • Nodes
      • Body nodes (features O)
      • Joint nodes (features O)
      • Root node (features O): 논문에 확실하게 명시되지는 않았지만, 그래프 중 하나의 노드를 root node로 활용하는 것 같음. Root node는 agent의 추가적인 정보를 갖고 있는 노드임. 예를 들어, MuJoCo의 Reacher agent를 생각해보면 도달해야 하는 target place에 대한 정보를 root node가 갖고 있음.
      • P개의 node types {Body, Joint, Root, ...} →\rightarrow 노드별 중요도의 차이
    • Edges
      • Edges (features X): 그냥 이어진 노드끼리 연결함. Directed 일수도, undirected 일수도 있음. 특별한 weight나 feature이 없으니까 간단한 이진 adjacency matrix로 표현할 수 있음.
      • C개의 edge types →\rightarrow 서로 다른 노드간 관계, 관계에 따라 message propagation도 다르게 가져감 (Relational GCN 아이디어네 이거!)
  • NerveNet (Policy network)
    전체 RL 알고리즘에서의 시간 τ\tau가 고정되어 있다고 생각하고 설명하겠음

    1. Input Model
      시간 τ\tau에서의 concatenate된 observation sτs_{\tau}가 들어오면 이게 노드별로 각각 분리됨. 물론 노드 타입이 여러개니까 타입에 따라 들어온 feature의 차원이 다르겠지? 첨에 이걸 동일 차원으로 맞춰주기 위해 MLP로 구성된 Input Model에 넣어줌. 이 아웃풋을 hv0h_v^0이라고 하고 여기서 subscript는 노드 인덱스, superscript는 propagation step을 나타냄. 즉 초기에 시작하는 노드 임베딩인거임. Input Model은 입력 차원이 모두 같아야 하므로 노드별로 다른 차원일 때 zero padding을 해줌.

    2. Propagation Model
      여러번(nn번) internal propagation이 반복됨. 즉 한 노드의 feature를 업데이트 할 때, 그 노드로부터 nn-hop 떨어진 노드까지 보겠다는 의미임. 여기서는 간단하게 tt →\rightarrow t+1t+1로 propagation 되는 과정을 보겠음.

      1) Message Computation ←\leftarrow Edge type별로 다르게
      타겟 노드로 들어오는 엣지를 가진 이웃 노드들에 대해 타겟 노드로 전달해줄 메시지를 계산함. 메시지도 단순하게 MLP 혹은 Identity Mapping으로 정의되는 Message Function에 huth_u^t를 넣어줌으로써 구할 수 있음. 이 때 edge type에 따라 각각 다른 Message Function을 둔다는 점에 주의하기.

      2) Message Aggregation ←\leftarrow Permutation-invariant 해야 함
      이제 타겟 노드로 in-link가 있는 이웃 노드들이 전달할 메세지가 모두 준비 되었음. 그럼 이 메시지들을 한데 모아서 타겟 노드로 전달해 줘야 하는데, 이 때 각 계산된 메시지들에 대해 summation, average, 또는 max-pooling을 해서 이웃으로부터의 메시지를 한데 모아줌.

      3) States Update ←\leftarrow Node type별로 다르게
      Update Function로는 recurrent 모델인 GRU, LSTM을 쓰거나 간단한 MLP를 활용함. 업데이트시 현재 tt 스텝에서의 타겟 노드 feature와 2)과정에서 합쳐진 메시지를 모두 사용하는데, 이를 수식으로 나타내면 hut+1=Upu(hut,mˉut)h_u^{t+1} = U_{p_u}(h_u^t,\bar{m}_u^t) 임. 이 때 node type에 따라 각각 다른 Update Function을 사용함.

    3. Output Model ←\leftarrow Actuator type별로 다르게 (Optional)

      일반적인 'Gaussian MLP Policy'는 observation에 대한 action의 분포에 대해 mean과 std를 출력함. 이 때, mean은 항상 MLP의 아웃풋으로 뽑지만, std는 그냥 따로 학습 파라미터로 두는 경우도 있고, mean과 함께 MLP의 아웃풋으로 뽑는 경우도 있다.(https://garage.readthedocs.io/en/latest/_autoapi/garage/tf/policies/gaussian_mlp_policy/index.html 참조)

      최종 internal propagation이 끝났으면 노드 중 action을 뽑아내야하는 actuator 노드의 최종 feature 벡터 hu∈Onh_{u\in O}^n를 MLP로 구성된 Output Model에 넣어줌으로써 action distribution의 mean μu∈O\mu_{u\in O}를 얻음. 이 때 actuator type에 대해 각기 다른 Output Model을 쓸 수도 있고, 통일된 한 모델을 사용할 수도 있음.
      최종적으로 Gaussian policy를 통해 만들어지는 이번 observation(state)에서의 action은 다음과 같음.

  • 학습 알고리즘 (PPO 그대로 사용함)

  • NerveNet variants (Value network)

    • NerveNet-MLP: GNN(Policy) + MLP(Value)
    • NerveNet-2: GNN1(Policy) + GNN2(Value)
    • NerveNet-1: GNN1(Policy) + GNN1(Value)
  • 실험

    1. 단순히 GNN policy와 MLP policy의 성능 비교
      사실 GNN policy가 MLP policy에 비해서 성능이 확 더 낫거나 그러지 않음. MLP policy에 비해 살짝 낮거나 비슷한 수준.. 즉, 성능 측면으로 볼 때는 GNN policy에 대한 이점이 크게 없으므로, 다른 과업에서의 우수성을 필요로 함!
    2. Transferability by pretraining
      • 쟁점: 한 agent에 대해 학습된 policy가 동일 environment의 다른 agent에게도 얼마나 잘 적용되는지
      • GNN에 내재된 inductive property 때문에 transferability는 당연히 보장됨 (특히 여기서 다룬 '바뀐' agent가 단순히 학습 agent의 반복 구조 혹은 특정 노드 탈락 구조이기 때문에) →\rightarrow 만약에 아예 생판 다른 agent라도 이만큼의 transferability가 보장될까?
    3. Multi-task learning
      • 쟁점: 하나의
    4. (이외) Walk cycle & Feature distribution & Trajectory density
      논문에서처럼 이런 visualization도 추가하려면 MLP와 비교해서 넣어야하지 않았나 싶음. 또한, 취할 수 있는 자세에 구조적인 제한이 걸리므로 이게 원활한 exploration을 방해한다고 생각해야할지, 아니면 방대한 search space상에서 구조적으로 불가능한 state는 아예 배제해서 더 효율적이라고 봐야하는가?

0개의 댓글