Đã thêm: một khóa học Stanford trên các mạng thần kinh,
cs231n , cung cấp một dạng khác của các bước:
v = mu * v_prev - learning_rate * gradient(x) # GD + momentum
v_nesterov = v + mu * (v - v_prev) # keep going, extrapolate
x += v_nesterov
Đây v
là vận tốc aka bước aka trạng thái, và mu
là một yếu tố động lượng, thường là 0,9 hoặc hơn. ( v
, x
Và learning_rate
có thể vectơ rất dài, với NumPy, mã là như nhau.)
v
trong dòng đầu tiên là độ dốc giảm dần với động lượng;
v_nesterov
ngoại suy, tiếp tục đi. Ví dụ: với mu = 0,9,
v_prev v --> v_nesterov
---------------
0 10 --> 19
10 0 --> -9
10 10 --> 10
10 20 --> 29
Mô tả sau đây có 3 thuật ngữ: riêng
thuật ngữ 1 là độ dốc gốc đơn giản (GD),
1 + 2 cho GD + động lượng,
1 + 2 + 3 cho Nesterov GD.
Nesterov GD thường được mô tả là các bước động lượng xen kẽ và các bước gradient :xt→ytyt→xt+1
yt=xt+m(xt−xt−1) - đà, dự đoán - gradient
xt+1=yt+h g(yt)
trong đó là độ dốc âm và là stepize aka tốc độ học tập.gt≡−∇f(yt)h
Kết hợp hai phương trình này với một phương thức chỉ trong , các điểm tại đó độ dốc được ước tính, bằng cách cắm phương trình thứ hai vào thuật ngữ thứ nhất và sắp xếp lại:yt
yt+1=yt
+ h gt - gradient - động lượng bước động lượng bậc
+ m (yt−yt−1)
+ m h (gt−gt−1)
Thuật ngữ cuối cùng là sự khác biệt giữa GD với động lượng đơn giản và GD với động lượng Nesterov.
Người ta có thể sử dụng các thuật ngữ động lượng riêng biệt, giả sử và : - động lượng bước - đà dốcmmgrad
+ m (yt−yt−1)
+ mgrad h (gt−gt−1)
Sau đó cho động lượng đơn giản, Nesterov. khuếch đại nhiễu (độ dốc có thể rất nhiễu), là bộ lọc làm mịn 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
Bằng cách này, đà và stepsize có thể thay đổi theo thời gian, và , hoặc cho mỗi thành phần (ada * Phối gốc), hoặc cả hai - Phương pháp hơn trường hợp thử nghiệm.h tmtht
Biểu đồ so sánh động lượng đơn giản với động lượng Nesterov trên trường hợp thử nghiệm 2d đơn giản, :
(x/[cond,1]−100)+ripple×sin(πx)