티스토리 뷰

Study/AI

[RL] CS285- Supervised Learning of Behaviors (2)

생각많은 소심남 2018. 10. 21. 23:07

<해당 포스트는 UC Berkeley 에서 진행된 Deep Reinforcement Learning의 가을 강좌를 요약한 내용입니다.>

 이전 포스트에서 Data Aggregation을 통해 Imitation learning을 수행하는데 있어 사람의 힘이 필요하다는 것을 언급했었고, 그에 대한 알고리즘은 다음과 같았다.

1. 인간으로부터 뽑은 데이터 \(D=\{o_{1}, a_{1}, ... , o_{N}, a_{N}\}\)을 바탕으로 \(\pi_{\theta}(a_{t}|o_{t})\)를 학습시킨다.
2. policy로부터 나온 데이터 \(D_{\pi} = \{o_{1}, ..., o_{M} \}\)을 구하기 위해 \(\pi_{\theta}(a_{t}|o_{t})\)를 돌려본다.
3. \(D_{\pi}\)에 대한 action \(a_{t}\)의 라벨링을 인간이 하게 한다.
4. 맨처음에 있던 데이터와 새로 policy에 의해서 생성된 데이터를 합친다 : \( D \leftarrow D \cup D_{\pi} \)
5. 다시 1번 과정을 수행한다.

 여기에는 문제가 있다. 다들 인지하는 부분이겠지만 라벨링을 인간이 직접하는데는 시간이 무척 걸릴 것이다. 더구나 보통 학습하는데 필요한 수많은 데이터를 사람이 직접 보고, 답을 알려준다는게 넌센스이다. 결국 사람이 중간에 끼게 되면 많은 데이터를 다루는 것 자체가 힘들게 된다.

 결국 DAgger 알고리즘은 학습 데이터 상에 없는 데이터가 나왔을 때나 training error가 발생함으로 인해서 비정상적으로 trajectory가 생기는 "drift"의 분포와 관련한 문제를 해결한 것이다. 위와 같이 문제가 발생하는 케이스도 있겠지만, 반대로 "drift" 현상이 발생하지 않고 잘 학습된 케이스도 많지는 않겠지만 종종 있을 것이다. 사실 인간의 케이스도 동일하다. 잘하는 사람의 경우도 실수를 하는 경우도 있겠지만, 모르는 경우가 올 경우에는 기존의 정보를 바탕으로 어느정도 일련의 과정을 수행한다. 이때문에 우리가 궁극적으로 취해야 할 것은 이런 인간의 행동을 매우 정밀하게 모방하는 과정을 적용하는 것이 필요하며, 그렇다고 해당 과정을 학습하면서 overfit이 되는 것도 피해야 한다.(강의에서는 behavior cloning이라는 표현을 사용하고 있다.)

 그런데 사실 이렇게 인간의 행동을 모방하기가 쉽지가 않다. 바로 앞의 표현에도 담겨 있기도 하지만, 사람의 행동에는 기존의 경험이 있기에 그 동작을 기반해서 행동하는 건데, 사실 이건 이전 포스트에서 다뤘던 Markov property를 따르지 않는다.(Non-Markovian behavior). Markov process에 대해서 수식을 가져오면 $$ \pi_{\theta}(a_{t}|o_{t}) $$은 현재의 observation에 기반해서 action이 결정된다고 언급했었다. 조금 쉽게 표현하면 같은 observation을 두번 봤을 때, 이전에 해당 observation을 봤는지 여부와 상관없이 동일한 action을 두번 취하게 되는 것이다. 이건 사람의 입장에서도 매우 자연적이지 않은 상황이다. 결국 이를 해결하기 위해서는 action을 선택하는데 있어서 과거에 봤던 observation을 모두 고려해야 한다. $$ \pi_{\theta}(a_{t}|o_{1}, ..., o_{t}) $$ 다른 말로 표현하면, experience, history 같은 것이 필요하다는 것이다. 이전에 다뤘던 자율 주행 예제를 가져오면 다음과 같이 

 위와 같이 기존의 과거 이미지들을 모두 모아 CNN과 같은 신경망에 넣고, action을 결정하는데 필요한 요소를 정하면 된다. 그런데 이렇게 하면 CNN을 쓸 때부터 제약이 생겨버린다. 우선 CNN의 input으로 넣기 위해 image의 크기가 고정되며, 각 neural network의 weight을 많이 생겨버린다. 이때문에 첫 시도는 이런식으로 해볼 수는 있겠지만, 실전에 응용하기엔 쉽지 않다. 

 그래서 활용할 수 있는 것이 Sequencing data를 다룰 수 있는 RNN을 사용하는 것이다. 이미지들 각각을 신경망에 넣고, 그에 대한 출력을 RNN에 넣어 정보를 얻을 수 있게 되는 것이다. 이때 각 이미지를 처리하는 신경망은 특성이 비슷하기 때문에 신경망 내 weight를 공유할 수 있어 기존 방식보다 나은 부분이 있다. gradient를 얻어내는 측면에서 LSTM을 사용하는 좋은 부분이 있어 RNN대신 LSTM을 사용하는 경우도 있다고 한다. 

 인간 행동을 모방하기 어려운 두번째 이유는 인간 행동이 복합적이라는 것이다(multimodal behavior) 

만약 나무를 피하는 경로를 짜야 한다면 나무를 마주쳤을 때, 왼쪽으로 피하거나 오른쪽으로 피해야 하지 두 행동을 평균내서 중간으로 가는 행동을 취하지는 않을 것이다. 그런데 만약 행동의 경우수가 많다던가 행동 자체가 continuous 하다면 분명 확률적으로 나쁜 행동을 취할 경우도 발생할 것이다. 

 이를 해결하는 방법으로 몇가지를 소개하고 있는데, 해당 부분은 이해를 완벽히 하지 못해 추후에 정리할 예정이다.

1. Output mixture of Gaussians
2. Implicit density model
3. Autoregressive discretization

 

댓글