Processing math: 100%

[RL] 7. Policy Gradient method: REINFORCE, Baseline, Actor-Critic

2024. 4. 30. 17:24RL

지금까지 배운 기법(DP, MC, TD)은 모두 가치 기반 기법(value-based method)이다.

가치 기반 기법은 가치 함수를 모델링하고 가치 함수를 학습한다. 그리고 가치 함수를 경유하여 정책을 얻는다.

참고로, 가치 기반 기법에서는 "일반화한 정책 반복"으로 최적 정책을 찾는 경우가 많다.

 

이번 글에서는 정책 경사법(policy gradient method)에 기반한 다양한 알고리즘에 대해 알아볼 것이다.

The simplest policy gradient method

정책 경사법은 기울기를 이용하여 정책을 갱신하는 기법들의 총칭이다.

우선 가장 간단한 정책 경사법을 도출해보자.

 

DNN으로 π(a|s) 표현

우선, 정책 π(a|s)를 신경망으로 모델링한다.

이때, 상태를 입력으로 받으면 모든 행동 선택 확률을 반환하는 신경망 구조를 일반적으로 많이 사용한다.

이렇게 정책을 모델링한 신경망을 정책 신경망이라 부르고, 이를 πθ(a|s)로 표기한다.

 

목적 함수(손실 함수)

목적 함수를 설정하기 전, 문제 설정을 명확히 하자.

일회성 과제이고, 에이전트는 정책 πθ에 따라 행동한다고 하자.

그리고, 경험을 통해 다음과 같이 시계얼 데이터를 얻는다고 가정하자.

τ=(S0,A0,R0,S1,A1,R1,,ST+1)

이때, 수익은 모든 보상에 할인율을 적용해 합한 것으로 다음과 같이 표현할 수 있다.

G(τ)=R0+γR1+γ2R2++γTRT

 

우리의 목표는 수익이 최대가 되는 정책을 갖는 것이므로, 목적 함수를 다음과 같이 표현할 수 있다.

J(θ)=Eτπθ[G(τ)]

수익 G(τ)는 확률적으로 변하기 때문에 그 기댓값이 목표 함수가 된다.

그리고, 시계열 데이터 τ가 정책 πθ로부터 생성되기 때문에 E 첨자로 τπθ가 붙었다.

물론, τ의 생성 과정에는 정책 πθ 외에도 환경의 상태 전이 확률 Pass과 보상 함수 Ras도 관여한다.

하지만 우리가 통제할 수 있는 요인은 에이전트 정책이기 때문에 τπθ로 표기했다.

 

기울기

매개변수 θ에 대한 J(θ)의 기울기는 다음과 같다.

θJ(θ)=θEτπθ[G(τ)]=Eτπθ[Tt=0G(τ)θlogπθ(At|St)]

 

θJ(θ)τ의 기댓값으로 표현된다.

이 기댓값은 몬테카를로법(=샘플링을 여러 번하여 평균을 구하는 방법)으로 구할 수 있다. 

구체적으로, 정책 πθ에 따라 에피소드를 n번 수행하여 n개의 τ를 얻어 구할 수 있다. 이를 수식으로 표현하면 다음과 같다.

x(i)=Tt=0G(τ(i))θlogπθ(A(i)t|S(i)t),(τ(i)πθ, (i=1,2,,n))

θJ(θ)x(1)+x(2)++x(n)n

 

샘플 수가 1개일 때 다음과 같이 단순화시킬 수 있다.

θJ(θ)Tt=0G(τ)θlogπθ(At|St),(τπθ)

계산 과정을 시각화하면 다음과 같다.

 

기울기의 의미

G(τ)θlogπθ(At|St)가 무슨 의미를 내포하고 있는지 알아보자.

우선 log의 미분부터 살펴보면, θlogπθ(At|St)θπθ(At|St)라는 기울기 벡터에 스칼라 1πθ(At|St)를 곱한 것이다.

이로부터, θlogπθ(At|St)θπθ(At|St)는 같은 방향을 가리킨다는 사실을 알 수 있다.

θπθ(At|St)는 상태 St에서 행동 At를 취할 확률이 가장 높아지는 방향을 가르킨다.

마찬가지로, θlogπθ(At|St)도 "상태 St에서 행동 At를 취할 확률이 가장 높아지는 방향"을 가르킨다.

그 방향에 G(τ)라는 "가중치"가 곱해진다.

즉, 선택의 결과(=수익)이 좋았으면 가중치가 커져 상태 St에서 행동 At를 취할 확률을 강화하고, 수익이 좋지 못하면 가중치를 낮춰 상태 St에서 행동 At를 취할 확률을 약화시킨다.

REINFORCE

앞에서 살펴본 가장 간단한 정책 경사법은 θlogπθ(At|St)에 항상 일정한 가중치 G(τ)를 적용하고 있다.

 

그런데, 시점 t에서 행동 At가 좋은 행동인지 나쁜 행동인지는 그 행동 이후에 얻은 보상의 총합으로 평가가 이루어져야 한다.

다시 말해, 행동 전에 얻은 보상은 해당 행동의 좋고 나쁨과 무관하다.

하지만, 앞에서 살펴본 가장 간단한 정책 경사법은 θlogπθ(At|St)에 항상 일정한 가중치 G(τ)를 적용하고 있다. 즉, 행동 전에 얻은 보상도 포함하고 있어 본질적으로 관련 없는 보상이 노이즈로 섞여 있다는 의미다.

 

이 노이즈를 제거하기 위해 가중치를 G(τ)에서 Gt로 변경하여 수식을 다음과 같이 수정할 수 있다.

θJ(θ)=Eτπθ[Tt=0Gtθlogπθ(At|St)]

Gt=Rt+γRt+1+γ2Rt+2++γTRT

위 수식에 기반한 알고리즘이 REINFORECE다.

Baseline method

REINFORCE 수식은 다음과 같다.

θJ(θ)=Eτπθ[Tt=0Gtθlogπθ(At|St)]

 

이때, Gt는 많은 시간이 쌓여서 만들어진 결과이기 때문에 변동성이 심하다. 즉, 분산이 크다.

 

직관적으로 보면, 답이 매번 바뀌는 것이기 때문에 샘플 효율이 좋지 못하다. 즉, 샘플을 더 많이 사용해야 한다.

 

베이스라인 기법을 사용해 분산을 줄여보자.

다음과 같이 Gt St에 대한 임의의 함수 b(St)를 뺀 Gtb(St)Gt 대신 사용해도 θJ(θ)영향 받지 않는다.

θJ(θ)=Eτπθ[Tt=0Gtθlogπθ(At|St)]=Eτπθ[Tt=0(Gtb(St))θlogπθ(At|St)]

그리고, 만약 St에 대한 함수인 b(St)의 값이 Gt의 최솟값과 최댓값 사이에 있으면 자명하게 분산이 작아진다.

 

그렇기 때문에, 위 조건을 만족하는 b(St)를 찾아 베이스라인으로 사용하면 즉,  Gt 대신 Gtb(St)를 사용하면 분산이 작아져 샘플 효율이 좋아진다.

대표적으로, Gt의 평균인 vπθ(St)를 베이스라인 b(St)로 사용한다. 

참고로, 실제 상태 가치 함수 vπθ(s)는 모르기 때문에, 상태 가치 함수를 베이스라인으로 사용하려면 상태 가치 함수도 근사해야 한다. 하지만 꼭 DNN으로 근사해야 하는 건 아니다.

Actor-Critic

강화 학습 알고리즘은 크게 가치 기반 기법과 정책 기반 기법으로 나뉜다.

이번 글에서 살펴본 기법은 모두 정책 기반 기법이고, 이전에서 살펴본 모든 기법은 가치 기반 기법이다.

actor-critic은 가치 기반이자 정책 기반인 기법이며, baseline 기법을 한 걸음 더 발전시킨 기법이다.

(baseline 기법에서도 b(St)를 상태 가치 함수로 사용하면 가치 기반이자 정책 기반이다.)

 

우선, actor-critic은 상태 가치 함수를 신경망으로 모델링한 가치 신경망 Vw를 베이스라인으로 사용한다.

θJ(θ)=Eτπθ[Tt=0(GtVw(St))θlogπθ(At|St)]

 

근데, Gt는 에피소드가 끝날 때 정해진다. 즉, 위 수식은 에피소드가 끌날 때마다 학습할 수 있다는 단점이 있다.

이를 해결하기 위해, actor-critic은 여기서 시간차(TD) 아이디어를 추가해 매 타임스텝마다 학습을 가능케 했다.

즉, Gt 대신 Rt+γVw(St+1)를 사용했다.

θJ(θ)=Eτπθ[Tt=0(Rt+γVw(St+1)Vw(St))θlogπθ(At|St)]

 

그리고 상태 가치 함수를 근사하기 위해, 가치 신경망(=critic)은 TD법에 따라 Vw(St)Rt+γVw(St+1)에 가까워지도록 학습했다.

MSE=(yt)2

(y=Vw(St,At),t=Rt+γVw(St+1,At+1))

 

이처럼, actor-critic는 정책 신경망(=actor) πθ을 학습하여 정책을 개선하고, 가치 신경망(=critic) Vw를 학습하여 정책을 평가하는 과정을 반복한다.

'RL' 카테고리의 다른 글