Soft Actor-Critic

RL에서 exploration과 exploitation간의 trade-off는 자주 얘기되는 문제이다 보니exploration이 중요한 환경에서 인공지능이 local optimum에 빠져버리는 문제를 해결하기 위한 노력이 많이 있다. 이러한 문제를 해결하기 위해 action 선택에 있어 인센티브를 주는 형태로 새로운 환경으로 유도하는 방법(Curiosity-Driven Learning)을 사용하기도 한다. 보통 새로운 RL 모델이 나오면 다양한 게임환경에서 벤치마크테스트를 수행하는데, 여기서 매우 낮은 점수를 보이는 게임이 대부분 exploitation이 중요한 게임환경이다. Exploration이 중요한 환경이나 환경의 변화가 다양한 경우에 좋은 성능을 보이는 RL 모델이 일반적으로 더 좋은 모델이라고 할 수 있다.

이번 RL 모델은 objective function 자체에 “return”뿐만 아니라 exploration을 권장하도록 “entropy”를 포함시키는 방법을 사용한다. 이 RL 모델(Entropy-regularized RL)의 모티브는 policy가 return을 최대화하도록 action를 선택하되, action선택 확률(policy)이 너무 한쪽으로 치우쳐서 다른 action을 선택할 확률이 적은 경우(낮은 entropy)에 일종의 penalty가 주어지도록 하는 형태로 목적함수를 구성한다. Local optimum에 빠져 헤어나오지 못하는 환경을 방지하기 위함이다. 일반적으로 학습을 오래 시켜도 Bellman Equilibrium 상태가 아니므로 비슷한 return을 가지는 action은 우위를 가리기 어려우므로 entropy에 의해 더 다양한 action 선택을 유도할수 있을 것이다. Objective function은 아래와 같고 \mathcal{H} 는 entropy를 의미한다. \alpha 는 exploration을 조절하는 패러미터이다.

J(\theta) = \displaystyle\sum_{t=1}^T \mathbb{E}_{(s_t, a_t) \sim \rho_{\pi}} [r(s_t, a_t) + \alpha \mathcal{H}(\pi(.\vert s_t))]

Soft Actor-Critic model은 RL model분류로 보면 off-policy Actor-Critic model이므로, sample efficiency를 위해 replay buffer를 사용하고, value function과 policy function이 필요하다. Entropy function은 ML에서의 entropy의 정의를 그대로 사용하되 softmax 처리된 policy에 대한 entropy를 목적함수에 포함시킨다.

SAC는 Q-learning기법을 사용하므로 action-value function을 Critic에 사용하는데, 이경우 state value function은 필요가 없다. 그러나, SAC는 state value function도 함께 사용한다. 즉, 두가지의 value function을 모두 사용하는데, Q value의 bootstrapping을 위해 action value를 사용하지 않고 state value function을 사용하는 것이 특징이다. 이 state value function은 아래 식에서 보인바와 같이 entropy가 포함되어 있는 것이 특징이다. 이 방법이 안정화에 더 유리하다고 한다.

Q(s_t, a_t) = r(s_t, a_t) + \gamma \mathbb{E}_{s_{t+1} \sim \rho_{\pi}(s)} [V(s_{t+1})]

V(s_t) = \mathbb{E}_{a_t \sim \pi} [Q(s_t, a_t) - \log \pi(s_t, a_t)]

정의된 soft action value와 soft value function의 학습을 위한 loss function은 다른 모델과 다르지 않다.

J_V(\psi) = \mathbb{E}_{s_t \sim \mathcal{D}} [\frac{1}{2} \big(V_\psi(s_t) - \mathbb{E}[Q_w(s_t, a_t) - \log \pi_\theta(a_t \vert s_t)] \big)^2]

\nabla_\psi J_V(\psi) = \nabla_\psi V_\psi(s_t)\big( V_\psi(s_t) - Q_w(s_t, a_t) + \log \pi_\theta (a_t \vert s_t) \big)

J_Q(w) = \mathbb{E}_{(s_t, a_t) \sim \mathcal{D}} [\frac{1}{2}\big( Q_w(s_t, a_t) - (r(s_t, a_t) + \gamma \mathbb{E}_{s_{t+1} \sim \rho_\pi(s)}[V_{\bar{\psi}}(s_{t+1})]) \big)^2]

\nabla_w J_Q(w) = \nabla_w Q_w(s_t, a_t) \big( Q_w(s_t, a_t) - r(s_t, a_t) - \gamma V_{\bar{\psi}}(s_{t+1})\big)

Policy를 개선하기 위한 방법으로  SAC에서는 우리가 Policy Gradient model에서 일반적으로 사용하는 방법과는 다른 방법을 사용한다. 논문에서는 exponetial Q-function 쪽으로 policy를 update시킨다고 말하고 있다.

\pi_{new} = argmin_{\pi' \in \Pi} D_{KL} \Big( \pi'(\cdot \vert s_t) \Big\| \frac {\exp(Q^{\pi_{old}}(s_t, \cdot))} { Z^{\pi_{old}}(s_t)} \Big)  

그러므로, policy parameter는 직접 KL-diverence값을 최소화하는 방법으로 학습시킬 수 있다.

J_{\pi} (\phi) = \mathbb{E}_{s_t \sim \mathcal{D}} \left[ D_{KL} \Big( \pi(\cdot \vert s_t) \Big\| \frac {\exp(Q_\theta (s_t, \cdot))} { Z_\theta (s_t)} \Big) \right] 

주목해야 하는 점이 하나있는데, 그것은 policy의 표현방법이다. 위의 식에서 보면 policy는 분포함수 형태로 들어가 있다. 이것이 policy를 위한 Loss function에 포함되어 있기 때문에 stochastic 분포함수에서 deterministic function으로 변형해야 gradient를 구할 수 있다. 이 과정을 reparameterization이라고 하는데, noise \epsilon 을 통해 표현하고 sampling하여 stochastic policy를 근사하는 방법을 사용하였다. KL-divergence는 log likelihood와 같은 방식으로 log KL-divergence형태로 변형하였다.

a_t = f_{\phi} (\epsilon_t ; s_t) = tanh(\mu_\phi (s) + \sigma(\phi) * \epsilon)

J_{\pi} (\phi) = \mathbb{E}_{s_t \sim \mathcal{D}, \epsilon_t \sim \mathcal{N}} [log \pi_{\phi} (f_{\phi} (\epsilon_t ; s_t) |s_t ) - Q_{\theta} (s_t , f_{\phi} (\epsilon_t ; s_t))]

\nabla_\phi J_{\pi} (\phi) = \nabla_\phi log \pi_\phi (a_t | s_t) - (\nabla _{a_t} log \phi_{\phi} (a_t | s_t) - \nabla_{a_t} Q (s_t , a_t)) \nabla_\phi  f_{\phi} (\epsilon_t ; s_t)

SAC에서 특이한 점이 하나 있는데, action value function, Q을 2개 사용한다는 점이다. 실제 Q값은 2종류의 Q값중 작은 값을 선택해서 사용한다. 안정성을 위한것으로 보이나 반드시 2개를 사용할 필요는 없다고 생각한다. 저자는 이 점에 대해서 특히 어려운 task의 경우 training 속도를 유의미하게 빠르게 하는 효과가 있다고 밝혔다. 일종의 clipped Q value인 셈인데, PPO에서 clipping이 안정성에 중요하다고 한것과는 다른 언급이다.

SAC

SAC 모델은 의문스러운 부분이 많은 모델이다. 먼저 entropy 가중치 계수 \alpha 가 의도와는 다르게 학습을 방해할 가능성도 있다는 생각이 든다. 특히 학습중 reward의 편차가 심한 환경에서 이 값은 agent를 혼란스럽게 할 수 있다. 특히 exploration을 강조하기 위해 \alpha 을 크게 할때 과연 학습이 쉬울까 하는 생각이 든다. 또 하나의 의문점은, state value를 구하는데 왜 entropy를 포함시켰는지 의문이다. 물론 objective function의 정의와 수학적 일관성을 가지기위해서는 필요가 있지만, state value function은 state만의 함수이지, policy의 함수는 아니기 때문이다. 무엇보다도 재현이 잘 되지 않는다. 간단한 환경에서는 가능하지만 논문에서 나오는 성능은 잘 안된다. 모델에 약간의 수정을 해봤지만 좋은 결과는 얻지 못했다.

광고

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Google photo

Google의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중