인프런 커뮤니티 질문&답변

block63님의 프로필 이미지
block63

작성한 질문수

유니티 머신러닝 에이전트 완전정복 (기초편)

DQN 이론

GridWorld, CollectObservations에서 에러 질문입니다.

작성

·

465

·

수정됨

0

비슷한 주제로 네번째 글을 올리게 되었습니다. -.-;

매번 답변에 항상 감사드립니다.

몇몇 실수를 교정한 현재의 현상을 나열해 드립니다.

 

  1. 책 및 github의 스크립트를 따랐을 때

    (1) 실행 코드

(2)에러 화면

  1. 동영상 강의 내용을 따랐을 때

    (1) 실행코드

    (2) 에러화면

  2. null==sensor 를 null!=sensor로 교정하였을 때

    (답변해주신 글 도움 받음)

    (1) 실행코드

    (2) 에러 화면

     

    ※ observation size (6)와 observation size (2)의 인식이 문제인 것 같습니다. 도움 부탁드립니다.

답변 1

0

민규식님의 프로필 이미지
민규식
지식공유자

일단 1, 3 상황에 대해서 따로 말씀드리겠습니다!

1의 경우 VectorObservation의 크기가 2인데 4개의 관측이 입력되어서 2개를 잘라낸다는 내용인 것 같습니다. 두 경우 모두 for문 안의 otherPos[i]가 몇개 찍히는지 확인이 필요할 것 같습니다. 1의 경우 제 생각에 vectorObs는 6개로 맞게 들어갔는데 GoalSensor의 길이가 2로 설정된 반면 4개의 정보가 들어가는 것 아닌가 생각됩니다. VectorObs로 들어가는 정보, GoalSensor로 들어가는 정보의 길이를 다 찍어보시면 좋을 것 같습니다.

3의 경우 총 6개로 설정된 VectorObs 중 2개만 들어가고 있는 상황인 것 같은데요! otherPos에 대한 설정을 확인하시고 for문 안의 otherPos[i]가 몇개 입력되는지 확인해보시면 좋을 것 같습니다!

block63님의 프로필 이미지
block63
질문자

해결하였습니다. ^^/

  1. 최종 적용 코드는 다음 캡쳐와 같이 1번과 같은 코드이고,

release 17이 아닌, mlagents release 20으로 하니 에러 없이 정상 실행되었습니다.

image

  1. 다른 질문글에서 문의했던 DQN, A2C에서 스코어가 낮게 나오는 것도 해결되었습니다.

    텐서보드에서 DQN은 확연하게 학습이 제대로 되어가는 그래프이고,

    A2C는 많이 불안정 하지만 아무튼 개선은 되었습니다.

 

release 17의 에러 현상 요약

 (1) print문을 이용해 정확히 6개가 제대로 생성됨을 확인함.

 (2) 시험삼아 Behavior Parameters의 Vector Observation의 Space Size를 0,1,2,3,4,5,6,7 을 넣어보고 play 해봄.

  7을 넣을 때는 더미로 sensor.AddObservation(1) 이라고 추가함.

 (3) 각 경우 에러 표시는 다음과 같음.

 0일 때: More observations(6) made than vector observation size(0) -> 높은 빈도

  More observations(4) made than vector observation size(2) -> 낮은 빈도

  

1일 때: More observations(6) made than vector observation size(1)

  More observations(4) made than vector observation size(2)

  

2일 때: More observations(6) made than vector observation size(2)

  More observations(4) made than vector observation size(2)

  

3일 때: More observations(6) made than vector observation size(3)

  More observations(4) made than vector observation size(2)

  

4일 때: More observations(6) made than vector observation size(4)

  More observations(4) made than vector observation size(2)

  

5일 때: More observations(6) made than vector observation size(5)

  More observations(4) made than vector observation size(2)

 

6일 때: More observations(4) made than vector observation size(2)

  

7일 때: More observations(4) made than vector observation size(2)

 

Space Size를 제대로 설정한 6과 7일 때는 높은 빈도의 에러 하나가 없어짐.

추정: 에러 표시의 빈도를 봤을 때, 에피소드가 리셋될 때, 읽지 말아야할 sensor를 읽어들이는 현상으로 추정함.

 

 

block63님의 프로필 이미지
block63
질문자

m_GoalSensor.GetSensor().AddOneHotObservation(goalNum, values.Lenght)에서

m_GoalSensor에 들어간 정보를 알려면 어떻게 해야 되는지 좀 알려주시면 감사하겠습니다.

goalNum, values.Lenght가 각각 무엇인지는 print문으로 찍어서 알 수 있는데, 그것이 onehot인코딩 되서 m_GoalSensor에 어떤 모양으로 들어가 있는지를 알고 싶습니다.

민규식님의 프로필 이미지
민규식
지식공유자

답변이 늦어서 죄송합니다! 해결되셨다니 다행이네요! 그동안 release 17에서는 문제없이 동작한다고 생각했는데 아니었나보네요 ㅜㅜ 일단 유사한 내용으로 질문주시는 분 있으시면 이 글 내용 전달드리도록 하겠습니다! 그리고 질문 주신 부분에 대해서는 코드 담당하시는 분이 잘 아실 것 같아서 문의 후에 답변 드리도록 하겠습니다!

이현호님의 프로필 이미지
이현호
지식공유자

안녕하세요,

 

AddOneHotObservation의 함수의 경우 observation, range를 인자로 받습니다. (공식문서 참고)

해당 정보를 받았을 때 내부적으로 observation 인덱스만 1인 길이가 range인 원핫벡터로 변환하는 작업을 거치게 됩니다.

ex) (0, 2) -> [1, 0] , (1, 3) -> [0, 1, 0]

 

실제로 전달되는 정보에 대해서 로그를 찍어보시고 싶은 경우에는 python code에서 dec.obs[GOAL_OBS]를 통해 확인하실수 있습니다!

 

추가로 궁금하신 점 있으시면 말씀해주세요 :)

block63님의 프로필 이미지
block63

작성한 질문수

질문하기