300x250

DQN, A3C에 이어 가장 최근 나온 다음 논문을 리뷰하고 얻은 DDPG 알고리즘 관련 내용들을 기록해둔다.

 

https://arxiv.org/abs/1509.02971

 

Continuous control with deep reinforcement learning

We adapt the ideas underlying the success of Deep Q-Learning to the continuous action domain. We present an actor-critic, model-free algorithm based on the deterministic policy gradient that can operate over continuous action spaces. Using the same learnin

arxiv.org

 

 

목차

     

     

     

     

    0. Prerequisite

     

    DDPG를 이해하기에 앞서 Policy-based (앞서 Ch12. A3C에서 Policy gradient method로 소개했다.) 관련 지식을 좀 더 다듬고, REINFORCE 알고리즘을 짚어보고 넘어가자.

     

    두 내용 모두 이전 글 'Ch12.Asynchronous Advantage Actor Critic (A3C) Network'에서 언급했다.

    Policy-based는 Policy gradient method와 일맥상통하고, REINFORCE 알고리즘도 간단히 소개했지만, 다시 한 번 지식을 보충하고 넘어가보자.

     

    https://jjuke-brain.tistory.com/100

     

    Ch12. Asynchronous Advantage Actor Critic (A3C) Network

    DQN에 이어 또다른 Deep Reinforcement Learning인 Asynchronous Advantage Actor Critic Network (A3C)에 대해 알아보자. DQN 내용은 이전 포스팅을 참조하자. https://jjuke-brain.tistory.com/99?category=9573..

    jjuke-brain.tistory.com

     

     

     

     

    1) Policy-based Reinforcement Learning

     

     

     

    (1) 개요

     

    policy-based 강화 학습이란, 앞서 DQN, Q-Learning 등에서 사용한 value-based 강화 학습과 반대되는 개념이다.

     

    value-based 강화 학습에서는 가치 함수를 object function으로 놓고 그것을 최대화하는 action을 선택했다.

    대표적인 예시로 아래와 같은 greedy policy가 있다. 이는 Q값을 maximize하는 action을 고르는 policy이다.

     

    \( \underset{a_t}{argmax} Q(s_t, a_t) \)

     

    \(\epsilon\)이라는 작은 확률로 exploration을, \(1 - \epsilon\)의 확률로 exploitation을 하는 \(epsilon\)-greedy policy 또한 value-based RL에 속한다.

     

    하지만 이와 반대로, policy-based에서는 확률 변수 \(P(a_t|s_t)\)에 대해 이루어진다. state \(s\)에 대해 어떤 action \(a\)가 좋을 지 확률적으로 찾는다.

    딥러닝을 포함한 개념을 간단히 표현하자면, policy-based Deep Reinforcement Learning에서는 Neural Network의 입력으로 \(s_t\)를 주면, 출력으로 특정 확률 변수의 평균 \(\mu\)와 표준편차 \(\sigma\)를 내게 된다.

    물론 확률 변수를 \(\theta\)로 parameterize하여 표현할 필요가 있을 것이다. 이를 아래와 같이 나타낼 수 있다.

     

    \( P_{\theta} (a_t | s_t) \)

     

     

     

    (2) Policy-based RL 특징

     

    policy based를 사용하는 이유는 다음과 같다.

     

    1. Continuous Action을 다루기 용이하다.
      • value-based는 action에 따른 값이 나오므로, 그 값은 불연속적(discrete)이다. 물론 조건을 매우 까다롭게 하여 많은 값을 출력하여 연속적인 action을 근사할 수는 있지만, computing cost가 매우 높아질 것이며, 매번 최적값을 찾는 일이 번거롭다.
      • 하지만 policy-based는 확률 분포에서 특정 action을 sampling하는 방식을 취하므로 연속적인 aciton 값을 뽑아내기 쉽다.
    2. Stochastic Policy를 찾을 수 있다.
      • 애초에 policy를 확률 분포로 설정하므로, 확률 분포를 따르는 policy를 쉽게 찾을 수 있다.

     

    이러한 특징 덕에 특히 partialy observable environment가 주어진 경우 유용하게 사용되고, Robotics분야에서 많이 사용한다.

     

     

     

    (3) Policy-based RL의 Objective Function

     

    강화 학습의 궁극적인 목표는 'maximize expected return'이다.

    따라서 value-based, policy-based 두 방식에서 공통적으로 objective function은 간단히 다음과 같이 나타낼 수 있다.

     

    \( J_\theta = \mathbb{E}[G_0] \)

     

    여기서 \(G_0\)는 return으로, discount factor를 적용한 누적 reward이다.

     

    \(G_0 = R_0 + \gamma R_1 + \gamma^2 R_2 + \cdots \)

     

    agent가 학습을 하는 과정에서 state, action, reward의 순서를 따져보면 '\(s_0, a_0, R_0, s_1, a_1, R_1, \cdots \)'와 같은 순서를 거친다.

    이를 말로 표현하자면, '\(s_0\)에서 \(a_0\)를 취하여 \(s_1\)로 가면서 \(R_0\)를 받는' 과정의 반복이다.

     

    확률밀도함수 PDF의 expectation은 \(\mathbb{E}(X) = \int_x xp(x) dx\)이므로, \(G_0\)의 expectation을 수식으로 나타내면 다음과 같다.

     

    \( \begin{align*} J = \mathbb{E}[G_0] &= \int_{s_0, a_0, s_1, a_1, \cdots} G_0 p(s_0, a_0, s_1, a_1, \cdots) ds_0, a_0, s_1, a_1, \cdots \\ &= \int_{\tau} G_0 p(\tau) d\tau \end{align*} \)

     

    이때 \(\tau\)는 단순히 \(s_0, a_0, \cdots\) 등을 치환한 것이고, 학습을 위한 policy는 \(p(a_0|s_0), p(a_1|s_1), \cdots \) 등에 대해 이들을 parameterize하여 \(p_\theta (a_0|s_0), p_\theta (a_1|s_1) \) 등을 학습해야 하므로 \(\theta\) 첨자로 이를 표현한다.

     

    \( J_\theta \triangleq \int_{\tau} G_0 p_\theta (\tau) d\tau \)

     

    따라서 weight를 update하는 과정은 policy의 gradient로 다음과 같이 표현된다.

     

    \( \theta \leftarrow \theta + \alpha \nabla_\theta J_\theta \)

    \( \left( when \quad \nabla_\theta J_\theta = \nabla_\theta \int_\tau G_0 p_\theta(\tau) d\tau = \int_\tau G_0 \nabla_\theta p_\theta(\tau) d\tau \right) \)

     

    \( \nabla_\theta p_\theta(\tau)\) 를 구하는 상세한 과정은 논문 또는 다른 글을 참고하고, 결론적으로 다음과 같은 gradient를 얻는다.

     

    \( \begin{align*} \nabla_\theta J_\theta &= \int_t \underset{t=0}{\overset{\infty}{\sum}} \left( \nabla_\theta \ln p_\theta(a_t|s_t) \left( \underset{k=t}{\overset{\infty}{\sum}} \gamma^k R_k \right) \right) p_\theta(\tau) d\tau \\ &= \int_t \overset{\infty}{\underset{t=0}{\sum}} \left( \nabla_\theta \ln p_\theta(a_t|s_t) \times G_t \right) p_\theta(\tau) d\tau \end{align*} \)

     

    첫 번째 식에서 \( \underset{k=t}{\overset{\infty}{\sum}} \gamma^k R_k = \gamma^t \underset{k=t}{\overset{\infty}{\sum}} \gamma^{k - t} R_k = \gamma^t G_t \)이고, \(t\)의 값이 커질수록 \(\gamma^t\)의 영향은 무시할 수 있을 정도가 되므로 \(\underset{t=0}{\overset{\infty}{\sum}} \gamma^t \) 항의 영향을 무시할 수 있어 \(\gamma^t\) 항은 사라졌다.

     

    따라서 policy-based RL의 policy gradient는 최종적으로 다음과 같이 나타난다.

     

    \( \nabla_\theta J_\theta \cong \int_t \underset{t=0}{\overset{\infty}{\sum}} \left( \nabla_\theta \ln p_\theta(a_t|s_t) \times G_t \right) p_\theta(\tau) d\tau \)

     

     

     

     

    2) REINFORCE Algorithm

     

    REINFORCE Algorithm은 Reinforcement Learning Algorithm과는 다른 개념임에 유의하자.

     

    바로 위의 식에서 큰수의 법칙을 사용하여 식을 간단하게 만들며, sample 개수 N = 1로 취하여 parameter update를 진행하는 방법이 바로 REINFORCE 알고리즘이다.

     

    즉,다음 과정을 반복하여 parameter(weight)를 갱신한다.

    1. \(\mu\), \(\sigma\)로부터 정해진 policy \(p_\theta (a_t|s_t)\)에서 sampling하여 \(\tau\)를 얻는다.
    2. \( \theta \leftarrow \theta + \alpha \left[ \sum\limits_{t=0}^{\infty} \left( \nabla_\theta \ln p_\theta (a_t|s_t) \times G_t \right) \right] \)

     

    이때, \(G_t\)는 에피소드 전체가 끝나야 얻을 수 있으므로, 이 경우 에피소드가 끝날 때 한 번 weight update를 진행한다.

    이를 통해 sample된 값이 unbiased(믿을만 함)이지만, variance가 커서 수렴하기까지 update 과정이 너무 오래 걸린다.

     

    이를 A2C 등에서 해결한 내용을 이전 포스팅(Ch12. A3C Network)에서 확인해볼 수 있다.

     

     

     

     

     

     

    1. Deep Deterministic Policy Gradient (DDPG) Algorithm

     

    이제 본격적으로 DDPG 알고리즘을 알아보자.

     

    police-based에서는 이전까지 action에 대한 분포를 policy로 사용하였다.

    하지만 DDPG에서는 이름에서 알 수 있듯, 연속적인 값 중에서 'Deterministic한 값'을 뽑는다.

     

    즉, policy-based에서는 neural network를 통해 평균 (\(\mu\)), 표준편차 (\(\sigma\))를 얻어 parameter를 학습시켰지만

    DDPG는 neural network에서 \(a_{\theta, t} \), 즉 parameter \(\theta\)를 통해 나온 \(a_t\) 값 하나인 parameterized action을 얻는다.

     

    이는 delta function으로 표현할 수 있다. delta function \(f(x) = \delta(x - a)\)는 적분하면 1을 얻는 함수이다.

     

    delta function

     

    확률 분포 \(f(a_t)\)에 delta function \(\delta(a_t - a_t^*) \)를 적용함으로써 \(\mathbb{E}[G_0]\)를 구할 때 적분의 개념이 포함되므로 적분 결과 최적의 값 \(a_t^*\) 하나를 얻는다.

     

    이때 \(s_t\)를 입력 받아 \(a_{\theta, t}\)를 출력해주는 neural network를 Action Network라 하고, DDPG의 첫 번째 특징이 바로 이러한 Action Network를 사용한다는 점이다.

     

    Objective Function (\(J_\theta \))과 Policy Gradient (\(\nabla_\theta J_\theta\))을 유도하는 과정에서 DDPG의 두 번째 특징인 'Reward를 받은 후에 다음 State로 넘어간다'는 개념을 사용한다.

    이전까지는 \(s_t\)에서 \(a_t\)를 취하여 \(s_{t+1}\)에 도달하면 \(R_t\)가 정해졌었는데,

    DDPG는 \(s_t\)와 \(a_t\)만 정해지면 \(R_t\)가 정해진다, 즉 \(R\)을 \(s\)와 \(a\)의 함수로 표현할 수 있는 것으로 가정하여 유도 과정에 사용한다.

    구체적인 과정은 생략하고, 결과를 보면 다음과 같다. (너무 길어 반복으로 곱하는 부분에서 줄을 띄웠다.)

     

    \( \begin{align*} \nabla_\theta J_\theta &= \sum_{t=0}^\infty \int_{s_0, s_1, s_2, \cdots, s_t} \gamma^t \nabla_\theta Q_w (s_t, a_{\theta, t}) p(s_0) p(s_1 | s_0, a_{\theta, 0}) p(s_2 | s_1, a_{\theta, 1}) \cdots \\ & \cdots p(s_t | s_{t-1}, a_{\theta, t-1}) ds_0, s_1, \cdots, s_t \end{align*} \)

     

    이때, \(Q\)를 계산할 때 적분을 포함하므로 바로 계산하기보다는 \(w\)를 통해 parameterize한 것에 주목하자.

    보통 \(Q_w\)에 1-step TD (a.k.a. TD(0))을 사용한다.

     

    그리고 여기서 DDPG의 세 번째 특징인 'Off-policy' 특징을 보인다. Off-policy는 target policy와 behavior policy가 서로 다른 경우를 말한다.

    수식을 살펴보면 \(p(s_0)\) 이후 부분에서 behavior policy, 즉 action을 위한 확률 분포들을 계산하는 과정을 갖지만, sampling할 때 사용하는 target policy는 쓰이지 않는다. 왜냐하면 replay buffer를 사용하여 별도의 policy 없이 sampling을 하기 때문이다.

    replay buffer에 특정 \((s_t, a_{\theta, t}, R_t, s_{t+1}) \) set을 저장하여 이 중에서 sampling을 진행한다.

     

    off-policy의 장점은 sample 간의 correlation을 떨어뜨려 다양한 상황을 학습할 수 있다는 점이다.

     

    A3C와 비교해보자면 다음 표와 같다.

     

      A3C DDPG
    sample의 correlation 줄이는 방법 독립적인 여러 agent를 학습시킴 off-policy
    replay buffer 사용 여부 사용 x 사용 o

     

     

    주요 동작 과정을 간단히 살펴보면 다음과 같다.

     

    • Do action : \(a_{\theta, t} + \epsilon_t \)
      • 여기서 \(\epsilon\)은 gaussian noise이며, deterministic policy는 variance가 없어 exploration이 불가능하므로 noise를 강제로 추가하여 exploration을 가능하게 만들어준다. 또는 \(\epsilon\)-greedy policy를 이용하기도 한다.
    • Actor update : \( \theta \leftarrow \theta + \alpha \nabla_\theta \underset{i}{\sum} Q_w (s_i, a_{\theta, i}) \)
    • Critic update : \( w \leftarrow w - \beta \nabla_w \underset{i}{\sum} \left( R_i + \gamma Q_{w^{-}} (s_{i+1}, a_{\theta^{-}, i}) - Q_{w^{-}} (s_i, a_{\theta, i}) \right)^2 \)
      • \(w\)와 \(w^{-}\)의 차이는 2015 DQN에서 target network(TD(0))와 main network(parameter update에 사용) 를 나누어 학습시킨 뒤, parameter update에 사용하던 main network의 weight \(w\)를 target network의 \(w^{-}\)에 일정 step (\(c\)) 이후에 통째로 복사하여 target 값이 일정하도록 해주었던 개념이다.
    • \( \begin{align*} & w^{-} \leftarrow (1 - \lambda) w^{-} + \lambda w \\ & \theta^{-} \leftarrow (1 - \lambda) \theta^{-} + \lambda \theta \end{align*} \)
      • DQN에서는 \(w\)를 \(w^{-}\)에 한꺼번에 반영했지만, DDPG에서는 이전 값을 어느 정도 유지하면서 매 step에서 조금씩 반영하도록 한다.

     

    동작 과정을 간단한 그림으로 나타내면 다음과 같다.

     

    Simple DDPG Network

     

     

    728x90
    • 네이버 블러그 공유하기
    • 네이버 밴드에 공유하기
    • 페이스북 공유하기
    • 카카오스토리 공유하기