赞
踩
本文给出常用梯度下降算法的定义公式, 并介绍其使用方法.
配套代码, 请参考文章 :
纯Python和PyTorch对比实现SGD, Momentum, RMSprop, Adam梯度下降算法
系列文章索引 :
https://blog.csdn.net/oBrightLamp/article/details/85067981
随机梯度下降 (Stochastic Gradient Descent) 是最基础的神经网络优化方法.
Stochastic 一词是随机的意思, 表示每次都随机选择样本计算损失值和梯度, 进行参数更新.
随机选择样本非常重要, 主要是为了避免模型参数在某种潜在错误方向上走的过远, 导致收敛速度过慢.
SGD 参数更新的算法 :
p = p − l r ∗ g p = p - lr * g p=p−lr∗g
假设一个神经网络模型经过 n n n 次反向传播, 使用向量 g g g 表示所有求得的梯度, 初始参数为 p 0 p_0 p0, 求学习完成后的参数值 p n p_n pn.
g = ( g 1 , g 2 , g 3 , ⋯   , g n ) g = (g_1,g_2,g_3,\cdots,g_n) g=(g1,g2,g3,⋯,gn)
求解过程 :
p 1 = p 0 − l r ∗ g 1 p 2 = p 1 − l r ∗ g 2 p 3 = p 2 − l r ∗ g 3 ⋮ p n = p n − 1 − l r ∗ g n p_1 = p_0 - lr * g_1\\ p_2 = p_1 - lr * g_2\\ p_3 = p_2 - lr * g_3\\ \vdots\\ p_n = p_{n-1} - lr * g_{n}\\ p1=p0−lr∗g1p2=p1−lr∗g2p3=p2−lr∗g3⋮pn=pn−1−lr∗gn
Momentum SGD 是基于动量的算法.
Momentum SGD 参数更新的算法 :
v = m ∗ v + g p = p − l r ∗ v v = m * v + g \\ p = p - lr * v v=m∗v+gp=p−lr∗v
其中 p, g, v 和 m 分别表示参数, 梯度, 速度和动量.
另外一种定义是 :
v = m ∗ v + l r ∗ g p = p − v v = m * v + lr * g \\ p = p - v v=m∗v+lr∗gp=p−v
本文使用前一种算法, 也是 PyTorch 推荐使用的算法.
Momentum SGD 的必要参数是动量 m, 一般取 m = 0.9 m=0.9 m=0.9
注意, 若 m = 0 m=0 m=0 , Momentum SGD 将退化成 SGD 算法.
假设一个神经网络模型经过 n n n 次反向传播, 使用向量 g g g 表示所有求得的梯度, 初始参数为 p 0 p_0 p0, 初始速度为 0, 动量参数为 m m m, 学习率为 l r lr lr , 求学习完成后的参数值 p n p_n pn.
求解过程 :
v 1 = g 1 ,      p 1 = p 0 − l r ∗ v 1 v 2 = m ∗ v 1 + g 2 ,      p 2 = p 1 − l r ∗ v 2 v 3 = m ∗ v 2 + g 3 ,      p 3 = p 2 − l r ∗ v 3 ⋮ v n = m ∗ v ( n − 1 ) + g n ,      p n = p ( n − 1 ) − l r ∗ v ( n ) v_1 = g_1, \;\;p_1 = p_0 - lr * v_1\\ v_2 =m * v_1 + g_2, \;\;p_2 = p_1 - lr * v_2\\ v_3 =m * v_2 + g_3, \;\;p_3 = p_2 - lr * v_3\\ \vdots\\ v_n =m * v_{(n-1)} + g_n, \;\;p_n = p_{(n-1)} - lr * v_{(n)}\\ v1=g1,p1=p0−lr∗v1v2=m∗v1+g2,p2=p1−lr∗v2v3=m∗v2+g3,p3=p2−lr∗v3⋮vn=m∗v(n−1)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。