심층 강화 학습 프레임 워크 machina를 사용해 보았습니다.

소개



심층 강화 학습 프레임워크machina가 신경이 쓰였으므로, 어떤 것일까빠른 시작를 해 보기로 한다

환경: Mac, pyenv viertualenv 설치됨

설정하기



우선 virtualenv로 전용 환경을 만든다. Python3.7.3을 컴파일러로 지정
pyenv install 3.7.3
pyenv virtualenv 3.7.3 machina
pyenv activate machina
pip install -U pip
pip install numpy torch torchvision jupyter machina-rl

Python 설치 중 zipimport.ZipImportError: can't decompress data; zlib not available 오류가 발생하여 설치할 수 없습니다. 다음 기사에 설명된 해결 방법으로 안전하게 설치할 수 있습니다.

[MacOS Mojave] pyenv에서 파이썬 설치가 zlib 오류로 실패했을 때의 대응

빠른 시작을 시도



리포지토리 복제
git clone https://github.com/DeepX-inc/machina.git
cd machina

jupyter notebook 시작
jupyter notebook

노트북에서 example -> quickstart -> ppo_acrobot.ipynb 를 열고 깜박이고 훈련하고 결과를 봅니다. 4.Visualize behavior after trainning을 실행하면, 트레이닝 결과의 동영상이 재생된다



음 100 에포크 정도이므로 제대로 서 있지 않지만, 학습하고 있는 것은 확인할 수 있다

다른 example을 시도합니다.



소스 코드를 쫓는 것은 나중에 한다고 해서 quickstart가 시원하게 끝났기 때문에 다른 example을 해 보려고 한다. 의미들 소리. MD에 설명 된 Behavioral Cloning 샘플 코드를 이동해보십시오.
IMITATION.md에 설명된 절차에 따라 expert_epis를 다운로드하여 다음을 수행합니다.
cd example
python run_behavior_clone.py
{'batch_size': 256,
 'c2d': False,
 'check_rate': 0.05,
 'cuda': -1,
 'data_parallel': False,
 'deterministic': False,
 'env_name': 'Pendulum-v0',
 'epoch': 1000,
 'expert_dir': '../data/expert_epis',
 'expert_fname': 'Pendulum-v0_100epis.pkl',
 'gamma': 0.99,
 'h1': 32,
 'h2': 32,
 'lam': 1,
 'log': 'garbage',
 'max_epis': 100000000,
 'max_epis_per_iter': 10,
 'num_parallel': 4,
 'pol_lr': 0.0001,
 'record': False,
 'seed': 256,
 'tau': 0.001,
 'train_size': 0.7}
/Users/user/.pyenv/versions/machina/lib/python3.7/site-packages/gym/envs/registration.py:14: PkgResourcesDeprecationWarning: Parameters to load are deprecated.  Call .resolve and .require separately.
  result = entry_point.load(False)
WARN: gym.spaces.Box autodetected dtype as <class 'numpy.float32'>. Please provide explicit dtype.
WARN: gym.spaces.Box autodetected dtype as <class 'numpy.float32'>. Please provide explicit dtype.
2019-05-26 16:18:47.056642 JST | observation space: Box(3,)
2019-05-26 16:18:47.056818 JST | action space: Box(1,)
2019-05-26 16:18:47.224460 JST | expert_score=-203.31068420410156
2019-05-26 16:18:47.225109 JST | num_train_epi=70
2019-05-26 16:18:48.468546 JST | sample: 0.8718sec
2019-05-26 16:18:48.469228 JST | outdir /Users/user/machina/example/garbage
2019-05-26 16:18:48.475059 JST | ------------------  ------------
2019-05-26 16:18:48.475268 JST | PolLossAverage          1.16213
2019-05-26 16:18:48.475474 JST | PolLossStd              0.20314
2019-05-26 16:18:48.475698 JST | PolLossMedian           1.17578
2019-05-26 16:18:48.475883 JST | PolLossMin              0.743538
2019-05-26 16:18:48.476050 JST | PolLossMax              1.57056
2019-05-26 16:18:48.476134 JST | TestPolLossAverage      0.775926
2019-05-26 16:18:48.476208 JST | TestPolLossStd          0
2019-05-26 16:18:48.476281 JST | TestPolLossMedian       0.775926
2019-05-26 16:18:48.476547 JST | TestPolLossMin          0.775926
2019-05-26 16:18:48.476738 JST | TestPolLossMax          0.775926
2019-05-26 16:18:48.476887 JST | RewardAverage       -1289.41
2019-05-26 16:18:48.477021 JST | RewardStd              54.1989
2019-05-26 16:18:48.477150 JST | RewardMedian        -1285.32
2019-05-26 16:18:48.477271 JST | RewardMin           -1404.18
2019-05-26 16:18:48.477401 JST | RewardMax           -1200.5
2019-05-26 16:18:48.477508 JST | CurrentEpoch            0
2019-05-26 16:18:48.477638 JST | ------------------  ------------
2019-05-26 16:19:05.279398 JST | sample: 0.7552sec
2019-05-26 16:19:05.280429 JST | outdir /Users/user/machina/example/garbage
...(中略)...
2019-05-26 16:24:19.457548 JST | ------------------  -----------
2019-05-26 16:24:19.457641 JST | PolLossAverage        -2.19763
2019-05-26 16:24:19.457720 JST | PolLossStd             0.040569
2019-05-26 16:24:19.457795 JST | PolLossMedian         -2.19817
2019-05-26 16:24:19.457868 JST | PolLossMin            -2.2765
2019-05-26 16:24:19.458061 JST | PolLossMax            -2.06869
2019-05-26 16:24:19.458231 JST | TestPolLossAverage    -2.1701
2019-05-26 16:24:19.458352 JST | TestPolLossStd         0
2019-05-26 16:24:19.458442 JST | TestPolLossMedian     -2.1701
2019-05-26 16:24:19.458536 JST | TestPolLossMin        -2.1701
2019-05-26 16:24:19.458669 JST | TestPolLossMax        -2.1701
2019-05-26 16:24:19.458774 JST | RewardAverage       -254.439
2019-05-26 16:24:19.458955 JST | RewardStd             86.3936
2019-05-26 16:24:19.459045 JST | RewardMedian        -242.488
2019-05-26 16:24:19.459119 JST | RewardMin           -364.349
2019-05-26 16:24:19.459191 JST | RewardMax           -127.547
2019-05-26 16:24:19.459263 JST | CurrentEpoch         950
2019-05-26 16:24:19.459334 JST | ------------------  -----------

같은 계층에 garbage 디렉토리가 생성되어 모델과 로그가 저장됩니다.
python take_movie.py

실행하면 garbage/optimal_movie 디렉터리가 생성되고 최상의 모델의 결과 동영상이 만들어집니다.


take_movie.py 런타임에 objc[35514]: +[__NSCFConstantString initialize] may have been in progress in another thread when fork() was called. 오류가 발생하면 여기을 참조하여 환경 변수를 추가하고 실행하면 작동합니다.
export OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES

요약



샘플 코드를 대략 바라보면 Pytorch를 기반으로 NN과 학습을 위한 환경, 강화 학습 알고리즘이 잘 추상화되어 컴포넌트가 되고 있다. 환경과 알고리즘을 템플리화해 두고 다양한 NN을 바꾸어 학습시켜 보거나 쉽게 할 수 있을 것 같다. 문서에 설명된 대로 인상을 받

뭔가 실용하고 싶은 곳

좋은 웹페이지 즐겨찾기