DQN을 통한 mario게임 학습
서론
*참고
- 강화학습 개념부터 Deep Q Networks까지, 10분만에 훑어보기
- 강화 학습 (DQN) 튜토리얼
- DQN 실습 :: CartPole 게임
- DQN을 통한 cartpole게임 학습
- TRAIN A MARIO-PLAYING RL AGENT
- gym-super-mario-bros 7.3.2
생각
CartPole 게임에서 구현한 DQN을 토대로 흔히 알려진 Mario 게임을 RL을 통해서 Clear 해보려고 했으나 실패했습니다. env를 받아들이고 DQN을 구현은 했지만, 학습이 제대로 되지 않았습니다. 생각해볼 부분이 많은 것 같습니다. 잘 되진 않았지만, 코드를 분석하고, 며칠간 RL에 관해서 공부하면서 배운 게 많아서 왜 잘되지 않았을까에 대한 고찰을 개인기록용으로 적어놓도록 하겠습니다. 다음에 시간이 되면 다시 한번 도전해보도록 하겠습니다.
CNN
CartPole과 Mario 게임의 가장 큰 차이점은 CartPole의 경우는 state가 (4,)의 형태로 아주 간단했지만 Mario 게임은 (3,240,256)로 이미지 형태를 띤다는 것입니다. 따라서 DQN내부를 구현할 때도 FC가 아닌 CNN으로 구현을 해야 합니다.
-
처음에는 무작정 (3,240,256)을 다 받아서 CNN에 넣었는데 학습이 엄청 오래 걸리고 잘 안 되었습니다. 후에 검색을 통해서 policy에 color가 영향을 주지 않는 것, (240,256)은 게임상에서 보이는 이미지일 뿐, 컴퓨터가 판단하기에는 넘치는 정보라는 것 등을 확인하고 이미지를 grayscale로 바꾸고 down sampling 하여 (1,84,84)로 만들어서 학습시켜보았지만 잘되지 않았습니다.
-
CNN의 구조도 처음에는 convolution 레이어 두 개를 사용해서 구현했지만 잘되지 않았고, FC레이어를 추가하는 등 실험을 했지만, 학습이 잘되지 않았습니다. 모델 자체를 설계하는 건 어떤 식으로 하는 건지 한번 공부해보고 싶습니다. torch에서 CNN 예제로 된 흔히 쓰이는 레이어들로 구현했었는데도 잘 안 되었었는데 Mario 게임에 적합한 모델은 어떻게 설계하는 건지 궁금합니다.
-
CNN의 레이어 구조뿐만 아니라 하이퍼 파라미터도 마찬가지입니다.
DQN
-
가장 크게 의문점이 들었던 건 epsilon에 대한 값입니다. CartPole에서와 마찬가지로 epsilon 값을 8% => 1%로 바꾸어가며 사용을 했는데 Mario 게임에서도 이게 타당한지를 잘 모르겠습니다. Explore를 8% 정도로 할 때 Mario 게임의 다양한 env에서 새로운 경로를 개척할 수 있는지 잘 모르겠습니다. 학습시킨 DQN으로 실제 마리오 게임을 플레이 해봤는데 파이프에 계속 부딪히는 모습을 자주 보여줬는데 이게 Explore를 하지 못해서 기존 경로를 못 벗어난 게 아닐까 추측을 해봤었습니다.
-
epsilon과 마찬가지로 ReplayBuffer의 크기나, sampling size 등의 하이퍼파라미터 최적값도 찾아야 할 것 같습니다. gamma에 대한값도 생각해 봐야겠습니다.
GPU
최종적으로 혼자서 코드를 수정하는 정도로는 잘 안돼서 결국엔 pytorch에서 제공하는 Mario tutorial을 도움받아서 구현했습니다. 하지만 GPU memory 관련 오류가 계속 나는데 이 부분은 도저히 감이 안 옵니다. GPU 프로그래밍이나 torch에서 GPU를 어떻게 쓰는지 공부를 하고 다시 도전해보도록 하겠습니다.
*참고
ML내 다른 글 보기
댓글남기기