강화학습 - 정책 기반 에이전트(1)

BSH·2023년 5월 27일
0

강화학습_basic

목록 보기
11/12

가치 기반 에이전트는 가치 함수만 가지고 액션을 선택하기 때문에 명시적인 정책 함수가 존재하지 않았습니다. 이번에는 정책 함수를 가지고 액션을 선택하는 정책 기반 에이전트에 대해서 알아보겠습니다.

Policy Gradient

가치 기반 에이전트가 액션을 선택하는 방식은 각 상태에 s에 따라 액션이 변하지 않기 때문에 결정론적입니다. 이 에이전트가 가위바위보를 한다면 전략이 정해져 있기 때문에 쉽게 간파당합니다. 반면 정책 기반 에이전트는 확률적 정책을 취할 수 있습니다. 정책 함수가 π(s,a)=P[as]\pi(s, a)=\mathbb{P}[a|s]로 상태 s에서 할 수 있는 확률 분포를 나타내기 때문입니다. 요약하면 가치 기반 에이전트에 비해서 더 유연한 전략을 가질 수 있습니다.

또 액션공간이 연속적인 경우를 생각해보겠습니다. 어떤 액션값이 0에서 1사이의 값을 가진다고 하면 가치 기반 에이전트가 작동하려면 모든 a에 대해서 Q(a,s)Q(a, s)값을 최대로 하는 인풋 a를 찾아야 합니다. 이는 그 자체로 하나의 최적화 문제입니다. 액션이 유한하면 찾을 수 있지만 무한한 경우에는 일일이 넣어서 확인해보기가 어렵습니다. 그래서 Q(s,a)Q(s, a) 기반 에이전트가 작동하기 힘듭니다. 정책 기반 에이전트는 함수를 통해 바로 액션을 뽑아주기 때문에 문제되지 않습니다. 또 가치 기반 방봅론에 비해 환경에 숨겨진 정보가 있거나 환경 자체가 변하는 경우에도 더 유연하게 대처할 수 있다는 점이 알려져 있다고 합니다.

문제는 이전과 동일합니다. MDP를 모르는 상태로 뉴럴 네트워크를 이용해 정책 네트워크를 강화하는 방법을 차근차근 알아보겠습니다.

목적 함수 정하기

정책 네트워크를 πθ(sa)\pi_{\theta}(s|a)로 표현하겠습니다. 주어진 환경에 πθ(sa)\pi_{\theta}(s|a)를 따라 움직이는 에이전트를 통해 경험을 쌓게하고 그 경험으로 πθ(sa)\pi_{\theta}(s|a)를 강화해야합니다. gradient descent방법을 이용해서 파라미터를 업데이트해야하는 것은 짐작해볼 수 있습니다. 그러나 손실함수를 어떻게 정의할지 고민될 수 있습니다.

정책 네트워크 업데이트는 다른 패러다임으로 접근해야합니다. 손실 함수를 줄이는 방향이 아닌 정책을 평가하는 기준을 세워 그 값을 증가시키도록 gradient를 업데이트해야 합니다. 이제 목적이 정해졌습니다. 주어진 정책 네트워크 πθ(sa)\pi_{\theta}(s|a)가 얼마나 좋은지 평가하는 방법을 찾는 것입니다. 평가함수를 J(θ)J(\theta)라고 하고 π\pi를 인풋으로 받아 점수를 리턴합니다. 이 함수를 알 수 있다면 값을 증가시키는 방향으로 gradient ascent방법을 사용해야합니다.

π\pi가 고정되어 있어도 에피소드마다 서로 다른 경우가 나오기 때문에 아래와 같이 기댓값을 사용해 평가 함수를 정의합니다.

J(θ)=Eπθ[Σtrt]J(\theta)=\mathbb{E_{\pi_{\theta}}}[\Sigma_{t}r_{t}]

리턴의 기댓값은 또 가치 함수의 정의이기 때문에 시작상태가 s0s_{0}로 고정되어 있다면 s0s_{0}의 가치라고 볼 수 있습니다.

J(θ)=Eπθ[Σtrt]=vπθ(s0)J(\theta)=\mathbb{E_{\pi_{\theta}}}[\Sigma_{t}r_{t}]=v_{\pi_{\theta}}(s_{0})

시작 상태가 s0s_{0}로 고정되어 있다는 가정하에 J(θ)J(\theta)s0s_{0}의 value입니다. 시작 상태가 고정되어있다는 점은 무리한 가정은 아닙니다. 실제 체스, 바둑, 스타크래프트 등의 경우 시작상태가 항상 고정되어있습니다. 그러나 시작상태가 고정된 것이 아니라도 시작 상태 s의 확률 분포d(s)d(s)가 정의되어 있어야 합니다. 그러면 식은 아래와 같습니다.

J(θ)=ΣsSd(s)×vπθ(s)J(\theta)=\Sigma_{s\in S}d(s)\times v_{\pi_{\theta}}(s)

이제 gradient를 구해 파라미터를 업데이트 하면 됩니다.

θ=θ+α×θJ(θ)\theta'=\theta+\alpha\times\nabla_{\theta}J(\theta)

일반적인 딥러닝에서는 손실함수를 만들어 gradient descent를 사용하지만 정책 평가를 할 때는 평가 점수를 최대화 하기 위해 gradient ascent를 사용합니다. 일반적으로 MDP에서 바로 θJ(θ)\nabla_{\theta}J(\theta)를 구하기 어려워 1-step MDP에서 부터 θJ(θ)\nabla_{\theta}J(\theta)를 구하는 것부터 진행하겠습니다.

1-step MDP

1 step MDP는 말그대로 한 스텝만 진행하고 바로 에피소드가 끝나는 MDP입니다. 처음 상태s0s_{0}에서 액션 a를 하고 보상 Rs,aR_{s, a}를 받고 종료합니다. 스텝이 하나 밖에 없기 때문에 리턴이 곧 보상과 같습니다. 처음 상태 s0s_{0}는 위에 정의된 것 처럼 확률 분포 d(s)d(s)를 통해 정해집니다. 그러면 J(θ)J(\theta)는 아래와 같이 나타낼 수 있습니다.

J(θ)=ΣsSd(s)×vπθ(s)=ΣsSd(s)ΣaAπθ(s,a)Rs,a\begin{matrix} J(\theta)&=&\Sigma_{s\in S}d(s)\times v_{\pi_{\theta}}(s)\\ &=&\Sigma_{s\in S}d(s)\Sigma_{a\in A}\pi_{\theta}(s, a)R_{s, a} \end{matrix}

양변에 그라디언트를 취해줍니다.

θJ(θ)=θΣsSd(s)ΣaAπθ(s,a)Rs,a\nabla_{\theta}J(\theta)=\nabla_{\theta}\Sigma_{s\in S}d(s)\Sigma_{a\in A}\pi_{\theta}(s, a)R_{s,a}

이 값을 구하기만 하면 되지만 Rs,aR_{s, a}값을 모르니 계산이 불가능합니다. model-free 상황이기 때문에 보상과 정보 행렬을 모르기 때문입니다. 안다고 하더라도 시그마를 통해 모든 상태 s에 대해 모든 액션 a를 한 상황을 더해줘야 하는데 무한한 상태에서는 불가능합니다. 그러면 이때까지 계속 얘기해온 샘플 기반 방법론으로 식을 바꿔보겠습니다.

θJ(θ)=θΣsSd(s)ΣaAπθ(s,a)Rs,a=ΣsSd(s)ΣaAθπθ(s,a)Rs,a=ΣsSd(s)ΣaAπθ(s,a)πθ(s,a)θπθ(s,a)Rs,a=ΣsSd(s)ΣaAπθ(s,a)θπθ(s,a)πθ(s,a)Rs,a=ΣsSd(s)ΣaAπθ(s,a)θlogπθ(s,a)Rs,a\begin{matrix} \nabla_{\theta}J(\theta)&=&\nabla_{\theta}\Sigma_{s\in S}d(s)\Sigma_{a\in A}\pi_{\theta}(s, a)R_{s, a}\\ &=&\Sigma_{s\in S}d(s)\Sigma_{a\in A}\nabla_{\theta}\pi_{\theta}(s, a)R_{s, a}\\ &=&\Sigma_{s\in S}d(s)\Sigma_{a\in A}{\pi_{\theta}(s, a)\over \pi_{\theta}(s, a)}\nabla_{\theta}\pi_{\theta}(s, a)R_{s, a}\\ &=&\Sigma_{s\in S}d(s)\Sigma_{a\in A}\pi_{\theta}(s, a){\nabla_{\theta}\pi_{\theta}(s, a)\over \pi_{\theta}(s, a)}R_{s, a}\\ &=&\Sigma_{s\in S}d(s)\Sigma_{a\in A}\pi_{\theta}(s, a)\nabla_{\theta}log\pi_{\theta}(s, a)R_{s, a}\\ \end{matrix}

마지막으로 기댓값 연산자를 씌워주면 아래와 같은 식이 만들어집니다

θJ(θ)=Eπθ[θlogπθ(s,a)Rs,a]\nabla_{\theta}J(\theta)=\mathbb{E_{\pi_{\theta}}}[\nabla_{\theta}log\pi_{\theta}(s, a)R_{s, a}]

이제 πθ(s,a)\pi_{\theta}(s, a)로 움직이는 에이전트를 환경에 가져다 놓고 데이터를 샘플링하여 평균을 계산해 학습을 시킬 수 있습니다.

일반적인 MDP에서의 Policy Gradient

1-step MDP를 봤으니 일반인상황으로 확정된 식을 살펴보겠습니다.

θJ(θ)=Eπθ[θlogπθ(s,a)Qπθ(s,a)]\nabla_{\theta}J(\theta)=\mathbb{E_{\pi_{\theta}}}[\nabla_{\theta}log\pi_{\theta}(s, a)Q_{\pi_{\theta}}(s, a)]

보상 R이 Q로 바뀌었습니다. 의미상으로 s에서 a를 한 보상대신 얻는 리턴값으로 바뀌었습니다. 한 스텝이후 종료되는 것이 아닌 이후에 여러 스텝이 있기 때문에 이후에 받을 보상까지 전부 더해준다고 생각하면 됩니다. 위의 식은 Polcy Gradient Theorem이라고 부릅니다. 자세한 증명도 있다고 하는데 책에서는 다루지 않는다고 하네요. 책을 다 읽고 한번 찾아봐야겠습니다.

profile
컴공생

0개의 댓글