borch

핵심 기법 · 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 에선 그 하나의 학습률을 당신이 골라야 하고, 그 선택은 가혹하다. 아래는 같은 작은 회귀를 학습률만 바꿔 세 번 학습한 것 — 히트맵의 각 행이 한 번의 학습, 왼쪽에서 오른쪽이 스텝, 밝기가 손실이다. 한 행은 발산하고, 한 행은 수렴하고, 한 행은 거의 움직이지 않는다.

기억할 것

위 블록이 에러를 내면, 그것도 알아둘 값이다. 이 페이지의 모든 예제는 테스트가 도는 그 라이브러리를 상대로 돈다 — 스크린샷이 아니다. 되돌리려면 Reset 을 누른다.