PPO의 하이퍼파라미터 메모 #1: 최적화 기법편

전회의 기사 「Pendulum-v0 및 ChainerRL에서 심층 강화 학습 비교 메모

동기



PPO의 원논문에서는 Adam이 권장됩니다.

그러나 이런 논의를 보았다.
Using Adam Optimizer in PPO and similar off-policy optimization procedures

실험을보고하는 논문도 있습니다.
Henderson+ (2018) "Where Did My Optimum Go?: An Empirical Analysis of Gradient Descent Optimization in Policy Gradient Methods"

(그림은 상기 논문의 Figure 1.에서 인용)
논문 말하자면, PPO에서 학습률을 변경했을 때의 최적화 기법마다의 성능 변화가 이러한 것이다. 그렇다면 학습률 등을 최적화 방법이 제안하는 권장 값으로 비교할 때 어떻게 될까?

실험



실험 환경


  • CPU : Intel Core i7-8700CPU @ 3.20Hz x 12
  • 메모리 : 32GB
  • 그래보: GeForce RTX2080Ti 11GB

  • 파라미터 등



    환경은 Pendulum-v0.
    
        parser.add_argument('--gpu', type=int, default=0)
        parser.add_argument('--env', type=str, default='Pendulum-v0')
        parser.add_argument('--arch', type=str, default='FFGaussian',
                            choices=('FFSoftmax', 'FFMellowmax',
                                     'FFGaussian'))
        parser.add_argument('--bound-mean', action='store_true')
        parser.add_argument('--seed', type=int, default=0,
                            help='Random seed [0, 2 ** 32)')
        parser.add_argument('--outdir', type=str, default='results_adam',
                            help='Directory path to save output files.'
                                 ' If it does not exist, it will be created.')
        parser.add_argument('--steps', type=int, default=10 ** 6)
        parser.add_argument('--eval-interval', type=int, default=10000)
        parser.add_argument('--eval-n-runs', type=int, default=10)
        parser.add_argument('--reward-scale-factor', type=float, default=1e-2)
        parser.add_argument('--standardize-advantages', action='store_true')
        parser.add_argument('--render', action='store_true', default=False)
        parser.add_argument('--lr', type=float, default=3e-4)
        parser.add_argument('--weight-decay', type=float, default=0.0)
        parser.add_argument('--demo', action='store_true', default=False)
        parser.add_argument('--load', type=str, default='')
        parser.add_argument('--logger-level', type=int, default=logging.DEBUG)
        parser.add_argument('--monitor', action='store_true')
    
        parser.add_argument('--update-interval', type=int, default=2048)
        parser.add_argument('--batchsize', type=int, default=64)
        parser.add_argument('--epochs', type=int, default=10)
        parser.add_argument('--entropy-coef', type=float, default=0.0)
    
    

    최적화 기법은 인수를 취하지 않는 형태 (= Chainer 기본값이 됨)를 사용했다.

    결과



    결과(100 이동 평균)의 그래프가 이쪽.


    보기 어렵기 때문에 분해한 것도 나타낸다.

    「SGD와 그 개량계」, 「RMSprop과 그 개량계」, 「Adam 기타」로 나눈 그래프. (Adam (def)가 논문의 기본 매개 변수).

    의외와 달리 놀라움. SMORMS3가 꽤 좋은 느낌입니다.

    요약



    예를 들어 한 번만 시도했지만 최적화 방법을 선택하는 방식으로 비교할 수 있다는 것을 알았습니다. 어쩐지 진흙 늪의 걱정만

    좋은 웹페이지 즐겨찾기