안녕하세요, 강화학습 공부를 하고 있는 석사 연구생입니다.
복잡한 게임에 강화학습을 적용시키기 위해 기초부터 하나씩 개념을 쌓아가려고 합니다.
DQN -> Dueling -> Double DQN 식으로 강화학습 에이전트의 성능 차이를 한번 확인해보고자 했습니다.
강화학습을 적용해보기 위해 간단한 미니게임을 만들었습니다.
5x5 격자의 게임판에서, 폭탄(X)과 목적지(R) 그리고 플레이어(O) 가 존재합니다.
모든 오브젝트의 위치는 매 에피소드마다 랜덤하게 배치됩니다.
게임판 예시:
게임판 데이터는 아래와 같이 사용됩니다. (빈칸/플레이어/폭탄/목적지 각각 0/1/2/3)
[[ 2, 0, 0, 0, 0 ],
[ 0, 2, 0, 0, 0],
[ 0, 0, 0, 0, 1],
[ 0, 0, 2, 0, 0],
[ 3, 2, 0, 2, 0]]
플레이어는 상, 하, 좌, 우 총 4개의 행동이 가능합니다.
일반 칸을 이동 시 -1의 Reward 를 받습니다.
벽으로 이동 시도 시 -1의 Reward 를 추가로 받습니다.
폭탄 칸을 이동 시 -10의 Reward 를 받습니다. (게임 끝남)
목적지 도착 시 +100의 Reward 를 받습니다. (게임 승리)
신경망은 현재 FC Layer 를 이용해서 1차원 형태로 펼쳐서 사용하고 있습니다. (5x5 -> 128 -> 64 -> 4)
문제는, 이 게임을 계속 진행했을 때 수렴성을 발견하지 못하고 계속 발산하는 것 같습니다.
학습은 기본적인
Reward + gamma * next_state_Q 값과 state_Q 값과의 평균제곱오차값을 Loss 로 사용했습니다.
오브젝트 배치를 랜덤 배치가 아닌 고정 배치로 테스트를 할 경우 Experience Replay(ER) 가 없을 때 수렴을 하는 것을 발견했고
ER 을 끼면 수렴을 하지 못하는 모습을 보여줍니다.
마치 계속 맵이 바뀌는 미로찾기 강화학습과 비슷하게 생각하면 될 것 같은데,
ER 을 끼고 학습했을 때 랜덤 샘플 배치로 학습을 진행하다보니 +100 Reward 를 얻을 수 있는 경우의 수가 많이 희박해서 그런 것일까요?
아니면 게임판 데이터를 다른 식으로 표현해야 하는지..
무언가 놓치고 있는 부분이 있을까요?
replay buffer 썻음?
타일배치를 one-hot 형식으로 바꾸고 즉, 5*5*3과 같은 형식으로도 해보셈
deque 사용해서 일정 개수만큼 채운다음, 랜덤 샘플 뽑아서 학습을 진행시켰습니다.
one-hot 방식도 한번 시도해보겠습니다. 아이디어 감사합니다.
아예 규칙성이없는 랜덤이면 수렴하지 못하는게 정상아닐까요? - dc App
그러게요. DQN 방식으로는 랜덤이면 해를 못찾는게 정상인듯. 엄청나게 많은 수의 랜덤 경우의 수 대부분을 모조리 학습했으면 몰라도.
만약 게임판을 이미지처럼 보고, 팩맨과 같이 생각한다고 해도 수렴성이 없는지 궁금합니다. "X를 피해서 R까지 도달해야 한다" 라는 규칙은 동일하니까요.
나 좀 머리가 띵한데 오브젝트들 위치가 다 랜덤이면 전략이란게 존재할 수가 없는거 아니냐?
자세한건 미니게임 생성 소스를 봐야 알 듯 합니다.. - dc App
혹은 진짜 드문경우지만 qvalue 관련해서 행동선택이 잘못되는건가 싶기도 하구요 - dc App
혼동을 드려서 죄송합니다. 아직 배우는 입장이라, 잘못된 의견일 수 있습니다. 이미지의 관점으로 봤을 때, 장애물과 목적지에 대한 정보를 구분할 수 있을 것 같았습니다. 다시 생각해보니 팩맨의 경우 같은 맵에서 실험한 결과가 대부분인 것 같고, 장애물의 위치가 모두 랜덤이라면 전체 픽셀이 비슷한 확률로밖에 근사될 수 없을 것 같네요. Snake Game 의 경우를 비슷하게 생각할 수 있지 않나 싶기도 하고.. 생각이 이래저래 갈피를 못잡고 있는 것 같습니다.
코드좀 올려줘봐여
해당 댓글은 삭제되었습니다.
정말 감사합니다. 훈련에 대한 관점을 바꿔서 봐야 했던 것 같네요.
오브젝트배치를 랜덤으로 했을때 ER 사용유무에 따른 결과는 어떤가요? 고정된 오브젝트로 학습한 것은 윗분말대로 memorization에 가까울 확률이 높습니다. 또 suboptimal로 수렴하는 것이 아닌 q값 자체가 발산하는것은 dqn의 고질적인 문제라, target network 파라미터 업데이트 주기를 키우시거나, ddqn을 먼저 구현해보세요
그리고 네트워크 입장에선 여러 경험을 통해, state에서의 0,1,2,3의 의미를 파악하는 것이 목표라 할 수 있기 때문에, 오브젝트가 랜덤하다고 해서 학습이 안되는건 아닙니다.
답변 감사합니다. 오브젝트 배치가 랜덤인 경우, 단일 네트워크 DQN으로 진행 시 ER 유무와 관계 없이 발산하는 모습을 보입니다. DDQN 방식도 적용해서 파라미터 업데이트 주기를 조절해보겠습니다. 만약 DDQN을 적용한다면, 오브젝트의 배치를 랜덤으로 훈련을 시키는 것이 아닌 일정 주기로 같은 맵, 플레이어의 다른 위치를 보여주고 학습하는 것이 더 좋은 방향일까요? 지금 생각으로는 이 방식도 말씀하신 memorization 문제가 발생할 수도 있을 것 같습니다.