
aAtari Breakout을 학습시켜 보았다.
영상 링크
https://www.youtube.com/watch?v=CVjnIaWjUZE
Playing Atari with Deep Reinforcement Learning 논문 링크
https://www.cs.toronto.edu/~vmnih/docs/dqn.pdf
DQN과 replay memory를 사용했다.
초 간단하게 설명 하자면, Deep Q-Network의 줄임말로
Q value를 deep network(여기선 CNN 구조)를 이용해 근사, Q value를 통해 행동을 선택하는 방법이다.
시뮬레이션을 통해 구하는 데이터를 바로바로 사용하게 되면 데이터들의 상관관계가 높아서 학습이 비효율적으로 이루어지게 된다.
지도 학습에서 100에포크가 아닌, 한 데이터를 100번씩 순서대로 사용하여 1에포크를 돌리는 것으로 비유를 들 수 있을까 싶다.
replay memory는 100만개 저장했다가 랜덤하게 꺼내는 방식이다.
이전에 mujoco Hopper를 학습했을때 적용했던 PPO, actor-critic 알고리즘에 비해서 개념과 적용법이 훨씬 간단하다.
입력 데이터가 discrete하다는 점이 연속적인 행동 공간에서 장점이 있는
actor-critic 방법을 굳이 사용하지 않아도 되게 하기 때문에
DQN을 사용함으로써 모델의 복잡도, 데이터 분포의 작은 분산등의 측면에서 이득을 볼 수 있다.
하지만 atari에서 사용자가 제공받는 데이터가 이미지 뿐이라는 점, 보상의 시점이 어느정도 지연되어 있다는 점, 게임답게 복잡하다는 점이 기존의 쉬운 강화학습 문제 대비 학습을 어렵게한다. (breakout이 가장 쉬움에도 불구)
위 논문은 이미지를 흑백처리 후, resize를 통해 사이즈를 줄여서 사용한다.
(3, 210, 160) -> (1, 84, 84)
또한 사람은 이미지가 아니라 동영상을 보게 된다.
모델에 이미지를 넣고 행동을 결정하게 된다면 성능이 좋지 못할 것이 분명하다.
위 논문은 이전 4프레임을 채널 차원으로 합쳐서 사용한다.
(1, 84, 84) -> (4, 84, 84)
또한 집중해서 봐야할 부분만 잘라서 사용할 수도 있을것이다.
하지만 위 논문에서는 다양한 atari게임에서 일반적인 성능을 보이는 하나의 구조를 목표로 하기 때문에 적용되진 않았다.
breakout같은 게임에서는 배경이 검정, 물체들이 밝은 색을 띈다. 이런 경우에는 4개의 채널에서 max값을 추출해 사용하게 된다면 데이터의 차원이 감소될 것이다.
(4, 84, 84) -> (1, 84, 84)
이전까지는 일반적으로 확장 가능한 알고리즘을 목표로 학습을 시켰다면
이제는 적용 대상의 특성에 맞는 데이터 전처리와 모델 구조를 적용해야 할 것 같다. 나는 구글과는 환경이 다르다.
https://www.youtube.com/watch?v=TmPfTpjtdgg
구글 딥마인드의 영상을 보면 4시간만에 사람보다 월등히 잘하는 모습을 보여준다.
하지만 나는 8시간을 학습해도 처참한 성능을 보여,
1주일 가량 하이퍼파라미터 조정, PPO적용 등 여러 시도를 했다.
하지만 어떤 breakout 학습 영상을 보는데 24시간이나 학습했다는 것을 보았다.
설마 그냥 시간이 부족했던건가?? 싶어 배치 처리에 공을 들여서 계산 효율성을 높혔고, 꽤 오랜시간 학습시켜 보니 성능이 점차 좋아지는것을 발견했다.
18시간이나 학습했음에도 불구하고 성능이 조금씩 계속 좋아지는 모습을 보이지만, 코랩에 돈을 쓰고 있었기 때문에 그만뒀다.
깃허브 링크
https://github.com/nrye4286/reinforcementLearning/blob/main/Breakout.ipynb
https://www.youtube.com/watch?v=ZgcCVyhrQVw

Atari Skiing을 학습해보았다.
DQN과 Replay Memory를 사용했다.
이전에 Breakout학습을 할 때 너무 오래걸렸어서
학습속도 향상을 위해 이 게임 전용 이미지 전처리를 해주었다.
배경과 구름을 지우고, 이전 프레임을 잔상으로 처리해주었다.
어느 방향으로 이동중인지 알게 하기 위해 가장 최근의 프레임이 제일 밝도록 해주었다.
또한 매 4프레임 단위로 계산해주었으며, 이 프레임을 4개 모아서 잔상처리를 해주었다.(이전 16프레임에 대한 정보가 인풋으로 주어짐)
처음에는 1프레임 단위로 계산, 32개를 모아서 잔상처리를 해주는 방식으로 학습을 했었지만, 위와 같이 바꾼 후, 성능과 학습속도 모두 좋아졌다.
gymnasium 디폴트 보상은 효율적이지 못하게 설계되어 있다.
매 프레임당 음의 보상이 주어지고, 놓친 게이트를 에피소드 종료시에 음의 패널티 보상으로 주는 방식이다.
이를 바꾸기 위해 이미지에 표기된 점수판을 에피소드마다 저장, 점수판이 바뀔때 양의 보상을 주도록 해 주었다.
하지만 첫번째 방식은 보상이 매우 지연되어있는 것으로 차이점이 있다.
당연히도 두번째 방식이 훨씬 효율적, 안정적으로 학습이 진행되었다.
t4 18시간