1day_1paper icon indicating copy to clipboard operation
1day_1paper copied to clipboard

[17] Faster Improvement Rate Population Based Training (FIRE PBT)

Open dhkim0225 opened this issue 3 years ago • 0 comments

기존 PBT 개선논문 PBT 1저자가 교신저자로 참여. (엔비디아에서 딥마인드로 이직했네?)

Abstract

PBT 는 2가지 한계점이 있었음.

  1. 느리다
  2. long-term 성능은 오히려 hand-designed 보다 떨어질 때도 많다.

Fire PBT 는 빠르게 성능이 좋아지는 parameter가 더 좋다 는 특징을 이용한다. 실험 결과, hand-design으로 찾은 parameter와 유사하게 찾는 것을 발견 + PBT imagenet 성능을 뛰어넘는다. 강화학습에도 적용했을 때, 좋은 성능 내는 것을 보인다.

Intro

learning rate 에서 특히 PBT 가 잘 working 하지 못했다.

image ResNet-50 기준 PBT 는 71.7, Fire-PBT 는 76.5, hand-design 은 76.6

FIRE-PBT

image 그림을 보면 상당히 복잡하다. Population P1, P2, P3 아래에는 sub-population 들이 있고, 각각의 Population들은 PBT 를 그대로 수행한다. 검은색 동그라미 각각은 population-member 라고 칭한다.

  1. 가장 최근에 evaluation이 수행된 population-member를 선택, 녀석의 weight를 복사한다.
  2. PBT를 수행하다보면 population 마다 가장 잘한 녀석이 있을텐데, 그 잘하는 녀석의 hyper-parameter를 evaluator로 보낸다. 요 단계를 수행할 때는, (1) step 수행 시, 사용했던 population 이전 녀석 것을 사용한다. (그림을 보라! P1 에서 param 뽑고, P2 에서 random weight 뽑는다.)
  3. evaluator에서는 hyperparameter의 성능을 측정한다. 비슷한 weight 기준으로 보았을 때, validation score 의 그래프를 그려본다. (아래 figure 참고) 여기서 수행되는 게 강력한 abstract에서도 언급한 강력한 assumption. 비슷한 weight 기준으로 빠르게 성능이 좋아지는 parameter가 더 좋다
    1. Gaussian Process 로 적당히 smooth 한 fitted curve 를 찾아냄
    2. 처음으로 두 그래프의 성능이 맞는 지점을 찾아냄. 그림에서 (2) 지점.
    3. 둘 중 더 그래프 빨리 끝나는 녀석에 맞춰서 동일한 step으로 (3) 지점을 구함.
    4. score gap을 구함 (4)
  4. (3)에서 좋았던 weight 그대로 다시 가져와서 특정 기준에 도달할 때까지 PBT 진행 (explore & exploit)
    1. max_eval_steps 이상의 step 이면서,
    2. (3.1) 에서 뽑아냈던 curve 와 (3.2~3.3) 를 수행했음에도, 겹치는 구간이 없다면, 멈춤
    3. 겹치는 구간 (overlap) 이 있더라도 binom_test 를 이용해 멈출지 여부를 측정한다 (binom_test 설명은 skip 한다) image
개인적으로 아쉬운 부분은,
1. 제안하는 많은 것들이 있지만, ablation을 수행하지 않는다. binom_test 가 정말 중요한 지 등이 궁금했다.
2. 방법론이 복잡하기도 하거니와, 아직도 많은 cost를 필요료 한다. 결국 parallelism을 이용하는 방법은 이게 문제 아닐까 싶다.

Reults

RandomSearch (with human) vs PBT vs Fire PBT 수행

Classification

image

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 또한 비슷하다

  1. eval 은 200 training step 마다 반복
  2. Ready (exploit and explore ready) 상태는 2400 step 마다
  3. Exploit 는 하위 25% 애들 버리고, 상위 25% 에서 변형해서 가져옴
  4. 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을 기다리도록 구현했다.

image

RL

자세한 건 skip. V-MPO loss 에다Ant-v1, Humanoid-v1 실험 수행. image

dhkim0225 avatar Oct 28 '21 07:10 dhkim0225