Swimmer

강화학습 7 <REINFORCE 방식을 개선한 PG 방법인 Actor - Critic> 본문

개념공부/강화학습(Reinforcement Learning)

강화학습 7 <REINFORCE 방식을 개선한 PG 방법인 Actor - Critic>

Zach Choi 2021. 12. 31. 06:17

지지난 공부부터 인공신경망을 적용한 강화학습 기반 MDP 풀이법을 공부하고 있다. 강화학습에 인공신경망을 사용하는 이유는 State 및 dimension이 굉장히 많은 MDP 문제를 해결하기 위해서다. 현실의 문제들이 대부분 state가 굉장히 많기 때문에 (state가 float형으로 표현돼야 하거나, 이미지 상태이거나) 인공신경망을 적용하는 방법을 잘 알아두어야 한다.

 

인공신경망은 Q함수나 정책을 근사하는 함수로 사용된다. 인공신경망은 에피소드에서 Agent가 환경과 상호작용하며 얻은 데이터로부터 가중치를 학습한다. 이떄 Q함수를 근사하는 방식으론 가장 기본인 Deep SARSA 그리고 Experience Replay 및 Target Network로 성능을 개선한 방식인 DQN이 있었다. 정책을 근사하는 방식은 REINFORCE가 있었다. REINFORCE는 인공신경망의 가중치를 업데이트할때 목적함수의 Gradient 값에서 Q함수를 구할수가 없어, 이를 에피소드 별 반환값 (G_t)로 근사한 방법이었다.

 

금일 공부할 Actor-Critic은 REINFORCE 방법을 개선한 것이다. REINFORCE에서 Q함수를 반환값으로 근사할때 몇가지 문제가 발생했기 때문이다.

1. 반환값을 얻기 위해선 에피소드가 종료돼야 하므로, 에피소드가 끝난 후 학습이 가능하다. (Monte Carlo 와 비슷)

2. 에피소드가 길어지면, 반환값이 크기가 커질 수 있고 이로인해 반환값의 Variance가 크다. (Variance가 크면 학습 속도가 느려진다.)

이 2가지 문제를 해결하기 위해 도입된것이 Actor-Critic이다. 

 

큰 관점에서 이렇게 답안이 새롭게 제시되는 이유는, 정책을 함수로 정확하게 근사하기 위한 방법이 제시되기 때문이다.  Actor-Critic은 인공신경망을 2개 써서 정책을 근사한 인공신경망을 더 정확하게 근사할게! 이다. 이 방법에 대해 자세히 알아보자. Actor - Critic은 매 타임스텝마다 학습할 수 있도록 개선한 방식이다. 

 

우선 Policy Gradient RL에서 인공신경망의 가중치는 아래 식과 같이 업데이트 된다.

$$ \theta_{t+1}\, = \, \theta_{t}\,+\,\alpha\, \bigtriangledown_{\theta}\,J(\theta) \, \approx \,\theta_{t}\,+\,\alpha[\bigtriangledown_{\theta}log\,\pi_{\theta}(a|s)q_{\pi}(s,\,a)] $$

 

Actor-Critic 방법은 목적함수의 Gradient 항 내에 q 함수를 출력하는 인공신경망을 사용하는 방법이다. 즉 아래와 같이 두가지 인공신경망을 사용한다.

$$ \pi_{\theta}\, : \, 정책신경망, \,\, Q_{\theta}\, : \, 가치신경망\, (Q함수신경망)$$

 

이때 정책신경망을 학습시킬 때 사용하는 Loss function은 REINFORCE와 같이 크로스 엔트로피 형태를 따른다. Actor-Critic에서 Loss function은 정책신경망의 크로스 엔트로피와 가치 신경망의 q함수 출력값을 곱한 것으로 사용한다.

$$ Actor-Critic\,\,오류함수\,=\,정책\,신경망\,출력의\,크로스\,엔트로피\,x\,Q함수(가치신경망\,출력)$$

 

Q함수를 출력하는 가치 신경망은 SARSA와 같이 아래 MSE를 Loss function으로 사용한다.

$$ MSE\, = \,(R_{t\,+\,1}\,+\,\gamma Q(S_{t\,+\,1},\,A_{t\,+\,1})\,-\,Q(S_{t},\,A_{t}))^{2} $$

 

Actor-Critic 방식의 학습 과정은 아래 그림과 같다.

과정은 아래와 같다.

1. 정책신경망을 통해 입력(상태)로부터 확률적으로 행동을 선택한다.

2. 선택한 행동으로부터 환경에 대해 한 타임 스텝 진행한다.

3. 다음 상태와 보상을 얻는다.

4. S, A, R, S'를 통해 시간차 에러를 구하고 가치 신경망을 업데이트 한다.

5. 가치 신경망으로부터 출력된 행동의 Q함수와 정책 신경망의 행동으로 부터 계산된 크로스 엔트로피를 통해 정책 신경망의 목적함수를 계산한다. 이로부터 정책신경망을 업데이트 한다.

6. 1 ~ 5 반복.

 

Actor-Critic 방법은 REINFORCE가 Q함수를 반환값 G_t로 대체하면서 생기는 높은 variance 및 에피소드별 학습의 문제를 해결하고자 제시되었다. Actor-Critic은 Q함수를 인공신경망으로 근사하고, 한 타임 스텝(행동)별 학습이 가능하다. 이렇게 문제를 개선했지만, Actor-Critic의 단점이 몇가지 존재한다. 우선, Q함수를 학습에 바로 사용하기 때문에 학습 초기에는, Q함수의 variance가 높아 학습이 제대로 되지 않는 다는 것이다. 이를 해결하기 위해 REINFORCE에서 baseline이라는 기법을 간단히 배웠다. Actor-Critic에서도 baseline기법이 몇가지 존재한다.

 

첫번째는 상태의 가치함수를 베이스라인으로 사용하는 것이다. 가치함수도 인공신경망으로 근사한다. (따라서 정책, Q함수, 가치함수 총 3개의 인공신경망이 필요하다.) Q함수에서 가치함수를 뺀 것을 Advantage(어드밴티지) 함수라고 지칭한다. 어드밴티지 함수는 그 상태의 가치 함수 대비 각 행동을 취했을 때 기대되는 보상의 정도라고 볼수 있다. 따라서 Q함수로 학습할때와 가중치 학습의 방향은 동일하지만, 학습 크기는 줄어들기 때문에 variance를 낮출 수 있다. 어드밴티지 함수의 형태, 이를 사용한 정책신경망 업데이트 식은 한줄 아래와 같다.

$$ A(S_{t},\,A_{t})\,=\,Q_{w}(S_{t},\,A_{t})\,-\,V_{v}\,(S_{t}) $$

$$ \theta_{t+1}\, \approx \,\theta_{t}\,+\,\alpha[\bigtriangledown_{\theta}log\,\pi_{\theta}(a|s)A(S_{t},\,A_{t})] $$

 

위 방식은 가치함수를 근사하는 인공신경망이 하나 더 생기므로 연산&메모리 측면에서 비효율적이다. 그래서 큐함수를 가치함수를 사용해 표기함으로서 Q함수를 근사하는 인공신경망을 줄일 수 있다. Q함수의 정의를 통해 위 식을 아래와 같이 정리한다. 이를 사용한 정책신경망 업데이트 식은 한줄 아래 수식과 같다.

$$ \delta_{v}\,=\,R_{t+1}\,+\,\gamma V_{v}\,(S_{t+1})\,-\,V_{v}\,(S_{t}) $$

$$ \theta_{t+1}\, \approx \,\theta_{t}\,+\,\alpha[\bigtriangledown_{\theta}log\,\pi_{\theta}(a|s)\delta_{v}] $$

 

위 두 방법에서 가치함수는 MSE 오류 함수를 사용해 인공신경망을 업데이트 한다.

$$ MSE \,=\,(R_{t+1}\,+\,\gamma V_{v}(S_{t+1})\,-\,V_{v}\,(S_{t}))^{2} $$

 

이렇게 Actor-critic 방식에 Advantage 함수를 사용하는 방식을 A2C라고도 한다.

 

정리

REINFORCE 알고리즘은 목표함수의 Gradient 식 중 Q함수를 반환값으로 치환해 사용한다. 이때의 문제점은 에피소드별 학습이 가능하다는 것이고, 이로 인해 Variance가 높아 학습 안정성이 떨어진다는 것이다. 그래서 Q함수를 인공신경망으로 근사해 학습을 진행하는 Actor-Critic 방식이 제안되었다. 이를 통해 Q함수를 다른 값으로 치환하지 않고 직접 학습이 가능하고, 매 타임스텝별 학습을 진행할 수 있게 되었다. 

하지만 이 방법은 학습 초기에 Q함수 추정치가 높은 variance를 가진다는 단점이 있다. 이를 해결하기 위해 REINFORCE 방법에도 제시되었던 baseline 방법이 사용되었고, baseline 함수로 가치함수를 사용하는 방법이 제안되었다. Q함수를 Gradient에 곱하는 것이 아닌 (Q함수 - 가치함수) 값을 곱하는 것이다.  이러면 학습 시 variance를 줄일 수 있지만 인공신경망이 정책신경망, Q함수신경망, 가치함수 신경망 총 3개가 필요하게 된다. 연산 및 메모리의 비효율을 해결하기 위해 Q함수를 정의를 통해 가치함수로 치환하는 방법이 제안되었다. 이 방법을 통해 정책신경망, 가치 신경망 2개만으로 baseline을 적용해 학습 시 variance를 낮출 수 있게 된다. 어드밴티지를 활용한 방법을 A3C 방법이라 한다.

 

금일 공부한 Actor-Critic 방법의 핵심은, Q함수를 인공신경망으로 치환 및 Q함수에 베이스라인을 가치함수로 사용한 방법이라는 것이다. 즉 state가 매우 많은 MDP 문제를 풀 때 정책을 인공신경망으로 치환하게 되고, 인공 신경망이라는 함수를 '데이터를 잘 근사하고, 잘 학습'하기 위한 방법인 것이다. '잘 근사'하기 위해선 Q함수를 최대한 정확히 표현해야 하므로 이를 인공신경망으로 추가적으로 치환한다. '잘 학습'하기 위해서 variance를 낮추기 위해 baseline을 사용한 것이다.

 

앞으로의 RL 방법들도 어떻게 하면 목적함수를 잘 근사하고, 잘학습 시킬 수 있는지에 대한 방법을 연구가 진행될 것이다. 공부를 하면서 지식의 양이 늘어나는데, 이 연구의 목적과 효과가 무엇인지 잘 기억해두자.

Comments