• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

헷갈리는게 있어요...

22.03.19 08:12 작성 조회수 109

1

안녕하세요 강의 복습하면서 갑자기 궁금한 점이 생겼습니다.

 1. ppo folder 에 들어있는  3DBall.yaml 파일의 내용을 수정하면서 Learning 을 조정하는거라면 유니티 환경에서 굳이 파라메터를 설정할 필요가 있나요? ( ex: behavior parameters: vector observation, stacked vectors, continuous actions...etc)

2. 빌드파일 없이 유니티에서 바로 학습하는 경우 아나콘다 프롬프트로 작업하는 것과 비교했을 때 장단점이 무엇인가요?

3. 유니티에서 학습시켰을 경우 역시 텐서보드로 확인 가능한가요? 

 

4. 다음 강의에서 나오는 python API로 학습시키는 영상이 나옵니다. 이걸 쓰는 이유는 무엇인가요? yaml 을 쓰는 것과 비교했을 때 무슨 장점이 있나요? 

 

5. Python APi 다음 영상에서는 gridworld 예제가 나오는데요, 이 경우에는 유니티 스크립트를 하나하나씩 고치면서 학습을 시킵니다. 이런 경우는 왜 python api 를 안쓰나요? 

 

제가 계속 진도를 따라가다 보니, 각각의 튜토리얼들의 구분이 어떻게 지어지는지 좀 헷갈리네요. 이런 경우에는 이렇게 해라~ 저럴땐 저렇게 한다... 이런게 따로 있는건가요? 개념을 잘 잡지 못한거 같아서요. 답변 주시면 감사드리겠습니다!

답변 3

·

답변을 작성해보세요.

3

안녕하세요! 질문 주신 사항들에 대해서 답변 드리겠습니다! 

일단 전체적으로 질문 주신 사항들을 봤을 때 유니티 에디터 상에서의 작업, mlagents-lean (yaml 사용), python API 이 세가지 방법의 차이점에 대해서 조금 헷갈려하시는 것 같습니다. 우선 유니티 에디터상에서의 작업은 모두 환경 제작과 관련된 요소들입니다. 단순히 에이전트가 동작할 환경을 만드는 것과 관련이 있고 거기에 강화학습을 적용하기 위한 기능들만 추가한다고 생각해주시면 되겠습니다.

다음으로 mlagents-learn과 python API는 이렇게 유니티를 통해 만들어진 환경을 강화학습을 통해 학습하는 과정입니다. mlagents-learn의 경우 유니티 머신러닝 에이전트에서 제공하는 알고리즘을 통해 해당 환경에서 에이전트를 학습하는 것이고 이때 알고리즘에 대한 설정을 하는 것이 yaml 입니다. 이 경우 제공되는 알고리즘을 그대로 이용하는 것이므로 알고리즘에 대한 세부적인 수정이 어렵고 yaml을 통해서 알고리즘과 학습 관련 파라미터들만 수정할 수 있다는 단점이 있습니다. 단 강화학습에 대한 깊은 이해가 없어도 강화학습 알고리즘을 통해 환경에서 에이전트를 학습할 수 있다는 장점도 있습니다. 

Python API의 경우도 제작된 환경에서 에이전트를 학습하는 방법입니다. 단 이 경우는 제공되는 알고리즘을 이용하는 것이 아니라 환경과 통신할 수 있는 mlagents의 python API 기능들을 사용해서 직접 알고리즘을 구현하는 방식입니다. 이 경우 직접 알고리즘을 구현하기 때문에 세부적인 수정이 가능하며 mlagents에서 제공하지 않는 알고리즘도 직접 구현해서 적용하는 것이 가능하다는 장점이 있습니다. 단 알고리즘을 직접 구현해야 하므로 강화학습에 대한 지식과 이를 구현할 수 있는 능력이 필요하기 때문에 좀더 진입장벽이 있는 편입니다. 

아래 내용부터는 질문 주신 내용에 대한 답변 드리겠습니다! :) 

 

1. ppo folder 에 들어있는  3DBall.yaml 파일의 내용을 수정하면서 Learning 을 조정하는거라면 유니티 환경에서 굳이 파라메터를 설정할 필요가 있나요? ( ex: behavior parameters: vector observation, stacked vectors, continuous actions...etc)

일단 이 부분에 대해서는 yaml파일과 환경의 파라미터는 결정하는 부분들이 다릅니다. vector observation, stacked vectors, continuous action 등의 설정들은 환경 자체에 대한 설정이라고 생각해주시면 됩니다. 말씀하신대로 어떤 종류의 행동과 관측을 사용할지, 관측에서 대한 스택은 얼마나 할지 등을 결정할 수 있습니다. yaml 파일의 경우 해당 알고리즘 혹은 학습과 관련된 파라미터들을 결정합니다. PPO의 3Dball.yaml은 PPO 알고리즘에 대한 예를 들면 네트워크, 학습 스텝, PPO와 관련된 다양한 파라미터들을 수정할 수 있는 것입니다. 

 

2. 빌드파일 없이 유니티에서 바로 학습하는 경우 아나콘다 프롬프트로 작업하는 것과 비교했을 때 장단점이 무엇인가요?

유니티에서 바로 학습하는 경우 환경에 대한 수정이 조금 더 편하다는 점이 장점이 될 수 있을 듯 합니다. 예를 들어 환경 내의 어떤 값을 계속 바꾸면서 환경을 테스트 해봐야한다고 했을 때, 그 값을 한번 수정할때마다 환경을 한번씩 빌드하면 그 자체로도 시간 소모가 많습니다. 하지만 유니티 에디터상에서 바로 학습하는 경우 일일히 빌드할 필요없이 환경을 수정하고 바로 테스트 할 수 있다는 장점이 있습니다. 단 해당 환경을 누군가에게 공유한다거나 배포하는 경우는 빌드해서 보내는 것이 더 용량 절약도 되고 좋을 것 같습니다. 또한 Python API로 학습하는 경우는 빌드가 필수적으로 진행되어야 합니다. 

 

3. 유니티에서 학습시켰을 경우 역시 텐서보드로 확인 가능한가요? 

유니티 에디터 상에서 바로 학습하면서 텐서보드를 확인해본적은 없지만 똑같이 run id 폴더 내부에 텐서보드로 확인이 가능할 것으로 생각합니다.  

 

4. 다음 강의에서 나오는 python API로 학습시키는 영상이 나옵니다. 이걸 쓰는 이유는 무엇인가요? yaml 을 쓰는 것과 비교했을 때 무슨 장점이 있나요? 

아 요 부분은 위에서 설명한만큼 짧게 말씀드리겠습니다. python API의 경우 mlagents에서 제공하는 python API를 통해 직접 강화학습 알고리즘을 구현하고 이를 학습하는 방식입니다. yaml을 사용하는 mlagents-learn 방식은 유니티 머신러닝 에이전트에서 제공하는 강화학습 알고리즘을 이용하여 학습하는 방식입니다.  

 

5. Python APi 다음 영상에서는 gridworld 예제가 나오는데요, 이 경우에는 유니티 스크립트를 하나하나씩 고치면서 학습을 시킵니다. 이런 경우는 왜 python api 를 안쓰나요? 

이때도 유니티 스크립트를 하나하나씩 고치면서 학습을 하는 것이 아니라 환경을 수정하는 과정이라고 생각해주시면 좋습니다. gridworld에서는 유니티 에디터를 통해 환경만 수정하는 것이고 python api를 통해서는 이렇게 수정된 환경에서 학습을 수행하는 것입니다. 

0

답변이 도움이 되었다니 정말 다행입니다!! :) 

앞으로도 궁금한 부분 있으시면 편하게 질문 남겨주세요!! 

감사함니다! 

 

0

고재청님의 프로필

고재청

질문자

2022.03.19

자세한 답변 너무 감사드립니다...너무 자세하게 말씀해 주셔서 오히려 질문한게 죄송할 정도네요ㅠㅠ 

제가 헷갈리던 부분이 뭔지 확실하게 알게 되었습니다. 

유니티환경에서의 설정은 환경자체를 만들기 + 강화학습을 위한 기능 parameter 추가 

yaml 과 python API 는 둘다 기본적으론 역할은 같지만, 나중에 제가 만약 새로운 환경을 만들고 거기에 맞는 학습을 진행해야 할 때는 python API 를 써야하겠네요! 

개념 정리가 확실하게 되었습니다. 다시 진도에 박차를 가할 수 있을 것 같아요. 강의 너무 재밋게 잘 보고 있습니다. 보면서 감사한 마음을 금할 수 없네요. 친절한 답변 역시 감사드립니다. 좋은하루 되세요!