신경 네트워크에 대한 스탠포드 코스
cs231n 은 또 다른 형태의 단계를 제공합니다.
v = mu * v_prev - learning_rate * gradient(x) # GD + momentum
v_nesterov = v + mu * (v - v_prev) # keep going, extrapolate
x += v_nesterov
여기 v
에는 속도 일명 스텝 일명 상태 mu
가 있으며 모멘텀 팩터이며 일반적으로 0.9 정도입니다. ( v
, x
및 learning_rate
매우 긴 벡터 일 수있다 NumPy와 함께, 코드는 동일하다.)
v
첫 번째 줄에서 운동량과 함께 기울기 하강;
v_nesterov
외삽하고 계속합니다. 예를 들어 mu = 0.9 인 경우
v_prev v --> v_nesterov
---------------
0 10 --> 19
10 0 --> -9
10 10 --> 10
10 20 --> 29
다음 설명에는 3 개의 용어가 있습니다.
1 항만 GD (Plain Gradient Descent),
1 + 2는 GD + 운동량,
1 + 2 + 3은 Nesterov GD를 나타냅니다.
Nesterov GD는 일반적으로 번갈아 운동량 단계 및 경사 단계 .xt→ytyt→xt+1
yt=xt+m(xt−xt−1) 운동량, 예측 변수 기울기
xt+1=yt+h g(yt)
gt≡−∇f(yt)h
yt
yt+1=yt
+ h gt -그래디언트
+ m (yt−yt−1) -운동량
+ m h (gt−gt−1) -구배 운동량
마지막 항은 일반 운동량을 가진 GD와 Nesterov 운동량을 가진 GD의 차이입니다.
mmgrad
+ m (yt−yt−1)
+ mgrad h (gt−gt−1)
이어서 일반 모멘텀 제공 스테 로프한다. 잡음 증폭 (구배 될 수 매우 시끄러운) 평활화 IIR 필터이다.m g r a d = m m g r a d > 0 m g r a d ∼ - .1mgrad=0mgrad=m
mgrad>0
mgrad∼−.1
그런데 운동량 및 단계 화는 시간, 및 또는 구성 요소 (ada * 좌표 하강) 또는 테스트 사례보다 더 많은 방법에 따라 다를 수 있습니다 .h tmtht
간단한 2D 테스트 사례에서 에서 일반 운동량과 Nesterov 운동량을 비교 한 그림 :
(x/[cond,1]−100)+ripple×sin(πx)