강화학습 기반 게임 플레이 인공지능

프로젝트 동기 및 기획의도

예전부터 딥러닝 방법 중에 강화학습이 있었고, 이를 활용해 인공지능 모델을 만들어보고 싶다는 생각을 했었습니다. 이번 프로젝트를 통해 강화학습을 공부하여 간단하게라도 구현할 수 있지 않을까 하는 생각으로 기획하게 되었습니다. 인간보다 뛰어난 인공지능을 만들고 싶었지만, 주어진 자원과 기간의 한계로 최소한의 플레이가 가능한 인공지능을 목표로 개발에 들어갔습니다. 처음 목표한 게임은 '사과게임'이라는 퍼즐 게임이었으나, 개발 중 행동의 종류가 너무 많아 만들기 어려워진 후 Ms-Pacman-v4라는 팩맨 게임의 모델을 만들기로 결정했습니다.

강화학습 개념 및 모델

강화학습은 에이전트가 주어진 환경에서 행동을 수행하고, 그에 따른 보상을 바탕으로 최적의 정책을 학습하는 딥러닝 방법입니다. 간단히 말하면, 게임 플레이 중 얻는 보상을 기반으로 해야할 행동을 결정하는 모델입니다. 본 프로젝트에서는 강화학습 모델 중 DQN(Deep Q Network)을 사용하였으며, PYTORCH 라이브러리를 활용하여 MsPacman-v4 게임의 자동 플레이 인공지능을 학습시켰습니다.

사용 환경

Google Colab

프로젝트 설명

우선 강화학습 인공지능의 환경인 MsPacman-v4를 다운로드 받아 세팅하였습니다. 필요한 라이브러리를 불러오고, Gym을 통해 게임 환경을 구성하며, torch를 사용해 모델을 구축하였습니다.

강화학습에 필요한 하이퍼파라미터(할인율, 배치 사이즈, 학습률, 타겟 네트워크, 에피소드 수, 경험 재생 메모리의 최대 갯수)를 정의하였고, 에피소드 수는 구글 코랩의 자원 한계로 5000으로 설정하였습니다. 또한, cuda 사용 가능 시 GPU(T4)를 사용하도록 연산 장치를 설정하였습니다.

DQN 모델은 클래스로 정의하여, 게임 화면의 2D 이미지를 입력받고 여러 CNN 계층을 통해 특징을 추출한 후, 1차원으로 변환하여 행동을 선택하도록 구현하였습니다. forward 함수에서는 ReLU 활성화 함수를 적용하며 최종 행동 값을 반환합니다.

상태 전처리 함수는 입력받은 2D 이미지를 흑백 처리하고, 학습에 적합한 크기로 조정하여 속도를 향상시켰습니다. 또한, 리플레이 메모리에서 무작위로 경험을 샘플링하여 텐서로 변환, 최적 Q값을 계산하고, 손실을 통해 경사하강법으로 가중치를 업데이트하는 최적화 함수를 구현하였습니다.

MsPacman-v4 환경에서 policy_net과 target_net 두 네트워크를 생성, 가중치를 동일하게 설정하고 Adam 옵티마이저로 학습시켰으며, 총 5000 에피소드 동안 학습을 진행하였습니다. 각 에피소드마다 env.reset()으로 초기화 후 상태를 전처리하고, 초반은 무작위 탐색, 후반은 정책에 따라 최적 행동을 선택하도록 하였습니다.

학습 완료 후, 모델은 게임을 플레이하고 플레이한 영상을 저장하였으며, 학습 동안의 보상 그래프를 통해 점진적 상승 경향을 확인할 수 있었습니다.

개선방안

전체 학습량이 부족해 모델 성능을 충분히 끌어올리지 못한 점이 아쉽습니다. 적어도 10000번 이상의 학습이 필요했으나, 구글 코랩의 한계로 5000번으로 설정되었습니다. 또한 추가적인 하이퍼파라미터 튜닝과 데이터 증강 기법을 통해 모델의 일반화 성능을 향상시킬 필요가 있습니다.

감상

강화학습에 처음 도전하면서 많은 것을 배우고, 실시간 게임 플레이 인공지능을 구현하는 데 성공한 것이 큰 성취감으로 다가왔습니다. 여러 어려움에도 불구하고, 이번 프로젝트를 통해 강화학습의 기초부터 응용까지 폭넓게 경험할 수 있었으며, 앞으로 더 나은 모델 개발의 밑거름이 되었다고 생각합니다.

시연 영상