Atari가 무엇일까? Atari는 비디오 게임 회사이다.
그럼 어떻게 강화학습 [Reinforcement Learning]에 Atari가 도입되게 되었을 까?
2013년 구글 Deepmind에서 발표한 Playing Atari with Deep Reinforcement Learning 이라는 논문이 등장하면서 시작되었다. 이 논문을 통해 보이고자 한 것은 Breakout (a.k.a 벽돌깨기) 게임을 강화학습을 통해 학습을 시켜서 인공지능이 스스로 벽돌을 깨부수는 것을 확인하고자 함이였다. 특히나 이 모델의 경우 Deep 이라는 단어에서 알 수 있듯이 딥러닝을 강화학습에 적용시킨 모델이다. DQN이라고 불리는데, 강화학습 중 하나인 Q-Learning에 Deep Learning을 접목시켜서 더 효율적인 학습이 가능하도록 하기 위함이였다.
이 글을 통해 Atari를 활용하여 강화학습을 할 수 있는 경험이 되었음 좋겠어서 글을 쓰게 되었다. 이 글은 논문 리뷰는 아니고 강화학습을 하기 위한 튜토리얼의 느낌이니 참고바란다.
실행 방법
1. Anaconda 환경 설정
conda create -n atari_test python=3.6
이 문장을 conda prompt에 입력을 하게 되면 atari_test라는 이름을 가진 가상 환경에 python 3.6 버전을 설치하게 된다. 본인의 경우 밑에 표를 보면 python 3.6.13 버전이 설치된 것을 확인할 수 있었다.
2. conda 활성화
3. 필수 라이브러리 설치
여기서 부터는 강화학습을 진행하기 위한 필수 라이브러리들을 설치해야 한다.
conda install pytorch torchvision, torchaudio cudatoolkit=10.2 -c pytorch
딥러닝도 사용하기 때문에 pytorch도 설치를 해야한다. 여기서 cudatoolkit=10.2의 경우는 GPU를 사용하지 않으면 cpuonly-c로 바꾸면 된다.
4. gym, stable baseline3, atari_py, opencv 설치
강화학습 모델 라이브러리 중에 stable baseline3가 있다. 이것 또한 설치를 하면 된다.
https://stable-baselines3.readthedocs.io/en/master/index.html
위의 경로로 들어가면 설치 방법과 예제, 알고리즘 등 다양한 정보를 얻을 수 있으니 참고하면 된다.
conda install -c conda-forge gym
conda install -c conda-forge stable-baselines3
conda install -c conda-forge atari_py
conda install -c conda-forge opencv
위의 4개의 코드를 각각 실행하면 준비가 완료 된다.
다만, 설치에 시간이 좀 걸릴 수 있다.
5. atari 설치
기껏 강화학습에 관련된 라이브러리를 설치해놓고 atari를 설치안하면 아무것도 할 수가 없다. atari를 설치 해야하는데 설치방법은 간단하다.
https://www.atarimania.com/rom_collection_archive_atari_2600_roms.html
이 경로로 들어가면 다음과 같은 창이 뜬다.
여기서 밑에 있는 Download V19.0을 클릭하면 압축파일이 다운로드 된다. 다운로드 후 압축해제를 하고 그 폴더 자체를 원하는 위치로 옮겨서 경로복사를 해놓는다. (나중에 쓸일이 있다)
압축 해제를 하면 HC ROMS와 ROMS 2개의 폴더가 보이는데 이 폴더가 만약 압축되어있다면 이 역시 압축 해제를 한다. ROMS 폴더에 들어가면 위의 이미지와 같은 내용들이 들어있는데, 뭔진 모르겠지만 눈치껏 파일의 이름을 보면 atari사에서 만든 게임들인 것을 눈치챌 수 있다.
6. atari 파일 불러오기
이젠 모든 준비가 끝났다. 지금부터는 conda 환경으로 아까 설치한 atari game들을 불러와서 강화학습을 돌리기만 하면 된다.
python -m atari_py.import_roms <파일 경로>
아까 뒤에서 쓰기 때문에 경로복사 하라고 했던 그 경로를 파일 경로 이 부분에 집어 넣고 실행하면 아래와 같은 화면이 뜬다.
되게 이상해 보이지만, copy를 계속하고 있는것으로 보아 conda 환경으로 복사하고 있다는 것을 알 수 있다.
7. python 파일 생성
이 부분은 필수는 아니지만, 뒤죽박죽 파일이 섞여있는 꼴을 보기가 싫어서 mkdir로 새로운 폴더를 만들어서 실행할 파일을 이 디렉토리에 저장을 했다.
그 다음 이 디렉토리로 들어가서 아무 이름의 python 파일을 생성한 뒤, 아래의 코드를 복붙하고 저장하면 된다.
from stable_baselines3.common.env_util import make_atari_env
from stable_baselines3.common.vec_env import VecFrameStack
from stable_baselines3 import A2C
# There already exists an environment generator
# that will make and wrap atari environments correctly.
# Here we are also multi-worker training (n_envs=4 => 4 environments)
env = make_atari_env('Breakout-v0', n_envs=4, seed=0) // Breakout 게임을 불러옴
# Frame-stacking with 4 frames
env = VecFrameStack(env, n_stack=4)
model = A2C('CnnPolicy', env, verbose=1)
model.learn(total_timesteps=100000) // 10만번 학습 실행
obs = env.reset()
while True:
action, _states = model.predict(obs)
obs, rewards, dones, info = env.step(action)
env.render()
8. python 파일 실행
만든 python 파일을 실행시키면 다음과 같은 화면이 뜬다.
자세히 보면 mean값은 증가하고 loss 값은 감소하고 있다. 이를 통해 제대로 학습이 되고 있는 것을 알 수 있다.
Training이 다 끝나고 나면 자동으로 게임이 실행되어 강화학습이 진행중인 화면이 뜬다.
9. 참고용 동영상
결론
재미있다ㅎㅎ