본문 바로가기

강화학습10

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.
DQN에서 DDPG로 DQN 알고리즘에서는 상태변수가 연속공간 값이지만 행동은 이산공간 값으로 가정한다. 행동의 개수가 적으면 문제가 되지 않을 수도 있지만, 드론이나 로봇과 같은 실제 물리 시스템의 경우 행동의 차원이 크기 때문에 연속공간 값으로 가정하는 것이 더 타당하다. 그렇다면 DQN 알고리즘을 연속공간 상태변수와 행동의 경우에도 적용할 수 있을까. 먼저 DQN 알고리즘의 핵심인 정책과 시간차 타깃을 계산하는 부분을 살펴보자. 여기서는 상태변수와 행동을 모두 연속공간 값으로 가정하므로 상태변수는 \(\mathbf{x}_t\) 로 표기하고 행동은 \(\mathbf{u}_t\) 로 표기한다. DQN은 확정적 정책을 가지며 다음과 같이 계산했다. \[ \pi (\mathbf{x}_t )= \mathbf{u}_t =\arg\.. 2021. 5. 14.
Tensorflow2로 만든 DQN 코드: CartPole-v1 OpenAI Gym에서 제공하는 CartPole-v1 환경을 대상으로 DQN 알고리즘을 Tensorflow2 코드로 구현하였다. 폴이 카트에 조인트 되어 있고, 카트는 마찰 없는 트랙을 좌우로 이동할 수 있다. 폴은 처음에 수직으로 세워져 있으나 중력에 의해서 기울어져서 떨어질 수 있다. 카트의 목적은 폴이 떨어지지 않고 계속 수직으로 세워져 있도록 좌우로 이동하는 것이다. 상태변수는 카트의 위치와 속도, 폴의 각도와 속도 등 4개의 연속공간 값이고, 행동은 왼쪽 방향 이동과 오른쪽 방향이동 등 2개의 값만 있는 이산공간 값이다. 학습결과는 다음과 같다. 다음 영상은 학습 도중의 카트폴 움직임이다. 다음은 학습이 끝난 후 카트폴의 움직임이다. DQN 코드는 Q 신경망을 구현하고 학습시키기 위한 dqn_l.. 2021. 5. 4.
DQN 알고리즘 - 1 Q-러닝 알고리즘은 이산공간 상태변수와 행동을 기본으로 하며, 유한 개의 상태변수와 행동에 대한 행동가치의 값을 테이블(Q-테이블이라고 한다) 형식으로 저장하고 관리한다. 적은 수의 상태변수와 행동의 경우에는 문제가 되지 않지만 많은 수의 상태변수와 행동의 경우에는 이와 같은 테이블 형식의 관리는 불가능할 수 있다. 예를 들어서 비디오 게임에 Q-러닝을 적용한다고 할 때, \(200 \times 200\) 픽셀 이미지, \(255\) 컬러, \(3\) 채널로 가정한다면 상태변수의 개수는 \((255^3 )^{200 \times 200}\) 개가 된다. 이 숫자는 전 우주에 있는 원자의 개수보다도 더 큰 숫자라고 한다. 이처럼 방대한 상태변수의 개수를 테이블 형태로 저장하고 관리한다는 것은 불가능한 일이다.. 2021. 5. 2.
강화학습에서의 이산공간과 연속공간 문제 이산시간(discrete-time)이란 시간 변수가 특정 지점에서만 값을 갖는 것을 의미한다. 반면에 연속시간(continuous-time)이란 시간 변수가 연속적인 값을 갖는 것을 의미한다. 가령 특정 시간 구간 \([t_0, t_f ]\)에서 가질 수 있는 시간 지점이 \(t=t_0, t_1, ..., t_f\)로서 유한개라면 이산시간이고, \(t_0 \le t \le t_f\)로서 무한개라면 연속시간이다. 이산시간에서는 시간 전개를 시간스텝(time-step)으로 표현한다. 이산공간(discrete-space)이란 시간 이외의 어떤 변수가 특정 지점에서만 값을 갖는 것을 의미한다. 반면에 연속공간(continuous-space)이란 시간 이외의 어떤 변수가 연속적인 값을 갖는 것을 의미한다. 가령 .. 2021. 4. 26.
A2C 알고리즘-2: 액터 신경망 한 개의 샘플을 이용한 목적함수의 그래디언트는 다음과 같았다. \[ \nabla_\theta J(\theta) \approx \sum_{t=0}^T \left[ ( \nabla_\theta \log⁡ \pi_\theta (\mathbf{u}_t | \mathbf{x}_t)) A^{\pi_\theta} (\mathbf{x}_t, \mathbf{u}_t ) \right] \] 앞에서 크리틱 신경망을 설계했으므로 수식 안에 있는 어드밴티지 함수는 크리틱 신경망의 추정값으로 대체한다. \[ \nabla_\theta J(\theta) \approx \sum_{t=0}^T \left[ ( \nabla_\theta \log⁡ \pi_\theta (\mathbf{u}_t | \mathbf{x}_t)) \hat{A} (.. 2021. 4. 20.
중요 샘플링 (Importance Sampling) 파이썬(Python)이나 매트랩(Matlab) 등 대부분의 컴퓨터 언어에는 가우시안 또는 균등분포(uniform distribution)로부터 샘플을 생성하는 함수를 가지고 있다. 샘플을 생성하고 싶은 확률밀도함수는 알고 있지만 샘플을 생성하기가 어려울 때는, 균등분포를 갖는 랜덤변수 \(X \sim U[0,1]\)로부터 해당 확률밀도함수를 갖는 랜덤변수 \(Y\) 사이의 함수 관계식 \(Y=g(X)\)을 구하고, 균등분포로부터 추출한 샘플 \(x^{(i)}\)를 함수 관계식 \(y^{(i)}=g(x^{(i)})\)로 변환해서 사용하면 된다. 그러나 이 방법은 랜덤변수가 다차원(multi-dimension)을 갖거나 복잡한 확률밀도함수를 갖는 경우에는 적용하기가 어렵다. 만약 샘플을 추출하여 기댓값(ex.. 2021. 1. 6.
강화학습 문제 최적제어 문제는 다음과 같이 이산시간(discrete-time) 차분 방정식(difference equation)으로 표현된 비선형 시스템이 있을 때, \[ \mathbf{x}_{t+1} = \mathbf{f}_t ( \mathbf{x}_t, \mathbf{u}_t) \] 시스템이 어떤 스칼라 성능지수(performance index) \( J_i \)를 최소화하도록 제어변수 \( \mathbf{u}_t \in R^m \)를 결정하는 문제다. 성능지수의 일반적인 형태는 다음과 같다. \[ J_i = \phi (T, \mathbf{x}_T )+ \sum_{t=i}^{T-1} g_t ( \mathbf{x}_t, \mathbf{u}_t) \] 여기서 아래 첨자 \(t \)는 시간스텝을 나타내며 \( \math.. 2020. 11. 8.
[Discrete-Time] LQR 문제 비선형 시스템에 대해서 매우 일반적인 성능지수를 적용한 최적제어 문제에 대한 해를 유도해 보았다 (https://pasus.tistory.com/35). 그러나 이러한 셋팅으로는 명시적인 제어법칙(control law)을 유도해 내기가 어렵다. LQR은 선형 시스템에 대해서 2차 함수로 주어진 성능지수를 이용한 최적제어 문제에서 도출되었으며 명시적인 제어법칙을 가지고 있는 제어기이다. LQR은 linear quadratic regulator의 약자로서 시스템이 선형(linear)이며 성능지수가 2차함수(quadratic)라는 의미이다. regulator는 시스템의 상태를 0 (또는 set point로 불리는 고정된 목표 상태변수)으로 만드는 제어기를 뜻한다. LQR은 PID 제어기와 함께 실제 응용 문제.. 2020. 10. 31.
강화학습의 한계 강화학습이 비약적으로 발전하고 있지만, 로봇이나 드론 등 실제 물리 시스템의 제어에 적용하기에는 아직 극복해야 할 많은 문제를 가지고 있다. 첫 번째 문제점은 강화학습이 기본 동역학 모델을 알지 못하더라도 환경과의 상호작용을 통해 얻은 데이터만을 가지고 직접 정책을 유도할 수 있다지만, 단순한 작업을 배우는 데에도 너무 많은 시도(try)와 데이터가 필요하다는 점이다. 즉, 샘플 효율성이 매우 떨어진다는 뜻이다. 예를 들어 단순한 강화학습 예제 중의 하나인 진자(pendulum)의 정책을 학습하려면 수 십 또는 수 천회의 정책 실행이 필요하다. 게임이나 컴퓨터 시뮬레이션은 괜찮을지 몰라도, 로봇이나 드론 등 실제 물리 시스템에 대해서는 데이터를 얻기 위해서는 필요한 시간과 비용 등이 터무니없이 클 수 있.. 2020. 10. 28.