728x90
보상을 최적화하기 위한 학습
- 관측(에이전트) → 행동(환경) → 보상
- 에이전트의 목적은 보상의 장기간 기대치를 최대화하는 행동을 학습
- 강화 학습 사례
정책 탐색
- 정책: 소프트웨어 에이전트가 행동을 결정하기 위해 사용하는 알고리즘
확률적 정책
- 30분 동안 수집한 먼지의 양을 보상으로 받는 로봇 진공청소기
- 로봇 훈련을 위해 변경이 가능한 두 개의 정책 파라미터(직진, 회전)
- 확률 p, 각도의 범위 r
- 전진확률 p, 회전확률 1-p
- 회전각도 마이너스 r < angle < 플러스 r 사이 랜덤값
- 이 정책에는 무작위성이 포함되어 있기 때문에 확률적 정책
- 그 중에 가장 좋은 정책 선택
- 문제는?
- 모래사장에서 바늘 찾기!
유전 알고리즘
- 1세대 정책 100개를 랜덤하게 생성해서 시도
- 성능이 낮은 정책 80개는 버리고 20개를 살려 각각 자식 정책 4개를 생산
- 살아남은 정책과 그 자식은 2세대를 구성
- 좋은 정책을 찾을 때까지 여러 세대에 걸쳐 반복
Policy Gradient(PG)
- 정책 파라미터에 대한 보상의 미분값을 평가
- 높은 보상의 방향을 따르는 미분값으로 파라미터를 수정하는 최적화 기법을 사용
- 로봇 진공 청소기에서,
- p를 조금 증가시킨 후 30분동안 로봇이 수집한 먼지 양이 증가했는지 평가
- 만약 먼지 양이 많아졌다면 p를 조금 증가, 그렇지 않으면 p를 감소
- 로봇 진공 청소기에서,
OpenAI gym
- 강화학습의 어려움 점?
- 학습을 위한 작업 환경 마련
- 게임 플레이 학습 시 게임 시뮬레이터 필요
- 보행 로봇 학습 시 실제 세상에서 그냥 하면 되지만 한 번 사고 나면 복구 불가
- 학습 속도 높이는 것 불가능 (컴퓨터의 성능과 관계 없음)
- 결론적으로 실제 세상에서 훈련하는 것은 어렵고 느려 최소한의 시뮬레이션 환경 필요
- PyBullet, MujoCo 등 3D 물리 시뮬레이션 라이브러리 존재
- 다양한 종류의 시뮬레이션 환경을 제공하는 툴킷
- 아타리 게임, 보드 게임, 2D와 3D 물리 시뮬레이션 등
- OpenAI는 일론 머스크가 공동 창업한 인공지능 연구 회사
- CartPole 환경 생성
- 카트 위 막대가 넘어지지 않도록 왼쪽이나 오른쪽으로 가속할 수 있는 2D 시뮬레이션
- 정책: 막대가 왼쪽으로 기울어지면 카트를 왼쪽으로 가속하고 오른쪽으로 기울어지면 오른쪽으로 가속
- 이 정책으로 에피소드 500번 실행해서 얻은 평균 보상과 결과 확인
실습
pip install virtualenv
(base) C:\Users\Playdata>cd RL
(base) C:\Users\Playdata\RL>virtualenv RL
(base) C:\Users\Playdata\RL>.\RL\Scripts\activate
(RL) (base) C:\Users\Playdata\RL>jupyter notebook
- Python 3.5 이상
- sklearn 0.2 이상
# gym 설치
!python -m pip install -U gym
# python 3.5 이상
import platform
print(platform.python_version())
# 0.2 이상 필수
import sklearn
sklearn.__version__
import tensorflow as tf
tf.__version__
import gym
import numpy as np
import os
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import matplotlib as mpl
mpl.rc('animation',html='jshtml')
np.random.seed(42)
tf.random.set_seed(42)
gym.envs.registry
# 환경 구축
env = gym.make('CartPole-v1',render_mode = "rgb_array")
# 환경 초기화
obs = env.reset()
# 카트 수평 위치, 0이 중앙
obs[0][0]
# 속도, 양수면 우측
obs[0][1]
# 막대의 각도, 0이 수직
obs[0][2]
# 막대의 각속도, 양수가 시계방향
obs[0][3]
img = env.render()
img.shape
plt.figure(figsize=(5,3))
plt.imshow(img);
env.action_space
# action= 1은 오른쪽으로, action = 0은 왼쪽으로
action = 1
env.step(action)
728x90
'부트캠프 > 컴퓨터 비전' 카테고리의 다른 글
[오류 해결] WARNING:Ignore distutils configs in setup.cfg due to encoding errors (0) | 2022.12.19 |
---|---|
YOLO (0) | 2022.12.19 |
[OpenCV] 2D Convolution, MNIST, Pooling (0) | 2022.11.29 |
[OpenCV] HOG (0) | 2022.11.18 |
[OpenCV] 호모그래피와 매칭 (0) | 2022.11.18 |