sliver__

딥살사 / 폴리시 그레디언트 본문

CS/강화학습

딥살사 / 폴리시 그레디언트

sliver__ 2021. 10. 23. 13:15
728x90

[딥살사 이론]

딥살사는 살사 알고리즘을 사용하며 큐함수를 인공신경망으로 근사합니다.

 

적용할 환경은 에이전트, 움직이는 장애물 3개, 목적지 입니다.

====================================

위 문제의 상태정의는 아래와 같습니다.

1. 에이전트에 대한 도착지점의 상대위치 x,y

2. 도착지점의 라벨

3. 에이전트에 대한 장애물의 상대 위치 x,y

4. 장애물의 라벨

5. 장애물의 속도

====================================

 

기존의 살사의 큐함수 업데이트는 아래와 같습니다.

\(Q_t(S_t,A_t) \leftarrow  Q_t(S_t,  A_t) + \alpha(R_{t+1} + \gamma Q(S_{t+1}, A_{t+1})  - Q(S_t, A_t))\)

 

하지만 딥살사는 인공신경망을 사용하여 업데이트하며 경사하강법을 사용합니다.

경사하강법을 사용하려면 오차함수를 정의해야 합니다.

오차함수는 MSE(Mean Squared Error)를 사용합니다.

 

위 수식에서 정답과 예측을 정의할 수 있습니다.

정답 : \(R_{t+1} + \gamma Q(S_{t+1}, A_{t+1})\  )

예측 : \(Q(S_t, A_t))\)

 

\(MSE = (정답 - 예측)^2 = (R_{t+1} + \gamma Q_\theta (S_{t+1}, A_{t+1}) - Q_\theta(S_t, A_t))^2\)

 

딥살사는 현재 상태에서의 행동한 큐함수 

그리고 다음상태에서 행동한 큐함수를 근사시켜 MSE를 구하여

모델 파라미터를 업데이트합니다.

 

[폴리시 그레디언트]

이전까지는 가치기반 강화학습이였다면 폴리시 그레디언트는 정책기반 강화학습입니다.

가치기반 강화학습은 인공신경망의 출력함수로 각 행동의 큐함수 값을 얻었다면,

정책기반 강화학습은 출력함수로 각 행동을 할 확률을 구합니다.

그래서 두 학습방법의 차이점은 출력함수의 함수입니다.

정책기반 강화학습의 출력층은 softmax 함수를 사용합니다.

 

\(s(y_i) = {e^{y_i} \over \sum_j e^{y_j}}\) 

 

정책기반 강화학습은 정책을 근사시켜 누적보상의 최대합을 구하는게 목표이고

목표함수를 위하여 정책의 인공신경망을 업데이트해야 합니다.

정책을 표현하는 수식은 아래와 같습니다.

\( policy = \pi_{\theta} (a|s)\)

 

목표함수는 \(J(\theta)\)로 나타내며 아래와 같이 표현합니다.

\(maximize(J(\theta)\)

 

목표함수를 최대화하기 위해서 경사상승법을 사용합니다.

정책신경망 업데이트의 수식은 아래와 같습니다.

\(\theta_{t+1} = \theta + \alpha \nabla_\theta J(\theta)\)

 

가치함수로 나타내는 목표함수의 정의는 아래와 같습니다.

\(J(\theta) = v_{\pi_\theta}(s_0)\)

 

다음스텝의 정책을 업데이트하기 위해서는 목표함수의 미분값이 필요합니다.

양변을 미분하면 아래와 같습니다.

\(\nabla_\theta J(\theta) = \nabla_\theta v_{\pi_\theta} (s_0)\)

 

\(\nabla_\theta J(\theta) = \sum_s d_{\pi_\theta} (s) \sum_a \nabla_\theta \pi_\theta (a | s) q_\pi (s,a)\)

 

목표함수의 미분식을 위와 같이 표현할 수 있다고합니다.

궁금하신분은 "Policy Gradient Methods for Reinforcement Learning with Function Approximation" 논문을 참조해주세요.

 

위 수식의 의미는 가능한 모든 상태에 대해 각 상태에서 특정 행동을 했을 때 받을 수 있는 큐함수의 미분값입니다.

\(d_{\pi_\theta} (s)\) 는 s 상태에 에이전가 있을 확률을 나타냅니다.

 

\(\nabla_\theta J(\theta) = \sum_s d_{\pi_\theta} (s) \sum_a \pi_\theta (a|s) \times {\sum_a \nabla_\theta \pi_\theta (a | s) \over \sum_a \pi_\theta (a|s) } q_\pi (s,a)\)

 

로그함수의 미분으로 아래와 같이 표현됩니다.

 

\(\nabla_\theta J(\theta) = \sum_s d_{\pi_\theta} (s) \sum_a \pi_\theta (a|s) \times \nabla_\theta \log \pi_\theta (a | s) q_\pi (s,a)\)

 

그리고 기댓값의 정의는 어떠한 상태에서 모든 행동을 했을 때, 평균값을 의미합니다.

위 수식에서 \(\sum_s d_{\pi_\theta} (s) \sum_a \pi_\theta (a|s)\)는 

상태 s에서 정책에 대한 모든 행동 a를 했을 때의 값이므로 

기댓값으로 표현할 수 있습니다.

 

\(\nabla_\theta J(\theta) = E_{\pi_\theta} [ \nabla_\theta \log \pi_\theta ( a | s ) q_\pi (s,a)]\)

 

결과적으로 폴리시 그레디언트 수식은 아래와 같습니다.

\(\theta_{t+1} = \theta_t + \alpha \nabla_\theta J(\theta) \thickapprox \theta_t + \alpha[\nabla_\theta \log \pi_\theta ( a | s) q_\pi(s,a)]\)

 

그런데 폴리시 그레디언트에서는 정책에 대한 근사를 진행합니다. 

큐함수를 가지고 있지 않기 때문에 \(q_\pi (s,a)\)를 구할 수 없습니다.

 

이 값을 대체할 수 있는 방법이 중요합니다.

그 중 반환값 \(G_t\)를 사용하는 알고리즘이 REINFORCE 알고리즘입니다.

 

 

728x90

'CS > 강화학습' 카테고리의 다른 글

카트폴  (0) 2021.11.07
인공신경망 (Neural Network)  (0) 2021.10.23
근사함수  (0) 2021.10.11
살사(SARSA) / 큐러닝(Q-Learning)  (0) 2021.10.10
다이내믹 프로그래밍  (0) 2021.10.09
Comments