본문 바로가기
Study Log/Software Engineering

02. Supervised Learning of Behaviors

by HZie 2022. 11. 22.

Terminology

  • $s_{t}$ = state - 일반적으로 markovian state로 가정함, 현재 시스템의 설정을 표현한 것 (ex. 좌표, velocity 등)
  • $o_{t}$ = observation - input
  • $a_{t}$ = action - output
  • $\pi_{\theta}\left ( a_{t}\mid o_{t} \right )$ = policy - input에서 output으로 가기 위한 중간과정
  • $\pi_{\theta}\left ( a_{t}\mid s_{t} \right )$ - policy (fully observed) - 더 제한적인 특별한 케이스

observation, state, markove property에 대한 필기


Imitation Learning

  • 사람에게서 추출한 $o_{t}$와 $s_{t}$를 사용함
  • Behavioral Cloning (줄여서 BC)라고 하기도 함

일반적으로 Imitation Learning은 제대로 돌아가지 않음

Imitation Learning이 잘 돌아가지 않는 이유

그 이유는

1. 어떤 경우에든 작은 실수를 할 수 있음

2. 그 작은 실수를 한 경우에 어떻게 해야할지 모르기 때문에 더 큰 실수를 하게 됨

3. 결과적으로 그러한 실수들이 합쳐져서 전혀 다른 결과가 나옴

의 과정을 거치기 때문이다. ( = distributional "drift")

 

제대로 동작하게하기 위해서는 많은 학습데이터와 약간의 트릭들을 사용하면 된다.

하지만 그럼에도 오류가 발생할 수 있는데 제대로 동작하는 확률을 높이려면 $p_{data}\left ( o_{t} \right ) = p_{\pi_{\theta}}\left(o_{t}\right)$를 만족하게 하면 된다.

(여기서 $p_{data}\left ( o_{t} \right )$는 data distribution, 즉 데이터 분포를 의미한다)

--> DAgger


DAgger

  • Dataset Aggregation
  • $p_{data}\left ( o_{t} \right ) = p_{\pi_{\theta}}\left(o_{t}\right)$를 만드는 것이 가능할지
    • $p_{\pi_{\theta}}\left(o_{t}\right)$를 똑똑하게 만들기보다 $p_{data}\left ( o_{t} \right )$를 똑똑하게 만들면 된다
      --> 목표: $p_{data}\left ( o_{t} \right )$가 아니라 $p_{\pi_{\theta}}\left(o_{t}\right)$에서 데이터를 수집한다.

1. $\pi_{\theta}\left (a_{t} \mid o_{t}\right )$를 사람에 의해 수집된 데이터인 $D = \{o_{1}, a_{1}, ... , o_{N}, a_{N}\}$으로 학습한다.

2. $\pi_{\theta}\left (a_{t} \mid o_{t}\right )$를 실행해서 데이터셋 $D_{\pi} = \{o_{1}, ... , o_{M}\}$을 얻는다.

3. 사람이 직접 $D_{\pi}$에 맞는 action은 $a_{t}$를 label한다.

4. 두 데이터, $D$와 $D_{\pi}$를 합친다: $D \leftarrow D \cup D_{pi}$

다시 1번으로 돌아가서 반복한다.

 

문제점: 3번 process 

1) 사람이 계속 새로 추출된 데이터에 직접 label을 붙여야 한다.

2) 사람이 올바른 action을 알지 못하는 경우도 있다.


Expert와 똑같이 행동하지 못하는 이유

사람의 행동은

1. Non-Markovian behavior이다.

  • 사람은 과거의 경험을 토대로 행동을 결정하기도 하기 때문에 과거를 아예 신경쓰지 않는 것은 자연스럽지 않다.
  • 하지만 과거 경험을 모델에 모두 적용시키려고하면 너무 많은 weights가 생겨버린다.
    • 개선 방안
      • 각각의 frame을 CNN으로 학습하고 그 과거의 결과들을 RNN으로 학습한다. (주로 LSTM 이용)
      • 하지만 잘못된 것 계속해서 학습할 수 있어 제대로 동작하지 않을 수 있다.

2. Multimodal behavior이다.

  • 사람은 왼쪽으로 이동했다가, 오른쪽으로 이동했다가 하는 등 결정을 하는데 여러가지가 영향을 미친다. 따라서 같은 상황에서도 다양한 행동을 한다. 
    • 개선 방안
      • Output Mixture of Gaussians
        • 가장 단순한 방법
        • 최종 action을 뽑을 때 하나의 Gaussian값만 가지고 고려하는 것이 아니라 여러 Gaussian 값들을 모두 고려한다.
        • 문제: dimension이 많고 복잡한 모델에서는 적용하기 힘들다
          • dimension이 클수록 지수함수로 mixture gaussians 양이 많아지기 때문
      • Latent variable models
        • 가장 복잡하지만 가장 표현력이 좋음
        • action은 single gaussian을 가지고 결정되지만, input을 할 때 latent variable(= noise)을 모델에 집어넣는다.
        • 더 자세한 것은 아래의 것들을 살펴보면 좋다.
          • Conditional variational autoencoder
          • Normalizing flow/realNVP
          • Stein variational gradient descent
      • Autoregressive discretization
        • 표현력이 어느정도 좋으면서 구현하기 엄청 복잡하지는 않다.
        • 한 번에 하나의 dimension에 대한 discrete를 뽑아낸다. 이렇게 만들어진 dim value를 다시 네트워크의 입력으로 넣어주는 것을 반복한다.

Autoregressive discretization 간단한 그림

 

 


Cost Functioin for Imitation

reward와 cost function을 정의해서 action에 대한 평가를 진행한다.

reward function: $r\left( s, a \right) = \log p\left( a = \pi^{*}\left(s\right) \mid s\right)$

  • 더 실용적인 선택
  • 선택한 action의 로그 확률이 $\pi^{*}\left(s\right)$(= unknown policy)와 같다.

cost function: $c\left(s,a\right) = \begin{cases}0 \space if \space a = \pi^{*}\left(s\right)\\1 \space otherwise\end{cases}$

  • 0: unknown policy가 완벽하게 expert와 매치함
  • 1: 매치하지 않음

0, 1 loss는 이론적인 분석을 할 때 편리하고, 실수의 수를 직접적으로 셀 수 있음

 

그 후 강의에서 supervised learning이 실수할 확률이 $\epsilon$보다 작다고 가정한 후 분석을 진행했는데 Big-O가 $O\left(\epsilon T^{2}\right)$가 나왔다 --> 비효율적

 

 

어쩌다 발견했는데 아래 블로그가 굉장히 정리를 잘해주셨다.

영상보고 이해 안가면 이거 참고해도 될 듯

https://leejunhyun.github.io/deep%20learning/2018/09/03/CS294-02/

 

[CS294] Lecture 2 : Supervised Learning and Imitation

UC Berkeley의 강화학습 강의 CS294(2018 Fall semester)를 정리한 포스트입니다.

leejunhyun.github.io

 

댓글