본문 바로가기

전체 글353

[PF-1] 순차 중요 샘플링 (Sequential Importance Sampling) 베이즈 필터(Bayes filter) 문제는 측정값의 시퀀스 \(\mathbf{z}_{0:t}\) 와 제어입력의 시퀀스 \(\mathbf{u}_{0:t-1}\) 을 조건으로 한 상태변수 \(\mathbf{x}_t\) 의 조건부 확률밀도함수 \(p(\mathbf{x}_t | \mathbf{z}_{0:t}, \mathbf{u}_{0:t-1})\) 을 계산하는 문제였다. 상태변수 \(\mathbf{x}_t\) 의 사후(posterior) 조건부 확률밀도함수\(p(\mathbf{x}_t | \mathbf{z}_{0:t}, \mathbf{u}_{0:t-1})\) 이 주어지면 다양한 종류의 상태변수 추정이 가능하다. 예를 들어 칼만필터(Kalman filter)는 최적 MMSE(minimum mean-square .. 2021. 6. 13.
베이즈 필터 (Bayes Filter) 베이즈 필터(Bayes filter)는 이산시간(discrete-time) 확률 동적 시스템(stochastic dynamical system)의 상태변수를 추정하기 위한 확률론적인 방법으로서 칼만필터를 비롯한 대부분의 상태변수 추정 알고리즘의 근간을 이룬다. 베이즈 필터 문제는 초기 시간 \(0\) 부터 시간스텝 \(t\) 까지의 측정값 시퀀스 \[ \mathbf{z}_{0:t} = \{\mathbf{z}_0, \mathbf{z}_1, ... , \mathbf{z}_t \} \tag{1} \] 와 초기 시간 \(0\) 부터 시간스텝 \(t\) 까지의 제어입력(또는 행동)의 시퀀스 \[ \mathbf{u}_{0:t} = \{\mathbf{u}_0, \mathbf{u}_1, ... , \mathbf{u}_.. 2021. 6. 8.
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.
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.
주피터 노트북 사용법 주피터 노트북(Jupyter Notebook)을 사용하면 웹 브라우저에서 파이썬 코드를 입력하고 실행시켜 결과를 즉시 확인해 볼 수 있다. 또한 주피터 노트북은 파이썬 코드뿐만 아니라 설명 문서, 이미지, 수식 등을 하나의 파일로 기록할 수 있는 환경을 제공하여 강의 자료나 프리젠테이션 용도로도 많이 사용된다. 주피터 노트북은 아나콘다에 포함되어 있으므로 따로 설치할 필요가 없다. 실행 방법은 윈도 시작 버튼에서 아나콘다 폴더의 주피터 노트북을 클릭하거나, 또는 파이참(PyCharm)의 터미날 창에 jupyter notebook이라고 치면 된다. 그러면, 서버가 실행되며 웹 브라우저에서 노트북이 실행된다. 새로운 파이썬 노트북을 만드려면 우선 New -> Python 3 를 클릭한다. 그러면 새 노트북이.. 2021. 5. 5.
Tensorflow2로 만든 DQN 코드: CartPole-v1 OpenAI Gym에서 제공하는 CartPole-v1 환경을 대상으로 DQN 알고리즘을 Tensorflow2 코드로 구현하였다. 폴이 카트에 조인트 되어 있고, 카트는 마찰 없는 트랙을 좌우로 이동할 수 있다. 폴은 처음에 수직으로 세워져 있으나 중력에 의해서 기울어져서 떨어질 수 있다. 카트의 목적은 폴이 떨어지지 않고 계속 수직으로 세워져 있도록 좌우로 이동하는 것이다. 상태변수는 카트의 위치와 속도, 폴의 각도와 속도 등 4개의 연속공간 값이고, 행동은 왼쪽 방향 이동과 오른쪽 방향이동 등 2개의 값만 있는 이산공간 값이다. 학습결과는 다음과 같다. 다음 영상은 학습 도중의 카트폴 움직임이다. 다음은 학습이 끝난 후 카트폴의 움직임이다. DQN 코드는 Q 신경망을 구현하고 학습시키기 위한 dqn_l.. 2021. 5. 4.