해결된 질문
작성
·
397
1
안녕하세요, 저는 강화 학습 관련 관심이 생겨 여러 강화 학습 관련 프로젝트를 진행하고 있는 대학교 4학년 학생입니다. 인프런 강의를 기반으로 하여 프로젝트 진행에 도움을 많이 받고 있어 너무 감사합니다.
다름이 아니라 ml-agents 관련 질문이 있어 글을 쓰게 되었습니다.
강화 학습에서 reward shaping하는 기준 혹은 참고 논문이 있는 건지 궁금합니다.
Training을 진행할 때 여러 번 경험한 내용으로 시간이 지나는데도 학습이 진행이 안된 경험이 있습니다. 이럴 때마다 작업 관리자로 CPU나 CUDA의 이용률을 보면 0프로 정도로 거의 움직이지 않는데 이를 병목 현상으로 예상하고 있습니다. 이를 해결하기 위해 아나콘다 프롬폼트에 키보드 interrupt를 하게 되면 멈췄던 학습이 실행 되어 여러 번 interrupt를 걸어 해결했습니다. 여러 다른 컴퓨터를 사용할 때마다 일어나는 공통적인 현상이라 혹시 제가 학습을 잘못 하고 있는 건지 아니면 이러한 현상에 대한 해결 방안이 따로 있는 건지 궁금합니다.
강화 학습 Training 방법을 찾아보면 제가 보기로는 두 가지 방법이 있었습니다. Unity 환경에서 하나의 프리팹 위에서 episode가 끝날 때마다 Agent나 environment의 구성을 랜덤으로 하여 진행하는 방식과 다른 environment를 여러개의 프리팹으로 하여 학습을 진행하는 방법이 있었습니다. 두 방법에 큰 차이가 있는 건지 궁금합니다.
항상 이해하기 쉽게 강화 학습 관련 강의를 해주셔서 다시 한번 감사드립니다.
답변 1
0
안녕하세요! 답변이 늦어서 죄송합니다.
강화학습의 경우 reward shaping에 관련된 논문 혹은 보상 설정 관련 테크닉은 어느 정도 있지만 딱 정형화된 기법은 제가 알기로는 아직까지 없는 듯 합니다. 사용하는 환경에 따라 학습 시켜보면서 원하는 행동을 취하도록 조절하는 것이 최선일 것 같고 많은 경험을 하시다보면 또 감이 생기실 수 있다고 생각합니다.
음.. 이 부분은 어쩌면 코드상에 문제가 있는 것은 아닌가 생각이 되는데요! 혹시 mlagents를 사용하실때만 발생하실까요? 아니면 gym 같은 다른 환경을 사용하실때도 발생하실까요? 병목이 발생할수는 있지만 아예 학습이 진행이 안될 정도는 아닐 것 같아서요! 그리고 학습이 진행안된다고 하시는 것이 환경과 상호작용은 진행하는데 학습이 안되는 것인지, 아니면 아예 환경과 상호작용 자체가 멈추는 것인지도 구체적으로 알면 좋을 것 같습니다.
해당 학습 방법에 대해서 차이점은 저도 조금 헷갈리는 것 같습니다. 에피소드가 끝날때마다 agent나 environment의 구성을 랜덤으로 한다는 것은 parameter randomization 학습법을 말씀하시는 것일까요? 그리고 다른 environment를 여러개의 프리팹으로 학습하는 것은 분산 학습을 말씀하시는 것일까요? 만약 그렇다면 두 학습 방법은 학습의 목적이 다른 기법들입니다. 이 부분에 대해서 조금 더 자세히 차이점을 설명해주시면 좋을 것 같습니다.
창이 멈춰있다가 키보드 입력을 했을때 동작했다고 하시는거보면 뭔가 ML-Agents 상의 문제라기보다는 자체 컴퓨터 상의 문제가 아닐까 생각합니다!
요 부분은 학습 설정에 있어서의 차이라고 봐주시면 좋을 것 같습니다. 일단 매 에피소드마다 환경의 구성을 바꿔서 학습하는 것은 그렇게 하지 않고 매 에피소드마다 똑같은 조건으로 진행하면 문제가 너무 쉬워지기도 하고 다양한 조건에서 문제를 풀 수 없기 때문에 그렇게 설정한 것입니다. 또한 여러 프리팹을 동시에 돌려서 학습시키는 것은 강화학습 알고리즘 중 분산학습 (distributed learning)을 하면 좋은 성능을 내는 알고리즘들 있습니다. 예를 들어 mlagents에서 제공하는 PPO 알고리즘이 대표적인데요. 이 알고리즘은 여러 환경을 동시에 실행하면서 많은 데이터를 수집해야 좋은 성능을 보입니다. 해당 알고리즘의 학습을 더 잘하기 위해서 여러 프리팹을 동시에 실행하며 학습하는 것입니다.
답변해주셔서 감사합니다!
2. gym같은 다른 환경은 사용하지 않아서 모르겠지만 ml agents를 사용했을 때 발생했습니다. 직접 코드를 작성한 python api 를 사용했을 때 항상 그런 건 아니지만 주로 발생했습니다. 아나콘다 창도 멈춰있고 빌드한 파일도 아예 멈춰있었습니다. 아나콘다 창에 키보드를 아무거나 입력했을 때 둘 다 동작하기 시작했습니다.
3. 에피소드가 끝날 때마다 agent나 environment의 구성을 랜덤으로 하는건 강좌에서 했던 드론 학습 부분처럼 하나의 Agent를 이용해 에피소드 종료할 때 마다 goal이나 agent의 위치를 랜덤으로 변경하여 학습하는 것입니다! 그리고 다른 environment를 여러개 프리팹으로 학습하는 것은 3D ball처럼 12개의 프리팹을 동시에 학습하는 것 입니다! 두 방식의 차이가 무엇인지 궁금합니다.