PPO 알고리즘에서 action_std
글 목록
action_std
PPO 알고리즘에서 탐색의 정도를 결정하는 파라미터이다. 에이전트가 행동(action)을 결정할 때, 네트워크의 출력 평균값(action_mean)을 중심으로 얼마나 무작위성을 섞을지 결정하는 표준편차.
-
action_std 가 크면
- 에이전트가 평균값을 많이 벗어난 행동 시도 가능
- 초기에 유리, 동작 불안, 떨림 등 있을 수 잇음
-
action_std 가 작으면
- 에이전트가 평균값에 아주 가까운 행동
- 학습 후반부에 동작 정교하게 다듬는 과정
코드에서 아래처럼 사용 가능하다.
action = action_mean + (noise * action_std)
action_std_mean

약 1시간 40분 학습 결과 action_std_mean 그래프
- 0.5 : 초기에는 action_std 를 0.5로 주고, 과감함 탐색을 시도
- 0.5 ~ 0.55 : PPO 알고리즘에서 reward에 따라 탐색범위를 넓힌다. 이때 성능이 매우 좋지 않았다.
- 0.55 ~ 0.38 : 알고리즘에서 탐색을 줄여나간다. 성능이 급상승
- 0.38 ~ : 안정화하는 단계로 (아직 안정화 단계가 아닌데!!!)
그래서, retrain을 다시 시작했다.
action_std_max, action_std_min
action_std_max와 action_std_min 값도 체크해야 한다. 이 값들은 에이전트가 모든 액션 차원들의 표준편차의 최대값, 최소값이다.

- 0.5 ~ 0.03 : 특정 액션 부위가 완전히 안정된 상태. 정답 상태를 찾은거다.

- 0.55 ~ 0.68 : 어딘지 모르겠지만, 특정 액션 부위가 계속 탐색 범위를 넓혀가고 있는 중이다. 정답을 계속 못 찾고 있는 상태
- 아니면 아예 정답을 못찾고 있는 상태일지도
- 보상함수를 점검해야할 수도 있다.
Entropy
에이전트가 얼마나 고민하고 있는지 보는 지표 = 무작위성
- 엔트로피가 높으면? : 탐색
- 엔트로피가 낮으면? : 정착

이건 엔트로피 손실함수 그래프
손실함수는 Loss 최소화해야 하므로, 엔트로피를 최대화해야 한다. (수식은 생략)
- ~500k : 탐색을 열심히 하는 구간, 엔트로피가 높게 유지되는 구간
- 500k ~ : 탐색을 하다가 뭔가 찾은 구간, 불필요한 탐색을 줄임, 엔트로피가 낮아지는 과정
결론
- 엔트로피 양호
- action_std_min 양호
- action_std 양호
- action_std_max 계속 높아짐
특정 한개 부위만 정답을 찾지 못하는 현상으로 볼 수 있을 것 같다.
보상함수랑 패널티가 충돌하는 건가?
마치 뜨거운 아이스아메리카노 같은… 뭐지? 뭐가 문제인지 찾아봐야 한다.
애초에 불가능한
특정 액션 부위가 애초에 불가능한 탐색을 던져준걸까?
뷰어로 일단 확인해 보고, 문제가 되는 특정 부위가 어디인지 찾아봐야겠다. 보상함수를 수정하거나 패널티를 다시 주거나…