1day_1paper
1day_1paper copied to clipboard
[17] Faster Improvement Rate Population Based Training (FIRE PBT)
기존 PBT 개선논문 PBT 1저자가 교신저자로 참여. (엔비디아에서 딥마인드로 이직했네?)
Abstract
PBT 는 2가지 한계점이 있었음.
- 느리다
- long-term 성능은 오히려 hand-designed 보다 떨어질 때도 많다.
Fire PBT 는 빠르게 성능이 좋아지는 parameter가 더 좋다
는 특징을 이용한다.
실험 결과, hand-design으로 찾은 parameter와 유사하게 찾는 것을 발견 + PBT imagenet 성능을 뛰어넘는다.
강화학습에도 적용했을 때, 좋은 성능 내는 것을 보인다.
Intro
learning rate 에서 특히 PBT 가 잘 working 하지 못했다.
ResNet-50 기준 PBT 는 71.7, Fire-PBT 는 76.5, hand-design 은 76.6
FIRE-PBT
그림을 보면 상당히 복잡하다.
Population P1, P2, P3 아래에는 sub-population 들이 있고, 각각의 Population들은 PBT 를 그대로 수행한다.
검은색 동그라미 각각은 population-member 라고 칭한다.
- 가장 최근에 evaluation이 수행된 population-member를 선택, 녀석의 weight를 복사한다.
- PBT를 수행하다보면 population 마다 가장 잘한 녀석이 있을텐데, 그 잘하는 녀석의 hyper-parameter를 evaluator로 보낸다. 요 단계를 수행할 때는, (1) step 수행 시, 사용했던 population 이전 녀석 것을 사용한다. (그림을 보라! P1 에서 param 뽑고, P2 에서 random weight 뽑는다.)
- evaluator에서는 hyperparameter의 성능을 측정한다.
비슷한 weight 기준으로 보았을 때, validation score 의 그래프를 그려본다. (아래 figure 참고)
여기서 수행되는 게 강력한 abstract에서도 언급한 강력한 assumption.
비슷한 weight 기준으로 빠르게 성능이 좋아지는 parameter가 더 좋다
- Gaussian Process 로 적당히 smooth 한 fitted curve 를 찾아냄
- 처음으로 두 그래프의 성능이 맞는 지점을 찾아냄. 그림에서 (2) 지점.
- 둘 중 더 그래프 빨리 끝나는 녀석에 맞춰서 동일한 step으로 (3) 지점을 구함.
- score gap을 구함 (4)
- (3)에서 좋았던 weight 그대로 다시 가져와서 특정 기준에 도달할 때까지 PBT 진행 (explore & exploit)
- max_eval_steps 이상의 step 이면서,
- (3.1) 에서 뽑아냈던 curve 와 (3.2~3.3) 를 수행했음에도, 겹치는 구간이 없다면, 멈춤
- 겹치는 구간 (overlap) 이 있더라도 binom_test 를 이용해 멈출지 여부를 측정한다 (binom_test 설명은 skip 한다)
개인적으로 아쉬운 부분은,
1. 제안하는 많은 것들이 있지만, ablation을 수행하지 않는다. binom_test 가 정말 중요한 지 등이 궁금했다.
2. 방법론이 복잡하기도 하거니와, 아직도 많은 cost를 필요료 한다. 결국 parallelism을 이용하는 방법은 이게 문제 아닐까 싶다.
Reults
RandomSearch (with human) vs PBT vs Fire PBT 수행
Classification
model: ResNet50
sub-population: 8 (RL 보다 수가 적음. stable 한 편이기 때문)
num-evaluator: parent-sub-population 의 3/4 (1/4 은 explore&exploit 해서 train이 좀 되어야 하기 때문)
batch-size: 1024
learning-rate: optim-target
objective func 계산을 위한 데이터는 validation에 overfitting 될 것을 고려해서, 50000 개의 val set 중 10000개만 활용했음.
각 search 방법론으로 5 experiment + 50 worker
로 실험을 돌렸고, population size 에 따른 검증을 위해 Fire PBT 를 22, 36 worker로 돌렸음. 제일 좋았던 녀석의 schedule 을 retrace 해서 사용.
RandomSearch 의 경우 Accurate, Large Minibatch SGD: Training ImageNet in 1 Hour 논문처럼 ,
을 사용하였다. 첫 5epoch은 warmup 시켰고, 30, 60, 80 에서 1/10으로 줄였다. 여기서 50개의 worker 들로 하여금
1e-2
에서 1e-3
사이로 log-uniform 하게 값을 뽑도록 했다.
PBT, FIRE PBT 또한 비슷하다
- eval 은 200 training step 마다 반복
- Ready (exploit and explore ready) 상태는 2400 step 마다
- Exploit 는 하위 25% 애들 버리고, 상위 25% 에서 변형해서 가져옴
- Explore 는
에 [0.5, 0.8, 1.25, 2.0] uniform sample 해서 곱했다.
PBT 에서는 50 worker 가 하나의 population 을 이루었음
FIRE PBT 에서는 22, 36, 50 의 worker 를 사용했고, sub-population 은 각각 8로 사용했고, 나머지 worker는 evaluator 로 사용하였다. max_eval_step
은 7200 으로 맞추었다. min_steps_before_eval
은 sub-population이 금방금방 잘 수렴해서 필요 없었다. PBT 든 FIRE-PBT 든 먼저 학습이 끝나도 synchronous 하게 다음 evolution을 기다리도록 구현했다.
RL
자세한 건 skip.
V-MPO loss 에다Ant-v1, Humanoid-v1 실험 수행.