티스토리 뷰
<본 포스트는 UC Berkeley 교수인 Benjamin Recht 의 블로그에 올라온 글을 번역한 것입니다. 원본>
강화학습의 본질은 시간대별로 dynamic하게 변하는 시스템의 미래를 형상화하는데 이전의 데이터를 활용하는 것이다. 강화학습의 가장 흔한 예가 episodic model을 따르는 것인데, 이는 특정 단위의 action이 정의되고, 시스템 상에서 테스트되었고, 특정 단위의 reward와 state가 관찰되고, 이런 이전의 action과 reward, state 정보들이 결합되어 행동을 결정하는 policy를 향상시키는데 사용되는 것이다. 시스템과 상호반응하는 것 자체가 매우 고급지고 복잡한 모델이기도 하고, 일반적인 확률적인 최적화 방식에 비하면 조금 더 복잡하다고 고려되기도 한다. 미래의 성능을 향상시키기 위해서 수집된 데이터 모두를 잘 활용하는 방법이 있을까?
policy gradient나 random search, nomial control, 그리고 Q-learning과 같은 방법은 각각 강화학습 문제를 특정 예측 모델로 변화시켜주고, 그런 후에 해당 모델을 사용해서 평가를 도출해준다. policy gradient와 random search같은 경우에는, 문제를 0차 최적화 문제로 변형시키고, cost를 향상시키는데 해당 공식을 사용하는 방법을 취한다. Nomial Control에서는 문제를 모델 평가 문제로 변형시켜주는 방법을 취한다. 하지만 위의 방법들 중 서로간에 샘플단위당 가장 많은 정보를 효율적으로 또는 비효율적으로 뽑아내는 방법이 있을까?
이 포스트에서는 iterative learning control(ILC)에 관해서 설명할텐데, 여기서는 지난 정보를 흥미로운 방식으로 사용한다. 그리고 이 기반은 지난 포스트에서 다뤘던 간단한 PID controller에서부터 시작한다.
Iterative learning control을 위한 PID control
특정 시간을 추적하는 것을 다루는 dynamic system에 대한 문제를 고려해보자. 이 말은 특정 제어 입력 \(\boldsymbol{u} = [u_{1}, ... ,u_{N}]\)이 들어갔을때, 시스템의 출력은 가능한한 \(\boldsymbol{y} = [v_{1},...,v_{N}]\)에 가깝게 내보내는 시스템을 만들겠다는 것이다. (뒤에서 특정 sequence를 설명할때 굵은 글씨체를 사용할 것이다.) 그럼 강화학습과 매우 유사한 방법을 적용해보겠다. 다음 제어 신호를 생성하는데 있어, 시스템에 에러를 피드백해보도록 하자. 그러면 여기서 에러는 각 차이인 \(\boldsymbol{e} = [v_{1} - y_{1}, ... , v_{N} - y_{N}]\)로 얻어낼 수 있다. 이제 이산 미분(discrete derivate)값을 \(\mathcal{D}\mathbf{e}\) 라고 정의해보자. 그러면 trajectory에 따른 PID controller를 다음과 같이 정의할 수 있다.
$$ \mathbf{u}_{\mathrm{new}} =
\mathbf{u}_{\mathrm{old}} + k_P \mathbf{e} + k_I \mathcal{S} \mathbf{e} + k_D \mathcal{D} \mathbf{e} $$
여기서 각 미분값과 적분값은 연속된 sequence e에서 계산된 값이고, 이전 iteration에서의 함수에서 나온 값이 아니다. 이런 정의로 인해, ILC에 대한 특별한 구조는 정통적인 PID 방식과는 다르지만, 근본적으로는 같은 목적을 지니고 있다.
이런 구조는 사실 대부분의 제어 관련 연구자들이 "Iterative Learning Control"이란 말을 들었을 때, 떠올릴 수 있는 형태이다. 나는 이전 포스트에서도 다뤘다시피, ILC에 관해서 조금더 자세하게 설명하는 것을 좋아하는데, ILC란 controller가 하나의 task에 대해서 여러번 반복적으로 동작하고, 이전의 반복된 경험을 사용해서 제어 성능을 향상시킬 수 있는 어떠한 제어 디자인 형태를 나타낸 것이다. 같은 맥락에서, ILC와 에피소드 기반의 강화학습(episodic reinforcement learning)은 같은 문제에 대해서 다루는 서로 다른 방식이 되는 것이다. 하지만 이런 형태를 띄는 고전적인 방식은 이전에 다뤘던 PID 형태의 방법이 되겠다.
기억해야 할 것은 다음 trajectory를 만들어내기 위해서는 이전 trajectory에 대한 수많은 정보를 사용해야 한다는 것이다. 비록 해가 정해진 policy를 설계한다 할지라도, policy를 설계하는 것과는 별개로 reward 정보를 조금 더 다뤄야 한다는 것이다.
그러면 이걸 어떻게 잘 동작시킬 수 있을까? 우리가 이전에 다뤘던 간단한 quadrotor 모델을 활용해볼텐데, 이번에는 조금더 실제와 유사해지기 위해 약간 마찰을 추가해보도록 하겠다. 그러면 실제 dynamics는 아래의 형태를 띈 두가지 형태의 독립된 시스템이 될 것이다.
$$ x_{t+1} = Ax_{t} + Bu_{t} $$
$$ y_{t} = Cx_{t}$$
이때
$$ A = \begin{bmatrix}
1 & 1 \\ 0 & 0.9
\end{bmatrix}\,,~~ B=\begin{bmatrix} 0\\1\end{bmatrix}\,,~~\mbox{and}~~C=\begin{bmatrix} 1 & 0 \end{bmatrix} $$
이다.
이제 모델을 사용하지 않고, trajectory를 추적하는 이 시스템을 구해보자. 그 말은, 이 시스템의 진짜 모델에 대한 지식 없이 어떤 장소에서 특정 커브를 주행하는 것을 학습하기 위해서 iterative learning control를 사용하자는 것이다. 목표 trajectory를 얻기 위해,마우스로 다음과 같은 경로를 만들어보았다.
ILC에 대해서, 이제 위와 같은 설정의 PID Controller를 사용해보자. 사실 여기서 미분항만 사용할 것이며, 이때 \(k_{D} = 0.1 \)이고 나머지 값은 다 0으로 설정할 것이다. 그러면 처음 8번 반복을 통해서 다음과 같은 성능을 얻을 수 있다.
그리고 20번 반복하면, trajectory는 다음과 같이 얻어진다.
나쁘지 않다. 위 trajectory는 진짜 빠르게 수렴하고, 몇번 돌지 않고도 모델을 사용하지 않은 상태에서 제어 policy를 찾는데 모든 state 정보를 활용한다. 다시 말하자면, 업데이트가 이뤄지는 부분은 "D"에 대한 제어이고, 위 시스템은 시스템을 제어하는 실제 dynamics에 대한 어떠한 사전 지식을 사용하지 않았다. 놀랍게도 좋은 해로 수렴하는데 있어 이렇게 완벽한 model-free 방법을 찾는데는 100K의 에피소드도 필요하지 않았다. 조금 더 궁금한 사람들을 위해서, 여기에 위의 plot을 출력한 notebook이 있다.
양의 탈을 쓴 확률적 근사법(stochastic approximation)
어떻게 위와 같은 방식이 동작할까? 위의 경우, 모든 것들이 선형적이기 때문에, ILC 구조를 간단하게 가져갈 수 있었다. 명심할 것은 위 시스템을 구성하는 dynamics가 선형적이기 때문에, 입력을 넣었을 때, 출력을 내보내는 특정함수 \(\mathcal{F}\) 가 존재할 수 있었다는 것이다. 이게 바로 "선형적" dynamic가 의미하는 바이다.
또한, \(\mathcal{S}\)와 \(\mathcal{D}\)이 선형적 관계를 가지고 있기 때문에, 이런 값들을 하나의 행렬로 놓고 볼 수 있다. 그래서 만약 우리가 어떤 이상적인 제어값인 \(u_\star\)을 미리 알고 있고, 해당 값이 다음과 같은 \(v=\mathcal{F}u_\star\) 관계를 가지고 있다고 해보자. 그러면, 약간의 선형대수를 통해서 PID제어를 다음과 같이 재정의해볼 수 있다.
$$ u_{new} - u_{*} = \{ I + (k_{P}I + k_{I}\mathcal{S} + k_{d}\mathcal{D})\mathcal{F} \} (u_{old} - u_{*}) $$
만약 괄호안의 행렬들이 1보다 작은 eigenvalue를 가진다면, 위의 제어는 이상적인 제어 입력에 대해서 선형적으로 수렴하게 된다. 실제로, 예제에서 내가 어떤 parameter를 선택했는데, 이를 통해 contraction mapping안에 update map을 넣을 수 있었고, 이 같은 이유로 인해 8번의 반복 학습을 통해서도 좋은 결과를 얻을 수 있었다.
이 예는 주어진 어떠한 cost function 에서도 stochastic approximation이 gradient를 따르지 않는 것을 보여주는 예이다. 우리는 \(v=Fu\)라는 함수의 해를 찾으려 했고, 이를 처리하기 위한 알고리즘으로 아주 고전적인 Robbins-Monro 방법을 썼다. 하지만 이건 stochastic gradient에서 어떤 상황에 직면했느냐에 따라 다르게 적용될 부분이다. 전문가 입장에서 보면, 괄호안의 행렬이 lower triangular이고, 더불어 해당 행렬이 절대 positive definite될 수 없기 때문이다.
사실 나는 이런 간단한 선형 케이스 조차도 답변이 필요한 수많은 질문들이 있다. 어떤 dynamics가 ILC 구조에 효율적으로 적합할까? 이런 방법들이 외부 noise에 대해서 얼마나 강할까? trajectory를 추적하는 것보다도 더 복잡한 문제를 푸는데 있어 해당 방법을 사용해도 될까? 이런 질문을 통해서 우리는 강화학습에서도 가지고 있는 데이터를 활용할 수 있는 방법들이 많이 있고, 도출될 수 있는 방법들이 더 많다는 것을 알 수 있다.
'Study > AI' 카테고리의 다른 글
[ETC] Atari-wrapper 설치하다 error가 발생하는 경우 (0) | 2019.04.30 |
---|---|
[RL] Windows 10에서 OpenAI Gym & Baselines 설치하기 (13) | 2019.04.30 |
[RL] Lost Horizons (0) | 2019.04.17 |
[AWS] Sagemaker GPU instance 추가 (6) | 2019.03.14 |
[ETC] Inference를 위한 Single Board Computer (2) | 2019.03.07 |
[RL] The Best Things in Life Are Model Free (0) | 2019.03.06 |
[RL] Clues for Which I Search and Choose (0) | 2019.03.05 |
- Total
- Today
- Yesterday
- Kinect for windows
- 파이썬
- Off-policy
- Gan
- ColorStream
- RL
- windows 8
- PowerPoint
- 한빛미디어
- Kinect
- Pipeline
- ai
- End-To-End
- SketchFlow
- bias
- reward
- DepthStream
- arduino
- 딥러닝
- processing
- Offline RL
- Windows Phone 7
- Kinect SDK
- 강화학습
- TensorFlow Lite
- dynamic programming
- Variance
- Policy Gradient
- Distribution
- Expression Blend 4
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |