티스토리 뷰

Study/AI

[RL] A Model, You Know What I Mean?

생각많은 소심남 2019. 2. 27. 23:47

 <본 포스트는 UC Berkeley 교수인 Benjamin Recht 의 블로그에 올라온 글을 번역한 것입니다. 원본>

 강화학습에서 모델의 역할은 여전히 많이 논의가 되고 있다. policy gradient와 같이 model-free method(model 없는 상태에서 학습하는 방법)은 system을 관찰하고, 이전에 받았던 award와 state를 바탕으로 현재의 전략을 개선시킴으로써 optimal control problem을 푸는데 목적을 두고 있다. 수많은 학자들이 논의하고 있는 내용은 실제 물리 시스템을 시뮬레이션 하는데 필요한 수많은 복잡한 수식의 조합이 필요없이 선천적으로 학습할 수 있는 시스템에 대한 것이다. 또한 전체 system dynamic에 대해서 범용적으로 쓸 수 있는 모델을 학습시키는 것보다 특정 작업에 대한 정책을 찾는게 쉬운지 여부에 대해서도 논쟁을 하고 있다.

 반대로 연속된(continuous) control problem 상에서는 모델을 항상 가지고 있다. 사실 trial and error 방법론을 통해서 자율 주행 차량을 만들겠다는 아이디어 자체는 우스깡스러운 일이다. 모델을 학습시키는 것은 힘들긴 하겠지만, 대부분의 시스템이 지향하는 논점에서 벗어나지 않는다. 게다가 때로는 조금 덜 가공된 모델도 optimal  control을 할 수 있는 정책을 세우는데 충분할 때도 있다. 만약 제어를 위한 계수가 알려지지 않거나, 현재 사용하고 있는 모델이 전체 system의 행동에 대해서 측정하지 못하는 경우에 대해서 모델이 어떻게 성능을 향상시킬 수 있을까?

 이번 포스트에서 강화학습에서 쓰이는 가장 간단한 모델의 사용 예시 중 하나를 살펴보겠다. 여기에 쓰이는 정책은 dynamical process를 위한 예측 모델을 평가하는 것이 될 것이고, 해당 제어 문제에 dynamic programming을 사용했을 때의 해도 구해보고자 한다. 평가된 모델이 참인 제어 시스템을 설계하는 것을 명목상(nominal) 제어라고 표현하고, 해당 평가 모델을 명목상 모델이라고 부른다. nominal control은 나머지 글에서 나오는 알고리즘에 대한 유용한 baseline으로 쓰일 것이다. 이번 포스트에서는 nominal control이 간단한 LQR 문제에 어떻게 적용되는지 살펴보겠다.

시스템 증명(identification)

dynamical system에 대한 평가를 제어 업계에서는 시스템 증명(system identification)이라고 부른다. System Identification은 일반적인 conventional estimation 과는 조금 다른데 그 이유는 해당 방법이 다양한 자유도를 만족시키는 올바른 입력을 세밀하게 선택하는 것이 필요한 부분이 있겠고, 또 다른 이유로는 우리가 평가하기 원하는 계수를 가진 상태에서의 dynamical output이 시간과 연관성이 있기 때문이다. 반대로 conventional한 machine learning tool을 사용할 때는, 데이터가 수집되면, 해당 데이터에 가장 잘 맞는 시스템을 찾는데 사용된다.

 앞에서 정의한 dynamical system의 추상화된 모델을 다시 살펴보자

$$ x_{t+1} = f(x_{t}, u_{t}, e_{t}) $$

우리는 주어진 \( (x_{t}, u_{t}, e_{t}) \)으로부터 \(x_{t+1}\)을 예측할 수 있는 predictor를 만들기를 원한다. 이제 문제는 해당 모델을 모델링하기 위해서는 어느정도의 모델이 필요하냐 하는 것이다. 물리식 기반의 복잡한 물리 모델이 필요할까? 아니면신경망을 사용해서 non-parametrical한 f를 근사해야 하는걸까? 샘플링에 대한 예측이 잘될 것을 보장하려면 얼마나 모델을 학습시켜야 할까?

 사실 이 문제는 선형 시스템에서도 남아있다. 이전 시리즈에서 쭉 다뤄오고 있던 간단한 예제인 quadrotor dynamics로 다시 돌아가보자. LQR을 다룬 포스트에서, LQR 문제를 통해서 quadrotor를 제어하는 것을 아래와 같이 모델링했었다.

$$ \begin{array}{ll} \mbox{minimize}_{u_t,x_t} \, & \frac{1}{2}\sum_{t=0}^{N-1} x_{t+1}^TQ x_{t+1} + u_t^T R u_t  \\ \mbox{subject to} & x_{t+1} = A x_t+ B u_t, \\ & \qquad \mbox{for}~t=0,1,\dotsc,N,\\ & \mbox{($x_0$ given)} \end{array}$$

이때 각 항은

$$ \begin{aligned} A &= \begin{bmatrix} 1 & 1 \\ 0 & 1 \end{bmatrix} & \qquad B &= \begin{bmatrix} 0 \\ 1 \end{bmatrix} \\ Q &= \begin{bmatrix} 1 & 0 \\ 0 & 0 \end{bmatrix} & \qquad R &= 1 \end{aligned} $$

이고 이때 \( x_{0}\)는 [-1, 0]이라고 가정했다.

 주어진 시스템에서, 해당 시스템을 증명하려면 어떻게 해야 할까? 가장 간단하고 원론적인 방법은 랜덤하게 탐색하는 시퀀스인 \(u_{t}\)로 제어하게 하고, 이에 대한 state가 어떻게 반응하는지를 확인해보는 것이다. 그러면 모델은 다음과 같은 least-square 문제를 푸는 방식으로

$$ \mbox{minimize}_{A, B} \sum_{t=0}^{N-1}||x_{t+1} - Ax_{t} - Bu_{t}||^2 $$

여기서 최소화된 값을 \( \hat{A}, \hat{B} \)라고 해보자. 이 값들이 모델을 평가할 수 있는 측면이 된다. 해당 관점에서 바라보면, 위의 LQR 문제를 다음과 같이 해결할 수 있게 된다.

$$ \begin{array}{ll} \mbox{minimize}_{u_t,x_t} \, & \frac{1}{2}\sum_{t=0}^{N-1} x_{t+1}^TQ x_{t+1} + u_t^T R u_t  \\ \mbox{subject to} & x_{t+1} = \hat{A} x_t+ \hat{B} u_t, \\ & \qquad \mbox{for}~t=0,1,\dotsc,N,\\ & \mbox{($x_0$ given)} \end{array}$$

 이 경우, 우리가 구하고자 하는 trajectory인 \(u_{t}\)를 구하기 위해 잘못된 문제를 푸는 것일 수 있으나, 만약 \( (\hat{A}, \hat{B} )\)과 \((A, B)\)가 유사하다고 가정하면, 위의 해는 어느정도 의미가 있을 것이다.

 평가를 하는데 있어 어느정도 에러가 존재하는 상태에서 각기 다른 시스템 모델을 만족시킬 수 있는 적절한 해가 무엇인지 모르는 상태에서는, 해당 모델이 실제로 얼마나 잘 동작하는지가 명확하지 않다. 그리고 어떤 것이 optimal하게 탐색하고 평가하는 것인지에 대해서는 아직 정의되어 있지 않다. 하지만 위와 같은 접근 방식이 어느정도 의미가 있고, 이론적으로 뭔가 부족할지라도 계속 뭔가를 시도해봐야 한다.

Policy들간의 비교

앞에서 소개한 quadrotor 문제를 약간의 noise(\(e_{t}\) : 인데, 평균이 0이고 covariance가 \(10^{-4}I\) 임)가 가해진 상태에서 T=10인 시간 범위 만큼 실험을 돌려봤다. 내가 입력으로 넣었던 시퀀스는 단위 variance를 가지는 Gaussian white noise 였었고, 위의 실험에 대한 코드는 python notebook으로 작성해보았다.

 한 iteration(샘플 10개를 뽑음)이 수행되는 동안, 3자리까지의 정밀도가 나왔고, 이 결과는 그렇게 나쁘지 않았다. 그리고 놀랍지 않게도 해당 방법을 통해 거의 optimal한 제어 policy가 나왔다. 아무것도 모르는 상태에서 보면, 이렇게 만든 제어 방식이 엄청 잘 동작하는 것을 확인할 수 있다. 참고로 나는 이 방식을 엄청 고생해서 만들었고, 여기에 생소한 정보나 기반 지식같은 것을 하나도 사용하지 않았다. 실제에 놓고 보면, 내가 해야 할 일은 한 parameter는 B 행열의 (2,1)에 들어있는 정보인데, 이 값은 actuator에 의해서 발생되는 힘이 어느 정도인지와 해당 시스템의 무게가 어느 정도인지에 따라 좌우가 된다.

 여기서 다시 model-free한 방법(model-free method)을 다시 다뤄볼 차례이다. 이 문제에 대해서 model-free한 방법이 얼마나 적합할까? 우선 내가 한 방식은 static하고 linear한 gain을 쓰는 policy가 되게끔 제한을 두었다. 괜히 신경망을 써서 헤매고 싶지는 않았다. 사실 이렇게 함으로써 model free한 방법이 간단한 2-state LQR 문제에서는 time-varying policy만큼이나 static linear policy 처럼 잘 동작하도록 도와준다. 게다가 model-free한 방법에서는 단순히 2개의 결정 변수만 정의해주면 된다. 딱 2개의 변수만 정의해주면 되는 것이다. 무척 쉬운 방법이지 않은가?

 그래서 아래의 3개의 model-free 방법을 비교해보았다.

 - Policy Gradient : 내가 직접 코드를 짰고, 잘못된 부분이 있을거라 생각하지만, 일단 variance를 줄이기 위해서 간단한 baseline subtraction heuristic을 사용했고, PG가 발산하지 않게끔 하기 위해서 bound constraint를 추가시켰다.

 - Random Search : random하게 축을 넘나드는 finite difference approximation을 사용하는 간단한 random search heuristic을 구현해보았다.

 - Uniform Sampling : \(\mathbb{R}^2 \)상의 bounded cube에서 무작위로 컨트롤러를 선정해서 가장 작은 LQR cost를 내보내는 컨트롤러를 하나 골랐다.

위의 방식들이 적절할까? 나는 이 방법들을 10개의 서로 다른 랜덤시드를 사용해서 실험을 돌렸고, 10개 중 최고의 결과를 출력해보았다.

 500번의 실험을 수행했을때,(시간 단위가 10인 상태에서 서로 다른 제어 설정으로 500번을 시도했을때) 모든 방법들이 똑같이 잘 동작하는 것처럼 보였다. 다시 말하지만, 지금 실험 결과는 nominal control 에서의 하나의 결과와 비교하는 것이다. 2차원 상에서 샘플의 복잡성 관점에서 큰 의미를 주는 것이 있다. 바로 Random search 방식이 policy gradient방식보다 조금 더 잘 동작하는 것처럼 보이고, 놀랍지 않게도 uniform sampling 방식이 나머지 방식들보다 더 좋게 보이는 것이다. 2차원 상에서 바라보면 그렇다.

 이제 여기에 error 축을 삽입하면 이야기가 바뀐다. 이제 최고의 performance를 출력하는 것보다 median performance를 출력해보면,

 에러 축이 모든 시도 횟수 내에서 최대치와 최소치를 모두 포함하고 있는 것을 확인할 수 있다. Policy Gradient방법은 이전에 수행했던 것보다 더 안 좋게 동작하는 것처럼 보인다. 그리고 실제로 variance도 커졌다. 4000번을 수행한 이후에는 median performance가 nominal control 한번 수행한 것과 거의 가까워졌다. 그래도 유심히 봐야 할 부분은 5000번의 실험내에서도 여전히 worst case performance가 불안정하다는 것이다. 

 이게 policy gradient에서의 문제는 이런 원인을 어떻게 디버깅할 수 있냐는 것이다. 분명 버그가 있는 것 같다. 그런데 이걸 어떻게 이야기 할 수 있을까? 이걸 측정할 수 있는 unit test 기법이 있을까? 이 방법이 더 많은 샘플들을 통해서 cost를 향상시키는 부분에 대해서 다른 것보다 더 좋다고 증명할 수 있는 간단한 방법이 있을까?

 물론, 위의 방법이 동작하는 랜덤 시드를 튜닝하지는 못했다. 나같은 경우에는 1337을 사용했는데, Moritz Hardt에 따르면 다른 수를 사용하면 더 좋은 결과가 나올거라고 한다. 아마 더 나은 baseline이 결과를 더 좋게 내보낼 수 있지 않을까? 아니면, Critic 부분을 삽입하면 어떨까? 어쩌면 Trust Region 방법과 같이 조금 담금질된 어떤 알고리즘을 사용하면 어떨지...

 모든 질문들이 알고리즘 측면에서 조금더 복잡함에 대해 다루고 있을 뿐, 핵심을 놓치고 있다. 가장 중요한 이슈는 model-free 방법이 parameter-free하고, model-based 방법에 비해 몇배나 더 나쁘게 동작한다는 것이다. 만약 현재의 시스템에 대한 모델이 존재한다면, 진짜 그 모델을 써야 한다!

메타학습법(MetaLearning)

강화학습에서 자주 등장하는 주제 중 하나는 하나의 작업으로부터 학습시킨 policy가 다른 작업에 대해서도 generalize할 수 있다는 것이다. generalization의 간단한 형태를 들자면, LQR 문제에서도 시간 축을 바꾼 상태에서도 높은 성능을 얻을 수 있는 것을 들 수 있다. 이 말은, 시간축을 마음대로 변화시켜도, policy가 여전히 높은 성능을 얻을 수 있느냐 하는 것이다.

 이걸 확인하는 방법은 무한대의 시간 축에 대해서 cost가 어떻게 변하는지를 확인하는 것이다. 만약 우리가 nomial control을 한다면, 이 제어를 실제 관측점에 대입해보고, Ricatti 방정식을 풀어서, 무한 시간축에 대한 컨트롤러를 만들수 있게 된다. 예측한대로 된다면, quadrotor 모델에 대해서는 거의 optimal하게 동작할 것이다.

 그러면 model-free한 접근 방식은 어떨까? 학습된 컨트롤러가 시간축에 대해서 generalize될 수 있을까? model-free 방법론을 사용하게 되면,  고정된 컨트롤러에 종속되게 되지만, 이와는 상관없이 무한 시간대에 대해서 테스트를 진행할 수 있다. 결과는 아래와 같다.

 Policy Gradient에 대한 에러 축은 전 영역에 걸쳐 있고, 여기서 median값은 2000회를 넘어서면서 무한대로 간다. 무슨 말이냐면 무한대로 펼쳐보았을때, 컨트롤러 입장에서는 안정화(stabilizing)가 되어야하며 이렇게 되어야 trajectory가 발산하지 않게 되는 것이다. 안정화에 필요한 필요 충분 조건은 행렬 \(A+BK\)에 대해서 모든 eigenvalue의 값이 1보다 작아야 한다는 것이다. 이 말이 말이 되는 것이, closed-loop system은 다음과 같은

$$ x_{t+1} = (A+BK)x_{t} + e_{t} $$

수식을 가지는데, 이때 \(A+BK\)가 1보다 큰 eigenvalue를 갖게 된다면, 이어지는 eigenvector는 급격히 exponential하게 증가한다. 이렇게 다양한 탐색 방식이 유한한 시간대에서 안정화된 control policy를 찾는데 얼마나 걸리는지를 그래프로 표현할 수 있다. 참고로 nominal control은 한 시뮬레이션을 통해서도 policy를 찾을 수 있다고 해보자.

 Uniform Sampling이나 random search 방식은 결과적으로는 안정화된 policy만을 찾는 경향이 있지만, 안정화를 검증하는데 있어 수백번 정도의 시뮬레이션이 필요하다. 반면 Policy Gradient의 경우에는 전체 시간에서 90%에 달하는 시간동안에도 안정된 policy를 찾지 못했고, 수천번의 시뮬레이션이 진행되도 여전히 찾지 못했다.

덜 다듬어진(coarse) 모델은 모든 것들을 할 수 없다.

 비록 내가 기대한 것이 잘 설정된 coarse 모델이 어떠한 동작에 대해서도 model-free를 적용한 방법보다 성능이 더 좋게 나올 거라는 것이었지만, 내가 강조하고 싶었던 것은 우리가 model-free의 한계에 대해서 아는 것 이상으로 model-based RL의 한계에 대해서 알지 못한다는 것이다. 평가의 복잡도가 선형성이라는 것을 감안하더라도, time-invariant system로의 적용은 여전히 이론적으로 도전이 남아있는 부분이기도 하다. 비선형 시스템이라면 일은 더 어려워지게 된다. 우리는 여전히 LQR에 대한 nomial control의 한계와 단점에 대해서 완전히 이해하지 못하고 있고, 또한 만족스런 제어 performance를 달성하기 위해서 얼마나 모델의 coarse 측면이 투영되어야 할지 잘 모르고 있다. 이후 포스트에서 이런 한계의 일부와 현대의 제어 시스템에서 1등할 수 있는 모델을 학습하기 위해 필요한 문제들에 대해서 소개해보고자 한다.

댓글