-
[강화학습] Policy Gradient와 Actor-Critic[Study] Data Science/머신러닝&딥러닝 2022. 1. 25. 01:56
이전까지는 에이전트가 가치함수를 기반으로 행동을 선택하고, 가치함수를 업데이트하면서 학습을 하는 '가치기반 강화학습(value-based Reinforcement Learning)'을 배웠다. 이번에는 가치함수를 바탕으로 행동을 선택하는 것이 아니라, 상태에 따라 바로 행동을 선택하는 '정책기반 강화학습(Policy-based Reinforcement Learning)'에 대해 정리해보고자 한다.
Policy Gradient : 목표함수의 경사상승법을 따라 근사된 정책을 업데이트하는 방식
'정책기반 강화학습'의 목표도 다른 강화학습에서와 동일하게 "누적보상을 최대로 하는 최적의 정책"을 찾는 것이다. 다만 정책기반 강화학습에서는 가치함수를 바탕으로 정책을 찾는 것이 아니라, input이 '상태', output이 '각 행동을 할 확률'인 인공신경망을 통해 정책을 직접적으로 근사하여 찾는다. 또한 이러한 인공신경망을 사용하는 경우, 인공신경망의 계수(가중치)가 distribution of states와 action selection에 영향을 미치게 되어 궁극적으로 에이전트가 받는 누적보상에까지 영향을 미치게 된다.
(참고) "인공신경망의 계수(가중치)가 에이전트가 받는 누적보상에 영향을 미치게 된다"는 의미에 대하여
딥러닝에서 학습은 정답과 예측값의 차이인 오차를 최소화하는 것이 목표이다. 오차를 최소화하기 위해 신경망의 가중치와 편향을 오차를 최소화하는 방향으로 업데이트하게 된다. 그렇다면 어떻게 업데이트를 할 수 있을까?
앞서 도출한 오차를 토대로, 신경망의 가중치와 편향이 이 오차가 발생하는데 얼마만큼 기여했는지를 계산한다. 이와 같이 '오차로부터 가중치와 편향의 오차기여도를 계산한다는 점'이 오차가 거꾸로 전파되는 것 같다고 하여 '역전파(back-propagation)'이라는 이름이 붙기도 하였다. 오차기여도는 오차에 대한 편미분값으로 계산한다.
여기서 편미분이라는 것은 가중치 또는 편향값을 증가/감소시켰을 때, 오차가 어떻게 변화하는지를 나타내주는 역할을 한다. 즉 오차의 편미분값을 통해 오차를 최소화하기 위해 가중치 또는 편향값을 증가시켜야하는지 혹은 감소시켜야하는지를 판단할 수 있게된다.즉 인공신경망으로 정책을 대체할 수 있기 때문에, 신경망의 가중치값인 θ을 활용해 정책을 표현하게 된다.
πθ(a|s)
또한 최적의 정책을 통해 누적보상을 최대로 하는 것이 곧 목표이므로, score function J(θ)를 활용해 목적함수(=비용함수, 손실함수라고도 함)를 아래와 같이 나타낼 수 있다. 한편 하나의 에피소드로 종료되는 환경에서 score function J(θ)은 start value로도 대체할 수 있다. 최초의 state가 정해져있고, 이 state에서 주어진 policy를 토대로 끝까지 episode를 진행했을 때 받는 보상의 기댓값이 곧 가치함수이기 때문이다.
J(θ) in episodic environments maximize J(θ)
그렇다면 이 목표함수를 어떻게 최적화할 수 있을까? 앞서 딥러닝에서의 학습방법을 간단히 서술했던 것과 같이, 목표함수를 미분하여 이 목표함수에 영향을 주는 정책의 가중치를 업데이트할 것이다. 다만 딥러닝에서의 목표함수는 오차를 최소화하는 것이기 때문에 '경사하강법(Gradient Descent)'을 사용하지만, 정책기반의 강화학습에서는 누적보상을 최대화하는 것이기 때문에 '경사상승법(Gradient Ascent)'를 사용한다.
'경사상승법'에 따라 정책의 가중치를 업데이트하는 과정을 수식으로 표현한다면 다음과 같다.
따라서 업데이트를 하기 위해 J(θ)의 미분값을 구해야할 것이다. 앞서 언급한 표현방법에 의해, ▽J(θ)는 식 (1)과 같으며, sutton의 교과서에서 언급된 "Proof of Policy Gradient Theorm"에 따라서, 식(1)을 식(2)와 같이 변환할 수 있다. 식(2)에서 d(s)는 특정 state s에 agent가 있을 확률이며, 이 확률과 해당 state에서의 value function을 곱해서 구한 기댓값이라고 볼 수 있다. 이후 계산의 용이성을 위해 식(2)의 우변에 π(a|s)를 곱하고 나누어 식(3)을 도출하고, 로그함수 미분의 성질을 활용해, 식(3)을 식(4)와 같이 정리할 수 있다. 최종적으로 Σd(s)Σπ(a|s)는 특정 state에서 action을 선택할 확률이므로, 확률*얻어진 값 = 기댓값 이라는 성질을 활용해 Expectation의 형태로 나타낼 수 있다.
식(1): J(θ)의 미분  다시 처음의 정책의 가중치를 업데이트하는 식으로 돌아가서, 최종 정리한 식(5)를 활용한다면 아래와 같을 것이다. 하지만, policy gradient에서는 가치함수(혹은 q함수)를 활용하지 않고자 하므로, q함수를 반환값 Gt로 대체한다. Gt를 무수히 많이 샘플링하여 Q함수를 근사할 수 있다는 사실을 알고 있기 때문이다. 이렇게 q함수를 반환값 Gt로 대체하는 알고리즘을 "REINFORCE" 알고리즘(또는 Monte-Carlo Policy Gradient)이라고 한다. 이 REINFORCE 알고리즘은 각 에피소드마다 실제로 얻은 보상으로 학습하는 policy gradient이다.
Actor-Critic
앞서 살펴본 REINFORCE 알고리즘은 에피소드마다 학습할 수 있는데, 이 에피소드의 길이가 길어질수록 반환값의 변화가 커진다. 반환값의 변화가 크다는 것은 곧 분산이 크다는 의미이며, 이러한 단점을 보완하기 위해 매 타임스텝마다 학습할 수 있는 "액터크리틱(Actor-Critic)"이라는 알고리즘이 대두되었다.
액터 크리틱 알고리즘의 구조는 policy Iteration의 구조와 유사하다. 정책 발전(policy improvement)과 정책평가(policy control or policy evaluation)으로 나누어진 구조와 같이, 액터크리틱 알고리즘에서도 "Actor"라는 네트워크와 "Critic"이라는 두 가지로 나누어진 네트워크를 사용한다. Actor는 특정 state에서의 행동을 결정할 확률인 정책을 도출하는 네트워크이며, Critic은 그 state에서 가치를 평가하는 네트워크이다.
Actor 네트워크는 정책을 업데이트 하는 기능을 가지고 있기 때문에, 앞서 살펴본 수식을 활용할 수 있다. 이 때, 액터크리틱에서는 직접적인 큐함수나 반환값 Gt를 사용하지 않고 q함수를 근사하여 사용한다. 결과적으로 정책 업데이트를 위한 actor 신경망과 정책을 평가하는 역할을 해줄 q함수를 근사하는 Critic 신경망이 함께 운영되는 것이다.
Q함수가 근사된 형태의 Actor-Critic 업데이트 수식 한편, 계속 언급했듯이 이 가중치(매개변수)들을 탐색하고 업데이트하는 데 있어서 기준이 되는 지표가 바로 손실함수(loss function, =비용함수, 목적함수라고도 함)이다. DQN에서는 손실함수로 정답과 예측값의 차이인 MSE를 사용했다면, Policy gradient에서는 손실함수로 크로스엔트로피(cross entropy)를 사용한다. 크로스엔트로피는 pi와 qi의 값이 얼마나 유사한지를 측정해주는 지표로써, 정답과 예측값이 비슷해질 수록 값이 작아지는 형태를 띄게 된다. 참고로 actor 신경망에서는 주로 손실함수로 크로스엔트로피를, Critic 신경망에서는 주로 MSE를 활용한다.
cross entropy : pi - true probability, qi - estimated probality 액터크리틱에서 손실함수는 정책의 크로스엔트로피(정책신경망에서 출력)xq함수(가치신경망에서 출력)으로 삼는다. 즉 손실함수가 q값에 따라 크게 좌우되는 구조인 것이다. 따라서 이 q함수에 의한 영향력을 줄여주기 위해 베이스라인(Baseline)이라는 개념을 도입하게 된다.
그리고 이 베이스라인으로 가장 많이 사용하는 것이 가치함수이다. 아래의 식은 가치함수를 베이스라인으로 삼아, Q함수에서 빼준 것이며, 이를 어드벤티지(Advantage)함수라고도 한다. 다만 이 어드벤티지 함수를 사용하기 위해 가치함수를 별도로 근사해야하기 때문에, 액터크리틱 알고리즘에서 q함수와 가치함수를 모두 근사해야하는 번거로움이 발생한다. 따라서 근사되는 q함수를 가치함수의 근사값으로 변환하여 정리할 수 있다. 최종적으로 액터크리틱 업데이트 식에 어드벤티지 함수를 적용하면 아래 세번째 식과 같이 표현되며, 어드밴티지를 사용하는 액터크리틱 알고리즘을 A2C(Advantage Actor Critic)이라고 한다.
q함수를 근사된 가치함수로 표현한 어드벤티지 함수 어드밴티지 함수를 적용한 액터크리틱의 업데이트 식 액터크리틱 알고리즘을 정리해보자
1. 정책신경망을 통해 action a를 샘플링한다.
2. t= 1,2,...T에 대해
1) 선택한 action a를 바탕으로 환경에서 하나의 time step을 진행한다.
2) time step을 진행함으로써, next state s'와 Reward값을 얻는다.
3) 샘플(s, a, r, s')를 바탕으로 시간차에러(TD Error)를 계산하고, 어드밴티지 함수를 구한다.
4) 시간차에러로 가치신경망을 업데이트하고, 어드밴티지 함수로 정책신경망을 업데이트한다.'[Study] Data Science > 머신러닝&딥러닝' 카테고리의 다른 글
[딥러닝] minibatch를 통한 다변량 선형회귀 (0) 2022.06.26 [딥러닝] Pytorch로 구현한 Linear Regression (0) 2022.06.25 [강화학습] Model Free Prediction: Monte-Carlo, Temporal Difference, SARSA (0) 2022.01.05 [강화학습] Model-based Planning by Dynamic Programming (0) 2021.12.31 [강화학습] Markov Decision Process(MDP) (0) 2021.12.27