• 카테고리

    질문 & 답변
  • 세부 분야

    딥러닝 · 머신러닝

  • 해결 여부

    미해결

강의 외 질문입니다. Env 내부 action에 대한 질문입니다.

22.03.01 16:19 작성 조회수 143

0

안녕하십니까 수강생입니다.
 
저번 질문인, 특정 episode 마다 딥러닝 모델 weight를 저장하는 질문에대해 잘 가르쳐주셔서 정말 감사드립니다.
 
이번 질문은 강의에서는 약간 거리가 있을 수 있는 점에 대해 여쭤보고 싶은 내용입니다.
 
강의를 잘 학습하고 이해한 뒤,
 
최종적으로는 자신이 만든 env에 적용하는 것이 엔지니어가 최종적으로 원하는 행동일 것 같습니다.
 
현재는 학습과 제 자신이 만든 env에 적용해보는 실습을 동시에 진행하는 중입니다.
 
제가 만든 env에 여러 종류의 정책기반 강화학습을 적용해보고 다시 한 번 깨닫고 이해하는 시간을 갖는중입니다.
 
이러한 시간을 갖던 중에, 제 env에서 마음에 들지 않는 점이 있어 혹시나 하여 질문드리게 되었습니다.
 
env를 만드는 것이 이 강의가 목적이 아닌만큼, 조심스럽게 여쭈어보고싶습니다.
 
제 env는 현재 간단하게 action discrete는 3개이며 state는 2개 입니다.
 
여러 reward으로 제가 추구하는 state를 찾는것이 목표입니다.
 
reward에는 물리적 현상에 대한 피드백도 나름 넣어보고, 다양하게 시도 중입니다.
 
여기서 한 가지 문제가 발생했습니다.
 
강화학습 결과 action이 한가지로 고정되는 현상이 일어나고 있습니다. (예를들어 aciton이 0,1,2중 1로만 행동하는 중)
 
이 현상은 어떤 정책기반 강화학습을 사용했느냐에 따라 생기는 문제는 아닙니다!
 
간단히 생각하여, 추론가능하게도 1만 행동하는 것이 바람직한 알고리즘입니다.
 
이 현상을 방지하기 위해서 env 내에서 action "1"의 행동이 다음으로 제한되는 코드를 만들고 싶습니다.
 
"같은 행동을 '연속으로' 100 번 실행하지 않는다"
 
위를 파이썬 코드로 작성하여 env내에 넣고자 합니다. 머리를 굴려봐도 잘 해결되지 않아서, 혹시 코드 작성에 도움을 주실수 있으실까요? 감사합니다

답변 1

답변을 작성해보세요.

0

안녕하세요 김유석님.

김유석님 말씀대로 이 강의의 최종 목적은 자신만의 env를 만드는 것입니다. 자신만의 env는 본 강의에서 설명드리는 카트폴 예제와 같이 자신이 해결하고자 하는 문제에 적합한 동작을 하고 또한 동작을 설명하는 state, action, reward를 가지고 있는 프로그램입니다. 강화학습 알고리즘은 env에서 나오는 state를 가지고 정책인공신경망과 가치인공신경망을 학습합니다. env는 정책신경망에서는 나오는 action을 가지고 프로그램을 실행해서 그 결과에 따른 다음 state와 reward를 반환하는 방식입니다. 강화학습 알고리즘과 env가 이렇게 동작하는 것을 이해하는 것이 본 강의의 목적입니다.

김유석님이 질의하신 내용에 대해서는 정답은 없습니다. env 내부에서 특정 action에 대한 제한을 걸었을 때 좋은 성능을 얻을 수도 있습니다. 행동을 제한하는 방법은 다양합니다. 이 부분은 김유석님께서 방법론을 고민하셔야 할 것 같습니다. 하지만, 강화학습 알고리즘 기초 이론과 학습 과정에 따르면 특정 action에 대한 강제적인 제한을 두는 것 보다는 reward를 사용하는 방법이 좋을 것 같습니다. 내가 제한하고자 하는 행동에 보다 작은 reward를 주는 것이죠.

그리고 state에 대한 문제인데 env에서 state를 설계할 때 state는 환경을 설명하기 위한 충분한 정보를 가지고 있어야 합니다. 예를 들어 강화학습을 주식 시장에 적용하고자 할 때, env가 주식매매프로그램이고 state는 시가, 고가, 저가, 종가, 거래량 그리고 action은 매수(1), 매도(2), 대기(0) 이라 할 때 정상적인 학습이 되지 않을 것을 확인할 수 있습니다. 즉 프로그램에서 사용하는 state인 시가, 고가, 저가, 종가, 거래량이 주식매매 판단에 충분한 정보를 제공하지 못하기 때문입니다. 만약에 구리가격이 포스코 주가와 아주 밀접한 연관이 있다는 가정을 해보겠습니다.(이런면 좋겠죠^^) 이 상황에서는 state에 구리가격을 넣고 학습하면 학습이 정상적으로 이루어지고, 학습된 모델로 매매 프로그램을 실행하면 돈을 잘 벌 수 있겠죠. 이렇듯 state는 해결하고자하는 문제를 충분히 설명할 수 있는 변수를 사용해야 합니다.

강화학습을 실무에 적용할 때 PPO와 같은 강화학습 알고리즘을 직접 만들기 보다는 미리 개발되어 있는 패키지를 사용합니다. 저 같은 경우는 Stable Baselines3를 사용하고 있습니다. 참고하시기 바랍니다.

감사합니다.