机器学中的梯度下降与最优化求解

梯度下降算法

梯度方向: 指定点处, 函数值变化幅度最大的方向.
梯度下降算法, Gradient Descent, 也称为 最速下降算法, Steepest Descent. 是求解无约束最优化问题的经典方法.
它属于迭代优化方法. 迭代公式是:
x ( k + 1 ) = x ( k ) + ( − 1 ) λ k ∇ f ( x ( k ) ) x^{(k+1)}=x^{(k)}+ (-1)\lambda_k \nabla f(x^{(k)}) x(k+1)=x(k)+(1)λkf(x(k))
即从 x ( k ) x^{(k)} x(k)点出发, 沿该点处的负梯度方向 − ∇ f ( x ( k ) ) -\nabla f(x^{(k)}) f(x(k)), 以步长 λ k \lambda_k λk 找到下一个迭代点.

  • 局部最优与全局最优
    梯度下降不一定能够找到全局的最优解,有可能是一个局部最优解。可以取不同的初始迭代点, 分别求解, 增加找到全局最优的几率.
    当然,如果损失函数是凸函数,梯度下降法得到的解就一定是全局最优解。

参数

  • 步长的选择
    步长过大, 容易震荡; 而步长过小, 收敛速度又会很慢.

随机梯度下降

SGD, Stochastic Gradient Descent.
一般来讲, 目标函数是每个样本损失函数的加和. 即
L ( w ) = ∑ i = 1 n L i ( w ) L(w)=\sum_{i=1}^n L_i(w) L(w)=i=1nLi(w)
当样本很多, 参数很多, 又没有简单的公式时, 计算的代价会很昂贵.
所以随机梯度下降的思想是: 在计算每轮迭代时, 从总样本中随机选一个子集来计算. 大大减轻运算量. It’s effective in large-scale machine learning problems.
虽然不是每次迭代得到的损失函数都向着全局最优方向, 但是大的整体的方向是向全局最优解的, 最终的结果往往是在全局最优解附近.

  • 应用
    用处很广, 支持向量机,逻辑回归和图形模型. 当与反向传播算法相结合时,它是用于训练人造神经网络的实际标准算法.

momentum

momentum, [mə’mentəm], [物] 动量. P = m v P=mv P=mv.
在sgd的过程中,每次下降步长仅通过α(alpha)来控制,容易陷入更新太慢的状态:

  • 平坦地区,下降好多步,也走不到头;
  • 陡峭的区域,下降过头,导致,左一步,右一步,收敛也慢

看一下小球滚落的物理现象:
如果是个笔直的斜坡, 由于加速度方向一致, 小球的动量会快速变大; 若轨道比较蜿蜒, 小球甚至还会减速.

于是参照小球滚落的物理现象, 引入了 mementum 参数.
思想是,若当前梯度方向与上一次相同,那么,此次的步长增强,否则,应该相应减弱.
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zcfMJZOa-1610894718739)(http://image100.360doc.com/DownloadImg/2016/10/1008/81923986_10.jpg)]

Nesterov momentum

Nesterov Accelerated Gradient(NAG)算法相对于Momentum的改进在于,以“向前看”看到的梯度 而不是 当前位置梯度去更新。经过变换之后的等效形式中,NAG算法相对于Momentum多了一个本次梯度相对上次梯度的变化量,这个变化量本质上是对目标函数二阶导的近似。由于利用了二阶导的信息,NAG算法才会比Momentum具有更快的收敛速度。

参数

下面的参数来自于kerkas中的 keras.optimizers.SGD.

  • lr: float >= 0. Learning rate.
  • momentum: float >= 0. Parameter updates momentum.
  • decay: float >= 0. Learning rate decay over each update.
  • nesterov: boolean. Whether to apply Nesterov momentum.

例题

  1. 用最速下降法求解
    min ⁡ f ( x ) = 2 x 1 2 + x 2 2 \min f(x)=2x_1^2+x_2^2 minf(x)=2x12+x22
    引自: <<最优化理论与算法>> P.283
  2. 假设我们想用直线 y = w 1 + w 2 x y=w_1+w_2x y=w1+w2x 去拟合一系列二维的点, n为样本个数, 损失函数为平方差, 那么请列出参数的更新方程.
    答: 总的损失函数就是
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fYPb4gRL-1610894718741)(https://wikimedia.org/api/rest_v1/media/math/render/svg/b3b8bbcea44ef6bb1c2e7b281fae5c4495186e44)]
    参数更新递推公式为:
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EnlIr6Ui-1610894718743)(https://wikimedia.org/api/rest_v1/media/math/render/svg/1287a455b42c47dadf958a42cc4164c38abfbfd0)]

lala

在这里插入图片描述
参数w的更新迭代为: w = w + ( − 1 ) ∗ λ ∗ ∂ L ∂ w w = w+(-1)* \lambda *\frac {\partial L}{\partial w} w=w+(1)λwL
略去学习率与负号,
Δ w 3 = ∂ L ∂ w 3 = h 3 (1) \Delta w3=\frac {\partial L}{\partial w3}=h3 \tag 1 Δw3=w3L=h3(1)
继续往前, 就要用到复合函数求导的链式法则了. 以激活函数为 sigmoid, σ ( ⋅ ) \sigma(\cdot) σ() 为例:

Δ w 2 = ∂ L ∂ w 2 = ∂ L ∂ h 3 ⋅ ∂ h 3 ∂ w 2 = w 3 ⋅ ∂ h 3 ∂ w 2 (2) \begin{aligned} \Delta w2 &=\frac {\partial L}{\partial w2} \\ &=\frac {\partial L}{\partial h3}\cdot \frac {\partial h3}{\partial w2} \\ &= w3 \cdot \frac {\partial h3}{\partial w2} \tag 2 \end{aligned} Δw2=w2L=h3Lw2h3=w3w2h3(2)
对其中的复合函数 h 3 = σ ( w 2 h 2 + b 2 ) h3=\sigma(w2h2+b2) h3=σ(w2h2+b2) 再度应用链式法则:
Δ w 2 = w 3 ⋅ ∂ [ σ ( h 2 w 2 + b 2 ) ] ∂ w 2 = w 3 ⋅ ∂ [ σ ( h 2 w 2 + b 2 ) ] ∂ ( h 2 w 2 + b 2 ) ⋅ ∂ ( h 2 w 2 + b 2 ) ∂ w 2 = w 3 ⋅ σ ( h 2 w 2 + b 2 ) ( 1 − σ ( h 2 w 2 + b 2 ) ) ⋅ h 2 (2.1) \begin{aligned} \Delta w2 &= w3 \cdot \frac {\partial [\sigma( h2w2+b2)]}{\partial w2} \\ &= w3 \cdot \frac {\partial [\sigma( h2w2+b2)]}{\partial (h2w2+b2)} \cdot \frac {\partial ( h2w2+b2)}{\partial w2} \\ &= w3\cdot \sigma( h2w2+b2)(1-\sigma( h2w2+b2)) \cdot h2 \tag {2.1} \end{aligned} Δw2=w3w2[σ(h2w2+b2)]=w3(h2w2+b2)[σ(h2w2+b2)]w2(h2w2+b2)=w3σ(h2w2+b2)(1σ(h2w2+b2))h2(2.1)
可以看到, 值的大小由 {高层权重, 前一层输出, 激活函数选择} 共同决定.
所以, 对一个 variable 打印梯度, 在不同的 step, 其梯度也会有较大变化.

再继续往前,
Δ w 2 = ∂ L ∂ w 1 = ∂ L ∂ h 3 ⋅ ∂ h 3 ∂ w 1 = ∂ L ∂ h 3 ⋅ ∂ h 3 ∂ h 2 ⋅ ∂ h 2 ∂ w 1 (3) \begin{aligned} \Delta w2 &=\frac {\partial L}{\partial w1} \\ &=\frac {\partial L}{\partial h3}\cdot \frac {\partial h3}{\partial w1} \\ &=\frac {\partial L}{\partial h3}\cdot \frac {\partial h3}{\partial h2} \cdot \frac {\partial h2}{\partial w1} \tag 3 \end{aligned} Δw2=w1L=h3Lw1h3=h3Lh2h3w1h2(3)
其中 h 3 = σ ( w 2 h 2 + b 2 ) h3=\sigma(w2h2+b2) h3=σ(w2h2+b2), 与式(2)中类似, 由对 w 2 w2 w2 求偏导变为 对 h 2 h2 h2求偏导.

激活函数对梯度的影响

在这里插入图片描述
图: sigmoid 函数的梯度函数的图像. 其梯度的值域为 [0,0.25] .

参考

梯度下降(Gradient Descent)小结

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值