2016년 7월 12일 화요일

Policy Gradients

직관적 이해

제어할 대상 시스템(환경, $env$), 시스템에 가하는 $action$, 이 $action$을 만들어 내는 제어기(DNN, CNN, or RNN)가 있다고 하자. 
요점은 $env$에 가해지는 최적 $action$ 샘플링 하나를 얻는 것이라기 보다, 랜덤 샘플링(가능한 여러 $action$ 중의 하나)을 제공하는 확률 분포(DNN 출력이 만드는)를 개선하는 것이다. 
$env$ 상태(state, 이미지 등) 입력에 대해 제어기(DNN)가 준 랜덤 $action$을 시스템($env$)에 가했을 때 받은 보상값($reward$)을 loss에 반영하여 DNN 학습을 반복하면, 이 샘플링을 발생 시켰던 분포(DNN 출력)가 $reward$를 크게하는 방향으로 개선된다.  



수식

신경망 $\pi$의 출력은 확률분포이며 기대값의 가중치로 사용된다. 아래 식 우측 [~] 부분은 loss의 grad이다.  




수렴성

Policy gradient는 여러 RL(강화 학습) 학습 방법 중에서 Alphago가 사용하였다. 확률분포가 $reward$를 크게하는 방향으로 수렴함을 확인해 보자.

용어들은 $^{각주1}$을 참고한다.


RL에서 학습이란 파라메터 값을 잘 바꾸어 분포를 조정함에 의해 $action$ 샘플링이 주는 보상함수를 높이는 것이 목표이다.
보상함수 $f(x)$ 기대치를 높이는 것이 목표이므로

$\nabla_\theta{E_x[f(x)]}$

처럼 기대치 $E$의 $\theta$에 대한 구배를 계산한다. 즉, 구배를 계산하여 갱신하면 $\theta$ 값을 바꿀 수 있다. $\theta$를 통해 $p$가 바뀌게 되고 여기서 샘플링되는 $action$이 바뀌게 된다. 위 식은 약간의 계산 절차를 통해

$E_x{[f(x){\nabla_\theta}\log{p(x)}]}$

가 되고, 이 값은 샘플링된 모든 $x$에 대해, 보상함수 $f(x)$와 ${\nabla_\theta}\log{p(x)}$의 곱에 대한 평균이다.




[from Karphaty's blog]

간단한 2차원 Gaussian $p(x)$로 위 수식에 따른 샘플들과 그 보상값이 분포를 어떻게 바꾸는지 확인해 보자.
$\log{p(x)}$에 대한 분포 파라메터(여기서는 평균값 $m$, 따라서 $p(x;\ m)$이다)에 대해 도함수를 계산하면

${\nabla_\theta}\log{p(x)}$ = $c_1(x-m)$

이다. 즉, 평균점 $m$에서 샘플 점 $x$를 향하는 벡터가 된다. 첫번째 그림에서 파란색 점은 샘플점들을 나타내고 화살표는 그 방향을 보여준다.

두번째 그림에서 샘플들 위치에서 얻어진 보상함수 값을 표현한다. 특정 샘플은 +1의 보상치(녹색)를 가지고 나머지는 -1 보상치(주황색)를 가진다.
보상치와 벡터들을 곱하고 평균을 내면 분포 파라메터(여기서는 mean 위치 $m$)가 움직여야 하는 방향이 계산되고, 왼쪽 아래 방향이 나오게 된다.

계산된 방향에 따라 분포(평균 위치)를 조정하면 세번째 그림이 되고, 이제 새로운 분포에서 샘플링된 점들은 보상치가 +1이 될 가능성이 더욱 높아지게 된다.



실제 적용 예OpenAI의 pong게임을 이용한 것으로 초기에는 컴퓨터가 주로 이기나, 학습이 진행될수록 agent가 이기는 확률이 높아진다.




(각주 1)

$\bullet$ $p(x;\theta)$: 입력 $x$와 결합된 파라메터 $\theta$의 조합으로 값 $p$가 결정된다는 의미이고 $p$는 확률 분포(비슷한 내용으로 여기 참고)이다.  즉, $p$는 agent action을 만들어 내는 policy를 나타낸다. agent가 선택하는 action은 확률분포 $p$에서 샘플링을 통해서 생성된다.

예를 들어 $p$가 어떤 입력에 대해 action분포를 만들어 내는 CNN으로 구성된 policy network이라면, 이미지 $I$가 입력 되었을 때 action에 대한 분포인 $p(a|I;\theta)$가 되고, $\theta$는 넷 내부 weights 등 파라메터가 된다.

$p(x)$는 $p(a)$이고, 분포 $p(a)$를 바꾸려면 이미지 입력에 의해 만들어지는 $p(a)$에 관여하는 파라메터 $\theta$를 바꾸어야 한다.


$\bullet$ $f(x)$: 함수 $f$ 인자인 $x$는 $p$상에서 sampling되며 선택된 샘플(action)이 만들어 내는 보상 함수(scalar값을 가짐)이다. 선택된 action으로 끝까지 게임을 진행했을 때 win, fail에 대한 보상치이다.





References
[1] Mastering the game of Go with deep neural networks and tree search, Nature, 2016.
[2] http://karpathy.github.io/2016/05/31/rl/
[3] 한정수, 정책기울기 값 강화학습을 이용한 적응적 QoS라우팅 기법연구, 컴퓨터정보학회, 2011.

[4] What's right way of implementing policy gradient?