reinforcement-learning-kr / Unity_ML_Agents

Unity ML-agents Project Repository of RLKorea
81 stars 49 forks source link

환경에 여러 에이전트들을 복사해서 만들었을 경우? #7

Closed moonsh closed 4 years ago

moonsh commented 4 years ago

질문이 좀 많네요. 책에선 다루지 않는 내용이지만 궁금해서 질문드려요.

Unity ML-agent 예제들을 보면 같은 에이전트를 복사하여 학습속도를 높인거 같은데요. 학습을 위해서는 각 에이전트들의 state,action,reward, next_state, 들을 한 메모리에 공유하면 될까요? 그리고 이 각 에이전트들은 같은 네트워크에서 나오는 Action 결과를 이용해서 움직이면 될까요?

적대적 DQN 만들기를 보면 두개의 Brain 사용과 Single Brain 사용의 차이점은 단지 데이터가 따로따로 들어오는지 아니면 하나의 Brain 으로 들어오는지 설정한다고 봐도 될까요?

마지막으로 Pytorch를 이용해도 문제 없는지 궁금합니다. 감사합니다.

Kyushik commented 4 years ago

안녕하세요! 질문하신 사항들에 대해 답변 드립니다. 개인적인 의견이라 틀린 부분이 있을 수 있는 점 참고 부탁드립니다!

우선 여러 에이전트를 복사해서 사용하는 경우 DQN 같은 일반적인 on policy 알고리즘은 메모리에 다양한 데이터를 따로 쌓을 수 있긴 합니다. 이런 경우 한 메모리에 데이터를 공유하면 됩니다. 하지만 이런 경우보다 off policy 알고리즘을 사용할 때 여러 에이전트를 복사해서 사용하는게 더 효과적입니다. on policy 알고리즘의 경우 계속 데이터를 누적한 데이터셋을 만들고 거기서 일정 개수의 배치데이터를 뽑아서 학습하는 방식을 취하는데 off policy 알고리즘은 과거에 누적한 데이터를 사용할 수 없습니다. 이에 따라 여러 데이터를 뽑아서 배치 데이터로 만든 후 한번에 학습에 이용하는 것이 어렵습니다. 하지만 다수의 에이전트를 사용하는 경우 현재 타임스텝의 모든 에이전트 데이터를 하나의 배치데이터로 만들고 학습을 수행하면 됩니다. 이에 따라 여러 에이전트를 동시에 사용하는 경우 off policy 알고리즘에서도 다수의 배치 데이터를 통해 학습을 수행하는 것이 가능해집니다. 또한 A3C나 R2D2 같은 distributed RL 알고리즘의 경우 다수의 에이전트(worker)를 이용하여 학습을 수행합니다. 이런 알고리즘들은 다수의 환경을 만들어서 사용해야하므로 ML-Agents를 이용하면 손쉽게 환경 구성이 가능합니다.

적대적 DQN 만들기에서 다수의 브레인을 따로 사용하는 경우 각 브레인에 하나의 에이전트에 대한 데이터가 들어오게 설정하는 것이고 하나의 브레인을 사용하는 경우 모든 에이전트에 대한 데이터가 한꺼번에 들어오게 됩니다. 말씀하신 그 차이밖에 없고 이에 따라 강화학습 알고리즘에서 데이터를 받는 형태를 조금 다르게 해야합니다. 제 경험상 하나의 멀티에이전트 환경을 사용하는 경우 하나의 브레인을 사용하는 것이 더 알고리즘 짤 때 편했습니다. 하지만 멀티에이전트 환경을 여러개 복사해서 동시에 돌리는 경우에는 각 에이전트에 해당하는 브레인을 연결해주는 것이 알고리즘 짤 때 더 편했습니다. 두 방법 모두 사용해보시고 기호에 따라 사용하시면 될 것 같습니다!

직접 강화학습 알고리즘을 구현하실 경우 Pytorch를 이용하셔도 상관없습니다. ML-Agents에서 제공하는 강화학습 알고리즘을 사용하시는 경우 tensorflow를 설치하셔야 코드를 실행하실 수 있습니다.

moonsh commented 4 years ago

네 알겠습니다. 상세한 설명 감사합니다 !.