핵심 기법 · 1
Adam: 적응형 옵티마이저
평범한 SGD 는 모든 파라미터에 같은 스텝 크기를 쓴다. Adam — Kingma & Ba, 2014 — 은 각 파라미터의 기울기와 그 제곱의 이동평균을 들고, 그 비율로 스텝을 밟는다. 그래서 작지만 꾸준한 기울기를 가진 가중치도 움직인다. 나쁜 조건수의 문제에서는 SGD 가 길 때 Adam 은 수렴한다. 아래 모든 것은 이 페이지에서 돈다 — 블록을 고쳐 Run 을 눌러라.
같은 루프, 두 옵티마이저
여기서 한 feature 는 나머지보다 서른 배 크다. SGD 는 그 큰 feature 에 맞춰 스텝을 작게 유지해야 하고, 그러면 나머지는 거의 안 움직인다. Adam 은 각 파라미터에 자기만의 실효 학습률을 준다. 같은 모델·같은 데이터·같은 스텝 수 — 옵티마이저만 다르다.
파라미터별 학습률
Adam 은 가중치마다 이동평균 둘을 든다: 기울기 m 과 그 제곱 v.
갱신은 m / (sqrt(v) + eps) 라, 각 파라미터는 자기 기울기가 얼마나 컸는지로
스케일된다. betas 는 두 평균의 감쇠율 — 기본값 [0.9, 0.999] 는
논문이 권하는 값이고 바꿀 일이 드물다.
직접: Adam 에 학습률 주기
아래 모델은 직선 y = 3x + 1 을 배워야 하지만, 스텝 크기가 0 인 동안은
Adam 도 못 움직인다. 진짜 학습률을 넣어라 — 0.2 면 스텝 예산 안에 넉넉히
들어온다 — 그러면 잡았을 때 페이지가 말해 준다.
Adam 이 수렴하는 것 보기
위 비교는 수 둘을 줬고, 여기는 곡선이다. 평범한 SGD 가 기기만 하던 그 나쁜-조건수 문제에서 Adam 은 손실을 끌어내린다 — 파라미터별 학습률이 그 차이를 눈에 보이게 한다.
학습률 자체가 취약하다
Adam 은 파라미터마다 자기 실효 학습률을 준다; 평범한 SGD 에선 그 하나의 학습률을 당신이 골라야 하고, 그 선택은 가혹하다. 아래는 같은 작은 회귀를 학습률만 바꿔 세 번 학습한 것 — 히트맵의 각 행이 한 번의 학습, 왼쪽에서 오른쪽이 스텝, 밝기가 손실이다. 한 행은 발산하고, 한 행은 수렴하고, 한 행은 거의 움직이지 않는다.
기억할 것
- Adam 은 파라미터마다 이동평균 둘 — 기울기와 그 제곱 — 을 들고 그 비율로 스텝을 밟는다.
- 그래서 각 파라미터가 자기 실효 학습률을 갖고, 나쁜-조건수 문제에서 SGD 가 길 때 수렴한다.
betas([0.9, 0.999])는 두 평균의 감쇠; 기본값을 바꿀 일은 드물다.- Adam 은 자기 스텝을 정규화하므로 SGD 보다 넓은 학습률을 견딘다.