본문 바로가기

전체 글159

TensorFlow2에서 1차, 2차 편미분 계산 자동으로 미분을 계산하려면 Tensorflow는 순방향 패스 과정에서 어떤 순서로 어떤 연산을 했는지 기억해야 한다. 그런 다음, 역방향 패스 중에 이 연산 목록을 역순으로 이동해 가며 미분(derivative)을 계산한다. Tensorflow는 자동으로 미분을 계산하기 위해서 tf.GradientTape API를 제공한다. Tensorflow는 tf.GradientTape의 컨텍스트 내에서 실행 된 관련 연산을 '테이프'에 '기록'한다. 그런 다음 해당 테이프를 거꾸로 돌려서 기록된 연산의 미분을 계산한다. tf.Variable로 생성된 변수에 대해서만 미분할 수 있는데 상수인 경우에도 watch() 메쏘드를 이용하면 미분을 계산할 수 있다. 예를 들어서 \(y(x,t)=x^3+2t\) 를 \(x\) .. 2021. 7. 25.
[PF-2] SIS에서 파티클 필터로 전체 조건부 확률밀도함수 \(p(\mathbf{x}_{0:t} | \mathbf{z}_{0:t}, \mathbf{u}_{0:t-1})\) 를 순차 샘플링 \(\mathbf{x}_{0:t}^{(i) }\) 로 다음과 같이 근사화 할 수 있었다. \[ p(\mathbf{x}_{0:t} | \mathbf{z}_{0:t}, \mathbf{u}_{0:t-1}) \approx \sum_{i=1}^N w_t^{(i)} \delta ( \mathbf{x}_{0:t} - \mathbf{x}_{0:t}^{(i)} ) \tag{1} \] 베이즈 필터는 상태변수 \(\mathbf{x}_t\) 의 조건부 확률밀도함수인 사후 확률밀도함수 \(p(\mathbf{x}_t | \mathbf{z}_{0:t}, \mathbf{u}_{0:.. 2021. 7. 11.
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.
[CR3BP-4] 자코비 적분 (Jacobi Integral) CR3BP의 무차원화된 운동방정식은 다음과 같았다. \[ \begin{align} & \ddot{x}-2 \dot{y} - x = - \frac{ (1-\mu)(x+\mu) }{r_{13}^3 } - \frac{ \mu (x+\mu-1) }{ r_{23}^3 } \tag{1} \\ \\ & \ddot{y}+2 \dot{x} - y = - \frac{ (1-\mu) y }{r_{13}^3 } - \frac{ \mu y }{ r_{23}^3 } \\ \\ & \ddot{z} = - \frac{ (1-\mu) z }{r_{13}^3 } - \frac{ \mu z }{ r_{23}^3 } \end{align} \] 여기서 \[ \begin{align} & r_{13}= \sqrt{ (x+\mu)^2+y^2+z^.. 2021. 6. 16.
[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.