随机梯度下降算法

小批量随机梯度下降算法(小批量SGD)

每次从从训练样本集上随机抽取一个小样本集,求其预测值和真实值误差的平均值,作为目标函数,将参数沿着梯度的方向移动,从而使当前的目标函数减少得最多。
小样本集的个数为batch_size,通常为2的幂次方,有利GPU加速
代价函数的总和为 1 m ∑ i = 1 m L ( x ( i ) , y ( i ) , θ ) \dfrac{1}{m}\sum_{i=1}^mL(x^{(i)},y^{(i)},θ) m1i=1mL(x(i),y(i),θ)

真SGD

每次随机选取一个样本,batch_size=1
遇上噪声容易陷入局部最优

批量SGD

每次迭代都选取所有样本,batch_size=n
每次更新更准确,每次更新要计算所有样本的平均误差,计算代价大

优化器·

SGD还有多种变体,其区别在于计算下一次权重更新时还要考虑上一次权重更新,而不仅仅考虑当前的梯度值,比如带动量SGD,Adagrad,RMSProp等这一灵感来源于物理学,将优化过程想象成小球从损失函数上滚下来,当小球的速度够大时,小球不会困在上谷,避免了局部最优化,也就是不仅要考虑小球当前的斜率,还要考虑小球当前的速度(来源于之前的加速度)。
在这里插入图片描述
实现代码

import tensorflow as tf
past_velocity=0.
momentum=0.1 #不变的动量因子
while loss>0.01:#优化循环
  w,loss,gradient=get_current_parameters()
  velocity=past_velocity*momentum-learning_rate*gradient#上一次的参数
  w=w+momentum*velocity-learning_rate*gradient
  past_velocity=velocity
  updata_parameter(w)

链式求导:从损失函数开始,从顶层反向作用至最底层,求出损失值对每个参数的导数。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值