2024년 5월 17일 금요일

[Playground] LightZero

 다시 조금씩 공부를 시작했는데, 역시 어딘가에 기록해야 동기부여도 되고 아카이빙도 되어서 조금씩 적어볼까 합니다.

당분간 주제는 DeepRL로 해서 조금씩 해봄직한 것들을 해볼 예정입니다.

일단 예전에 너무 흥미를 가지고 있었던 Muzero 비스무리한 친구들을 싹다 묶어서 리뷰해보고 이것저것 만져보려고 해요. 

보다 구체적으로는, 

https://github.com/opendilab/LightZero

LightZero라는 프레임워크를 좀 살펴보려고 합니다. 


요런 느낌의 히스토리가 있는데, Muzero 이후에도 파생된 친구들이 꽤 있네요. 

LightZero는 다양한 Env(틱택토, 4목, 2048, gym, Atari, MuJoCo 등등)에 다양한 모델들을 쉽게 적용해볼 수 있도록 만들어진 프레임워크입니다. 이전에 인턴했던 회사에서 제가 했던 작업 중에도 비슷한 프레임워크를 구축하는 일이 있었는데, 뼈대만 잡아놓아서 시간이 좀 더 있었으면 하는 아쉬움이 남았던 기억이 있습니다.

이번에는 좀 꼼꼼히 뜯어볼 계획입니다. LightZero 프레임워크가 아직은 체스나 바둑을 지원하지는 않는데, 지원 예정이라고 하니 좀 기다리면서 공부하면 될 것 같아요.

공부할 내용은 

1. 아키텍쳐

2. 모델

3. 코드

순이 될 것 같은데, 중간 목표 중 하나는 오델로라는 보드게임을 마스터할 수 있도록 커스텀해보는 것이 목표입니다. 아마 env랑 모델 인풋으로 변환하는 세팅 정도만 건드려주면 크게 손볼 부분은 없지 않을까 싶은데 또 모르겠네요.

5월 중에 1,2,3은 끝내야 할 것 같고, 가능하다면 5월 안에 오델로 커스텀까지 해볼 수 있으면 좋겠네요.

사실 Muzero 오피셜 깃헙을 좀 뜯어보고 싶었는데 오래되어서 그런지 파이썬 버전이랑 호환 문제로 많이 꼬이더라구요. 아쉽긴 하지만 오히려 Muzero 후속작들까지 같이 볼 수 있어서 결과적으로는 이득인 것 같습니다.

일단 위 깃헙 레포를 받아서 튜토리얼을 좀 돌려봤습니다.

세팅 관련해서 좀 귀찮은 부분이 있었는데, python 3.11 버전을 사용해야 문제없이 돌아가는 것 같더라구요.

conda venv 만들때 python 3.11로 맞추고 라이브러리 세팅을 해주면 문제없이 완료됩니다.

세팅 후 env 하나 골라잡아서 training을 바로 돌려보았습니다.


틱택토 학습을 시켜보았는데, 쭉 지켜보고 있으면 재밌습니다. 이터레이션 올라갈 때마다 reward 올라가는 걸 보고있으면 내가 한 것은 아무것도 없는데도 괜시리 뿌듯하네요.

cartpole 같은 경우는 reward가 직관적으로 나오는데, 틱택토는 evaluator 리워드를 어떻게 주는지 궁금하네요. solved라 그냥 opponent 로직을 짜두고 opponent랑 플레이해서 승점을 리워드로 주는거려나요? evaluator 리워드 맥스값이 1인 것을 보니 solved 자체를 넣었다 해도 엔트로피를 좀 넣은 것 같은데, 자세한 내용은 코드 뜯어보면서 확인해봐야 할 것 같습니다.

아직 모델 복잡도나 아키텍쳐 등에 관한 아무런 지식은 없지만 이터레이션이 지금 4000번이 넘어가는데 아직도 학습이 제대로 안 된 것을 보아 너무 느린 것 같은 감은 있네요. 틱택토가 그렇게 어려운 게임은 아닌 것 같은데 말이죠.. 아마 프레임워크로 통일하느라 개별 게임에서 최적화는 안 되어 있는 것 같습니다.

으아.. 이터레이션 3만번을 넘어가는데 거의 끝이 보이는 것 같습니다. 평균 리워드가 0.5~6을 넘어가네요. 종료되면 텐서보드도 체크해보겠습니다. 


평균 리워드 그래프를 보면 완만한 우상향 그래프를 그리는 걸 확인할 수 있습니다. 다만 entropy 때문인지 smoothing 말고 raw를 보면 조금 진동폭이 큰 경향은 있네요. 

대략적인 느낌은 파악했으니 이제 열심히 뜯어보면 되겠습니다. 아키텍쳐 공부는 사실 그냥 적당히 훑어보면 될 것 같고, 모델 공부 및 코드 공부할 때 어차피 제대로 뜯게 될거라 모델이랑 코드 공부하면서 적당히 정리를 좀 해보겠습니다.



댓글 없음:

댓글 쓰기