본문 바로가기

AI 딥러닝48

Tensorflow2로 만든 DDPG 코드: BipedalWalker-v3 OpenAI Gym에서 제공하는 BipedalWalker-v3 환경을 대상으로 DDPG 알고리즘을 Tensorflow2 코드로 구현하였다. BipedalWalker-v3는 DDPG로 학습하기에는 난해한 문제로 알려져 있다. 하이퍼파라미터에 매우 민감하기 때문이다. 학습결과는 다음과 같다. 500회의 에피소드로 학습한 결과다. 추세를 볼 때 그 이상 학습한다면 더 좋은 결과를 얻을 수도 있을 것 같다. 학습하기 전 워커의 움직임은 다음과 같다. 아래는 학습 중간에 얻은 결과다. 다음은 학습이 끝난 후 워커의 움직임이다. DDPG 코드는 액터-크리틱 신경망을 구현하고 학습시키기 위한 ddpg_learn.py, 이를 실행시키기 위한 ddpg_main.py, 학습을 마친 신경망 파라미터를 읽어와 에이전트를 구동.. 2021. 7. 9.
가치 이터레이션 (Value Iteration)과 LQR 이번에는 벨만 최적 방정식을 이용하여 이산시간(discrete-time) LQR을 유도해 보도록 하자. 정책 이터레이션과 마찬가지로 마르코프 결정 프로세스(MDP)는 결정적(deterministic) 프로세스로 가정하고 환경 모델도 다음과 같다고 가정한다. \[ \mathbf{x}_{t+1}=A \mathbf{x}_t+B \mathbf{u}_t \tag{1} \] 보상(reward)도 동일하게 다음과 같이 정의한다. \[ r(\mathbf{x}_t, \mathbf{u}_t)= -\frac{1}{2} \left( \mathbf{x}_t^T Q \mathbf{x}_t+ \mathbf{u}_t^T R \mathbf{u}_t \right) \ \tag{2} \] 여기서 \( Q=Q^T \ge 0\), \(R=R.. 2021. 6. 23.
정책 이터레이션 (Policy Iteration)과 LQR 벨만 방정식을 이용하여 이산시간(discrete-time) LQR을 유도해 보도록 하자. 여기서 마르코프 결정 프로세스(MDP)는 결정적(deterministic) 프로세스로 가정한다. 결정적 프로세스이므로, 특정 상태변수에서 행동이 정해지면 다음(next) 상태변수를 확정적으로 계산할 수 있다. 환경 모델은 다음과 같이 표현된다. \[ \mathbf{x}_{t+1}=A \mathbf{x}_t+B \mathbf{u}_t \tag{1} \] 보상(reward)도 확률변수가 아닌 확정된 값으로 주어지며 다음과 같이 정의한다. \[ r(\mathbf{x}_t, \mathbf{u}_t)= -\frac{1}{2} \left( \mathbf{x}_t^T Q \mathbf{x}_t+ \mathbf{u}_t^T R \.. 2021. 6. 22.
Tensorflow2로 만든 SAC 코드: Pendulum-v0 OpenAI Gym에서 제공하는 Pendulum-v0 환경을 대상으로 1개의 Q 신경망과 타깃 Q 신경망을 사용한 SAC 알고리즘을 Tensorflow2 코드로 구현하였다. 학습결과는 다음과 같다. 200회의 에피소드만에 학습이 완료됐다. 다음은 학습이 끝난 후 진자(pendulum)의 움직임이다. SAC 코드는 액터-크리틱 신경망을 구현하고 학습시키기 위한 sac_learn.py, 이를 실행시키기 위한 sac_main.py, 학습을 마친 신경망 파라미터를 읽어와 에이전트를 구동하기 위한 sac_load_play.py, 그리고 리플레이 버퍼를 구현한 replaybuffer.py로 구성되어 있다. 전체 코드 구조는 다음과 같다. 다음은 Tensorflow2 코드다. sac_learn.py # SAC lea.. 2021. 6. 1.
Soft Actor Critic (SAC) 알고리즘 - 2 SAC 알고리즘을 정리하면 다음과 같다. [1] Q 신경망과 액터 신경망의 파라미터를 초기화한다. [2] Q 신경망의 파라미터를 타깃 Q 신경망에 복사한다. [3] 리플레이 버퍼를 초기화 한다. 그리고 [4]-[9]를 반복한다. [4] 정책을 실행하여 발생된 천이샘플(transition sample) \(\left( \mathbf{x}_i, \mathbf{u}_i, r_i, \mathbf{x}_{i+1} \right) \) 를 리플레이 버퍼에 저장한다. [5] 리플레이 버퍼에서 N개의 천이샘플 \(\left( \mathbf{x}_i, \mathbf{u}_i, r_i, \mathbf{x}_{i+1} \right) \) 를 무작위로 추출한다. [6] \( q_i=r(\mathbf{x}_i, \mathbf{u.. 2021. 5. 30.
Soft Actor Critic (SAC) 알고리즘 - 1 행동가치 함수에 대한 소프트 벨만 방정식은 다음과 같다. \[ \begin{align} Q_{soft}^\pi (\mathbf{x}_t, \mathbf{u}_t ) & \gets r_t + \gamma \ \mathbb{E}_{\mathbf{x}_{t+1} \sim p(\mathbf{x}_{t+1} | \mathbf{x}_t, \mathbf{u}_t ), \ \mathbf{u}_{t+1} \sim \pi (\mathbf{u}_{t+1} | \mathbf{x}_{t+1} ) } \tag{1} \\ & \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \left[ Q_{soft}^\pi (\mathbf{x}_{t+1}, \mathbf{u}_{t+1} )- \alpha \log \pi(\mathbf.. 2021. 5. 29.
소프트 정책 이터레이션 어떤 정책 \(\pi_{old}\) 에 대해서 행동가치 함수가 주어지면 기존의 정책 보다 더 큰 행동가치 값을 갖는 새로운 정책 \(\pi_{new}\) 를 계산할 수 있다. 이 과정을 정책 개선(policy improvement)이라고 한다. 그렇다면 최대 엔트로피 목적함수 문제에서 도입한 식 (1)의 탐욕적 정책으로 \[ \pi (\mathbf{u}_t | \mathbf{x}_t ) = \frac{ \exp⁡ \left( \frac{1}{\alpha} Q_{soft}^\pi (\mathbf{x}_t, \mathbf{u}_t ) \right) }{ \int_{\mathbf{u}^\prime} \exp⁡ \left( \frac{1}{\alpha} Q_{soft}^\pi (\mathbf{x}_t, \mat.. 2021. 5. 28.
소프트 벨만 방정식 (Soft Bellman Equation) 소프트 상태가치와 소프트 행동가치의 시간적인 관계식을 알아보기 위해서, 소프트 행동가치 함수를 한 시간스텝 전개해 보자. \[ \begin{align} & Q_{soft}^\pi (\mathbf{x}_t, \mathbf{u}_t ) \tag{1} \\ \\ & \ \ = \int_{\tau_{x_{t+1}:u_T }} \left( \sum_{k=t}^T \gamma^{k-t} \left( r_k -\gamma \alpha \log \pi (\mathbf{u}_{k+1} | \mathbf{x}_{k+1} ) \right) \right) p(\tau_{x_{t+1}:u_T } | \mathbf{x}_t, \mathbf{u}_t ) d \tau_{x_{t+1}:u_T } \\ \\ & \ \ = \int_{\.. 2021. 5. 27.
최대 엔트로피 목적함수 강화학습 에이전트가 최적 경로를 선택하는 것만을 학습한다면 환경 변화에 매우 취약할 것이다. 환경 변화는 실제 세계에서 늘 벌어지는 일이므로 학습시에 최적의 선택과 함께 차선의 선택도 학습한다면 에이전트가 환경 변화에 보다 강인하게 대처할 수 있을 것이다. 강화학습의 목표는 다음과 같이 반환값(누적 보상)의 기댓값으로 이루어진 목적함수를 최대로 만드는 것이었다. \[ J= \mathbb{E}_{\tau \sim p(\tau) } \left[ \sum_{t=0}^T \gamma^t r(\mathbf{x}_t, \mathbf{u}_t ) \right] \] 그런데 이와 같은 표준 목적함수를 확장시켜서 '정책의 로그함수'를 추가한 새로운 목적함수를 생각해 보자. \[ J= \mathbb{E}_{\tau \si.. 2021. 5. 26.
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.