티스토리 뷰

Study/AI

[RL] Total Control

생각많은 소심남 2019. 2. 19. 19:17

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

  이전에 다뤘던 이유와 더불어서, 내가 강화학습의 재기에 흥미를 느꼈던 이유는 강화학습이 내가 사랑하는 두가지 영역의 교차점에서 동작하기 때문이다. 바로 머신러닝과 제어 분야 말이다. 이 교차점에 대해서 조금이라도 이해한다는 건 매우 신기한 일이다. 그리고 각각의 영역에서 사용되었던 기법들 역시 자주 사용할 수 있다. 제어는 잘 정의된 모델로부터 복잡한 행동을 설계하는 이론을 말하는데, 이에 비해 머신러닝은 데이터만 딸랑 있는 상태에서 복잡하고 모델이 정의되지 않은(model-free) 예측을 할 수 있다.

 제어 이론의 핵심은 입력과 출력으로 이뤄진 하나의 dynamical system이라는 것이다. 이런 시스템은 현재 상태와 입력에 대해서 반응할 수 있는 내부 상태 변수(internal state)를 가지고 있고, 출력은 상태와 입력으로 이뤄진 어떤 함수로 구성되어 있다. 그래서 만약 입력이 주어지지 않는다면, 전체 시간동안 미래를 예측하는데 있어 상태값이 필요하게 된다.

 간단한 예를 들자면, 뉴턴의 법칙을 들 수 있다. 만약 우리가 1m상공에 날고있는 quadrotor를 2m로 띄우고 싶다고 해보자. 해당 위치를 올리기 위해서는 상승력을 만들기 위한 프로펠러 속도를 증가시켜줘야 한다. 이때 프로펠러 속도는 입력이 된다. 이때 힘은 또다른 입력으로 작용할 수 있는 중력에 대응할 수 있을 만큼 충분히 커야 한다. 이때의 dynamics는 뉴턴의 법칙을 따르게 되는데, 전체의 가속도는 전체의 힘에서 중력을 뺀값에 비례하게 된다. 그리고 이 값은 quadrotor의 질량에 반비례하게 된다. 속도는 이전 속도에 약간의 가속도를 더한 값과 같게 될 것이고, 위치는 이전의 위치에 몇배의 속도를 더한 값과 같아지게 된다. 위의 수식들을 통해서 우리는 quadrotor를 원하는 높이까지 올리는데 필요한 힘의 크기를 구할 수 있다. 이때 system의 상태는 위치와 속도의 집합으로 구성되어 있다고 볼 수 있다.

 위의 dynamical system을 difference equation 형태로 써볼 수 있다.

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

여기서 f는 deterministic한 함수이며, 현재 state와 현재 입력, 그리고 오차 데이터인 \(e_{t}\)를 가지고 다음 state가 어떤 것인지를 알려준다. \(e_{t}\)는 system상의 랜덤한 noise 일수도 있고, 모델에서 시스템적으로 내재되어 있는 오차일 수도 있다. 간단하게 하기 위해, \(e_{t}\)를 랜덤하다 라고 가정해보자.

 이상적인 제어(optimal control)은 특정 목표치를 최소화할 수 있는 입력을 찾는 것이다. 만약 가정하기를 매순간 우리가 현재의 \(x_{t}\)와 \(u_{t}\)에 대해서 약간의 reward를 받는다고 했고, 이를 최대화하기를 원한다고 해보자. 수학적으로 풀어보면, 다음과 같은 최적화 문제를 푸는 것이 목표가 된다.

\( maximize  \;\;   \mathbb E_{e_{t}}[\sum_{t=0}^{N}R_{t}[x_{t}, u_{t}]] \)
\( subject\;to \;\; x_{t+1} = f(x_{t}, u_{t}, e_{t}) \)

 위의 수식은 다시 말해, N 시간에 걸쳐서 예상되는 기대치(reward)를 최대화 하는 것인데, 이 값은 제어 데이터인 \( u_{t}\)에 대한 것이고, 이 값 자체는 상태 전환 규칙(state transition rule) f에 의해서 정의된 dynamic에 의해 결정된다는 것을 의미하는 것이다. 만약 당신이 최적화된 사람이고, 제어 엔지니어가 될 준비가 되었다면, 현재 직면해 있는 문제를 이상적인 제어 문제로 모델링해보고, 선호하는 solver를 사용하면 된다. 이렇게 하면 문제가 풀린다. 내가 농담하는 것처럼 보이겠지만 이런 방식으로 정확하게 해결되는 제어 문제들이 많다. 그리고 이런 것들을 해결하기 위해서 사용된 초기 알고리즘 중 하나가 역전파 방식(back propagation)이다. 

 f에 대한 또다른 예가 바로 Markov Decision Process (MDP)를 사용하는 것이다. 여기서 \(x_{t}\)가 discrete한 값이고, \(u_{t}\)는 discrete한 제어 action이라고 해보자. \(x_{t}\)와 \(u_{t}\)를 활용해서 \(x_{t+1}\)에 대한 확률 분포를 정의할 수 있다. MDP에서는 모든 값들이 확률 표로 작성될 수 있고, 결국 문제는 dynamic programming을 활용해서 해결할 수 있다.

 그럼 여기에 학습이라는 개념을 넣어보자. 만약 우리가 f에 대해서 알지 못한다면 어떡할까? 앞에서 언급했던 quadrotor 문제에서도 주어진 제어 접압에 대해서 프로펠러에 의해서 받는 출력 힘에 대해서 알지 못하고 있다. 또는 뭔가 매우 복잡한 뭔가를 가지고 있을 수 있다. 예를 들어 서버와 냉각 시스템간의 복잡한 열 전달이 발생하는 데이터 센터와 같은 것 말이다.

 여기서 시도해볼 수 있는 몇가지가 있을 수 있다. 우선 시스템이 어떤 입력 환경에 적합한 것인지를 확인하기 위해서 몇가지 실험을 돌려본 후에 dynamics 모델을 정의할 수 있다. 그러고 난 후에 해당 모델을 optimal한 제어 문제에 사용해볼 수도 있다. 어떤 시스템에서는 이렇게 접근하는 것이 의미가 있다. 특히 quadrotor 같은 경우에서는 실제 제어를 하는데 단지 몇가지 변수만 필요하기 때문에 간단한 실험을 통해서 개별적으로 판단할 수 있다.

 이것보다 좀 더 복잡한 시스템에서는 매개변수가 관여하는(parametric) 모델을 닫힌 형태로(closed-form)로 표현하는 것이 어려울 수 있다. 이런 경우에 대신 취할 수 있는 방법이 기존의 모델들을 모두 무시하고 현재 state \(x_{t}\)에 대한 관찰값을 근거로 한 reward를 그냥 증가시켜보는 것이다. 이런 방식은 이전 포스트에서 내용 중 강화학습의 본질 분석(Prescriptive analytics) 적인 측면과 밀접하게 연관되어 있다. 이런 prescriptive analytics가 단순히 처음부터 제어를 만들어내는데 유용할 뿐만 아니라, 모델링되지 않은 움직임으로 인해서 시간에 따라 모델이 움직이는 것에 대해서도 도움이 될 수 있다. 또한 제어에 대한 본연적으로 접근하는 방식은 inference task상에서 시간에 관련되어 있는 중요한 정보에서 벗어날 수 있고, 어쩌면 400년동안 밝게 빛나온 물리학적 지식을 제어 설계 단계에서 배제시킬 수도 있게 된다.

 이런 서로 다른 접근 방식을 평가하는데 있어 핵심적인 질문은 우리가 dynamical한 시스템을 이상적으로 동작하기 위해서는 해당 시스템을 얼마나 잘 이해하고 잘 모델링을 해야 하냐는 것이다. 그리고 약간의 기존 지식만 가지고, 고효율 제어를 하기 위해서는 시스템을 효과적으로 찾고 탐색할 방법이 있을까?

 위의 질문이 바로 강화학습을 활용한 과거의 핵심적인 문제의 요점이 된다. 이 업계에서 일한 경험에서 얻은 놀라움으로는 데이터가 얼마나 필요한지, 또는 어떤 방식이 조금더 또는 덜 효율적인지에 대해서 잘 알려져 있지 않다는 것이다. 몇몇 다음 포스트를 통해서 잘 알려지지 않은 dynamics에서 optimal control을 찾기 위한 방법들의 장단점에 대해서 언급해보고자 한다.

댓글