PPO의 하이퍼파라미터 메모 #2b: 배치 사이즈 & 버퍼 사이즈(연속 행동 공간)편
소개
PPO의 하이퍼파라미터를 여러가지 만지면 어떻게 되는지 실험의 메모. 지난번에 이어, 이번은 연속 행동 공간의 환경에서 PPO를 학습시킬 때의 배치 사이즈, 그리고 (이어서) 버퍼 사이즈에 대해.
Best Practices when training with PPO 라는 기사의 batchsize에 대한 지식의 요약을 재 게시 :
이전의 검증에서, 이산 행동 공간에 대해서는, 확실히 배치 사이즈는 작은 것이 좋다는 것을 알았다.
이번에는 연속 행동 공간을 가진 Pendulum-v0에서 검증해 보겠습니다. 과연…
실험
update_interval (= 버퍼 크기)을 10240으로 고정하고 배치 크기를 16,64,256,512,1024,2048,5120,10240으로 바꾸어 실험해 보자.
소스 코드도 마찬가지로 여기에서 빌렸다.
argument로 변경하는 것은 --batchsize (와 저장 장소를 실험마다 변경하기 때문에 --outdir)이다.
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',
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.INFO)
parser.add_argument('--monitor', action='store_true')
parser.add_argument('--update-interval', type=int, default=10240)
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)
최적화 기법은 이전 결과에 따라 SMORMS3 (인수 없음)을 사용합니다.
실험 환경
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',
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.INFO)
parser.add_argument('--monitor', action='store_true')
parser.add_argument('--update-interval', type=int, default=10240)
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)
결과
학습 곡선
100 구간의 이동 평균을 취한 것.
16~2048의 경우는 학습 횟수 $1.0\times 10^6$회 사이에 수렴하고 있는 것처럼 보인다.
최고의 모델 성능
best 모델로 10000회 달렸을 때의 누적 보수의 상자 수염도. 부정적인 보상이므로 위로 갈수록 좋습니다. 왼쪽이 전체, 오른쪽은 일부 확대도.
이것을 보면, 가장 좋은 것이 1024일 때는 있지만, 작은 배치 사이즈도 충분한 성능을 내고 있는 것 같다.
5120 이상은 안되는 모양.
학습 시간
오른쪽은 확대한 것. 당연한 이야기이지만 배치 크기를 줄이면 시간이 늘어납니다.
버퍼 크기 실험
이번에는 배치 크기를 1024로 고정하고 버퍼 크기 (chainerRL의 PPO에서 "update_interval")를 1024, 2048, 4096, 10240, 20480, 40960, 102400, 409600, 8192 비교해 보자.
학습 곡선
100 구간의 이동 평균을 취한 것.
최고의 모델 성능
best 모델로 10000회 달렸을 때의 누적 보수의 상자 수염도. 마찬가지로 부정적인 보상이므로 위로 갈수록 좋습니다. 왼쪽이 전체, 오른쪽은 일부 확대도.
결론
다시 한번, 전 기사의 이상 범위를 보자.
Batch Size
Typical Range (Continuous): 512 - 5120
Buffer Size
Typical Range: 2048 - 409600
Pendulum-v0에서는 :
이번에는 배치 크기를 1024로 고정하고 버퍼 크기 (chainerRL의 PPO에서 "update_interval")를 1024, 2048, 4096, 10240, 20480, 40960, 102400, 409600, 8192 비교해 보자.
학습 곡선
100 구간의 이동 평균을 취한 것.
최고의 모델 성능
best 모델로 10000회 달렸을 때의 누적 보수의 상자 수염도. 마찬가지로 부정적인 보상이므로 위로 갈수록 좋습니다. 왼쪽이 전체, 오른쪽은 일부 확대도.
결론
다시 한번, 전 기사의 이상 범위를 보자.
Batch Size
Typical Range (Continuous): 512 - 5120
Buffer Size
Typical Range: 2048 - 409600
Pendulum-v0에서는 :
마음이 가면 계속됩니다.
Reference
이 문제에 관하여(PPO의 하이퍼파라미터 메모 #2b: 배치 사이즈 & 버퍼 사이즈(연속 행동 공간)편), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/deepirl_learner/items/f2f6941d871e86bede24텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)