AI 딥러닝/RL29 Tensorflow2로 만든 DDPG 코드: Pendulum-v0 OpenAI Gym에서 제공하는 Pendulum-v0 환경을 대상으로 DDPG 알고리즘을 Tensorflow2 코드로 구현하였다. 학습결과는 다음과 같다. DDPG는 오프-폴리시 방법으로서 온-폴리시인 A2C에 비해서 데이터 효율이 월등히 좋은 것을 알 수 있다. 200회의 에피소드만에 학습이 완료됐다. 다음은 학습이 끝난 후 진자(pendulum)의 움직임이다. DDPG 코드는 액터-크리틱 신경망을 구현하고 학습시키기 위한 ddpg_learn.py, 이를 실행시키기 위한 ddpg_main.py, 학습을 마친 신경망 파라미터를 읽어와 에이전트를 구동하기 위한 ddpg_load_play.py, 그리고 리플레이 버퍼를 구현한 replaybuffer.py로 구성되어 있다. 전체 코드 구조는 다음과 같다. 다음.. 2021. 5. 14. DQN에서 DDPG로 DQN 알고리즘에서는 상태변수가 연속공간 값이지만 행동은 이산공간 값으로 가정한다. 행동의 개수가 적으면 문제가 되지 않을 수도 있지만, 드론이나 로봇과 같은 실제 물리 시스템의 경우 행동의 차원이 크기 때문에 연속공간 값으로 가정하는 것이 더 타당하다. 그렇다면 DQN 알고리즘을 연속공간 상태변수와 행동의 경우에도 적용할 수 있을까. 먼저 DQN 알고리즘의 핵심인 정책과 시간차 타깃을 계산하는 부분을 살펴보자. 여기서는 상태변수와 행동을 모두 연속공간 값으로 가정하므로 상태변수는 \(\mathbf{x}_t\) 로 표기하고 행동은 \(\mathbf{u}_t\) 로 표기한다. DQN은 확정적 정책을 가지며 다음과 같이 계산했다. \[ \pi (\mathbf{x}_t )= \mathbf{u}_t =\arg\.. 2021. 5. 14. Tensorflow2로 만든 Double DQN 코드: CartPole-v1 OpenAI Gym에서 제공하는 CartPole-v1 환경을 대상으로 Double DQN 알고리즘을 Tensorflow2 코드로 구현하였다. 학습결과는 다음과 같다. 다음은 학습이 끝난 후 카트폴의 움직임이다. Double DQN 코드는 Q 신경망을 구현하고 학습시키기 위한 doubledqn_learn.py, 이를 실행시키기 위한 doubledqn_main.py, 학습을 마친 신경망 파라미터를 읽어와 에이전트를 구동하기 위한 doubledqn_load_play.py 그리고 리플레이 버퍼를 구현한 replaybuffer.py로 구성되어 있다. 전체 코드 구조는 다음과 같다. 다음은 Tensorflow 2 코드다. doubledqn_learn.py # Double DQN learn (tf2 subclassi.. 2021. 5. 11. Double DQN 알고리즘 DQN에서 시간차 타깃 \(y_i\) 는 다음과 같이 계산된다. \[ y_i=r(\mathbf{x}_i, \mathbf{a}_i )+ \gamma \max_{\mathbf{a}^\prime} Q_{\phi^\prime} (\mathbf{x}_{i+1}, \mathbf{a}^\prime ) \] 여기서 \(Q_{\phi^\prime} (\mathbf{x}_{i+1}, \mathbf{a}^\prime )\) 는 최적 행동가치 함수 \(Q^\star (\mathbf{x}_{i+1}, \mathbf{a}^\prime )\) 의 값을 신경망으로 추정한 값이다. 연구에 의하면 Q-러닝과 DQN에서는 행동가치 함수를 참값보다 항상 큰 값으로 추정하는 현상이 발생한다. 이를 과대추정 바이어스(overestimation.. 2021. 5. 11. Tensorflow2로 만든 DQN 코드: CartPole-v1 OpenAI Gym에서 제공하는 CartPole-v1 환경을 대상으로 DQN 알고리즘을 Tensorflow2 코드로 구현하였다. 폴이 카트에 조인트 되어 있고, 카트는 마찰 없는 트랙을 좌우로 이동할 수 있다. 폴은 처음에 수직으로 세워져 있으나 중력에 의해서 기울어져서 떨어질 수 있다. 카트의 목적은 폴이 떨어지지 않고 계속 수직으로 세워져 있도록 좌우로 이동하는 것이다. 상태변수는 카트의 위치와 속도, 폴의 각도와 속도 등 4개의 연속공간 값이고, 행동은 왼쪽 방향 이동과 오른쪽 방향이동 등 2개의 값만 있는 이산공간 값이다. 학습결과는 다음과 같다. 다음 영상은 학습 도중의 카트폴 움직임이다. 다음은 학습이 끝난 후 카트폴의 움직임이다. DQN 코드는 Q 신경망을 구현하고 학습시키기 위한 dqn_l.. 2021. 5. 4. DQN 알고리즘 - 2 DQN은 이산공간 상태변수에서만 작동하던 Q-러닝 알고리즘을 연속공간 상태변수로 확장시킨 것이었다. 일단 단순하게 Q-러닝을 바탕으로 만든 DQN 알고리즘은 다음과 같았다. [1] DQN의 파라미터를 초기화한다. 그리고 [2]-[4]를 반복한다. [2] 행동 \(\mathbf{a}_i\) 를 실행하여 천이샘플(transition sample) \(\{\mathbf{x}_i, \mathbf{a}_i, r_i, \mathbf{x}_{i+1}\}\) 를 모은다. [3] \(y_i= r(\mathbf{x}_i, \mathbf{a}_i )+ \gamma \max_{\mathbf{a}^\prime} Q_\phi (\mathbf{x}_{i+1}, \mathbf{a}^\prime )\) 를 계산한다. [4] \(\ph.. 2021. 5. 4. DQN 알고리즘 - 1 Q-러닝 알고리즘은 이산공간 상태변수와 행동을 기본으로 하며, 유한 개의 상태변수와 행동에 대한 행동가치의 값을 테이블(Q-테이블이라고 한다) 형식으로 저장하고 관리한다. 적은 수의 상태변수와 행동의 경우에는 문제가 되지 않지만 많은 수의 상태변수와 행동의 경우에는 이와 같은 테이블 형식의 관리는 불가능할 수 있다. 예를 들어서 비디오 게임에 Q-러닝을 적용한다고 할 때, \(200 \times 200\) 픽셀 이미지, \(255\) 컬러, \(3\) 채널로 가정한다면 상태변수의 개수는 \((255^3 )^{200 \times 200}\) 개가 된다. 이 숫자는 전 우주에 있는 원자의 개수보다도 더 큰 숫자라고 한다. 이처럼 방대한 상태변수의 개수를 테이블 형태로 저장하고 관리한다는 것은 불가능한 일이다.. 2021. 5. 2. 가치 이터레이션에서 Q-러닝으로 정책 이터레이션은 벨만 방정식을 반복적으로 푸는 방법이었다. 정책 이터레이션의 식은 다음과 같다. \[\begin{align} & V_{j+1}^\pi (\mathbf{x}_t ) = r_t + \mathbb{E}_{ \mathbf{x}_{t+1} \sim p(\mathbf{x}_{t+1} | \mathbf{x}_t, \mathbf{u}_t) } \left[ \gamma V_j^\pi (\mathbf{x}_{t+1} ) \right] \tag{1} \\ \\ & Q_{j+1}^\pi (\mathbf{x}_t, \mathbf{u}_t ) = r_t + \mathbb{E}_{ \mathbf{x}_{t+1} \sim p(\mathbf{x}_{t+1} | \mathbf{x}_t, \mathbf{u}_t) } \.. 2021. 5. 1. 가치 이터레이션 (Value Iteration) 정책 이터레이션에서는 정책 평가 단계 시에 가치함수를 수렴할 때까지 수차례 반복 계산하였다. 그리고 수렴된 가치함수를 이용하여 정책 개선을 수행하였다. 만약 정책 평가 단계 시에 가치함수를 한 번만 계산하고 수렴되지 않은 상태로 바로 정책 개선 단계로 넘어가면 어떨까. 즉, 식 (1)과 같이 정책 \(\pi_i\) 에 대한 정책 평가를 한 단계만 수행한 후, \[ \begin{align} & V_{i+1}^{\pi_i} (\mathbf{x}_t )= r_t+ \mathbb{E}_{ \mathbf{x}_{t+1} \sim p(\mathbf{x}_{t+1} | \mathbf{x}_t, \mathbf{u}_t) } \left[ \gamma V_i^{\pi_i } (\mathbf{x}_{t+1} ) \right.. 2021. 4. 29. 정책 이터레이션 (Policy Iteration) 어떤 정책 \(\pi\) 에 대해서 행동가치 함수가 주어지면 기존의 정책 보다 더 큰 상태가치 또는 행동가치 값을 갖는 새로운 정책 \(\pi^\prime\) 을 계산할 수 있다. 이 과정을 정책 개선(policy improvement)이라고 한다. 새로운 정책은 다음과 같이 탐욕(greedy)적인 방법으로 찾을 수 있다. \[ \pi^\prime = \arg \max_{\mathbf{u}_t} Q^\pi (\mathbf{x}_t, \mathbf{u}_t) \tag{1} \] 여기서 탐욕적이라는 의미는 먼 미래 대신에 한 시간스텝만을 고려하여 최대값을 구한다는 것을 말한다. 탐욕적 방법으로 새로운 정책을 계산하면 확정적(deterministic) 정책이 된다. \[ \mathbf{u}_t= \pi^\.. 2021. 4. 29. 이전 1 2 3 다음