批量梯度下降,随机梯度下降SGD,小批量梯度下降,各种网络优化方法,动量、均方根传递(RMSprop)、Adam

for i in range(epchos):
    copmute dw,db
    update w=w-αdw,b=b-αdb
如上,是普通梯度下降所需,每次需要计算所有样本

对于SGD,每次取一个样本,计算梯度,更新,代码如下

for i in range(epchos):
    for j in num_examples:
        compute dw db
        update  w,b = w,b-α(w,b)

对一个样本计算梯度,很可能不是全局最优的,因此在收敛过程中多次振荡,但是优点之一是有可能在跳跃过程中找到更好的局部最优点,甚至是全局最优点。

Mini_batch GD:顾名思义,每次更新,选择的既不是一整个训练集,也不是一个样本,而是一个训练集的子集,一个小小的batch,然后每次进行更新计算这一个batch中的梯度。

for i in range (epchos):
    for j in range(num_batch):
        #每一个batch的size是一个超参数,自己设定,介于1到样本总数N之间,若batch_size去1则为SGD,取N则为批量梯度下降
        compute dw,db
        update dw,db


比较:mini_batch更为稳定和方便,相比sgd,减少了波动性。相比于批量梯度下降,提高了更新速度,并且不用担心内存瓶颈,从而更加高效。



对于学习率的优化方法:

动量 momentum:

    顾名思义,给学习率一个动量,使其在收敛过程中更快

for i in iteration t:
    compute dw,db on mini_batch
    Vdw = βVdw+(1-β)dw 
    w = w - αVdw
    #同理可得db

实际上,队友这种指数加权平均,计算的是前1/(1-β) 次的指数平均
因为梯度积累了之前多次的梯度,所以之前的变化会影响现在的变化,加入之前是一直下降,那么加快下降,之前下降方向相反的话,那么会减慢梯度传递
均方根传递RMSprop:
for i in range(iteration t):
    compute dw,db on current min_batch
    Sdw = βSdw+(1-β)dW²
    W = W - α*dW/√Sdw
#同理得db

在震荡大的方向会得到更大的Sdw或者Sdb,因此除以的数更大,抑制了震荡。

Adam:

adam是对动量和均方根传递的结合

for i in range(iteration t):
    compute dw,db on current min_batch
    Vdw = β1Vdw+(1-β1)dw
    Sdw = βSdw+(1-β2)dw²
#对 S,V进行修正,因为在β接近1的时候,他们趋向于0向量。
    Vdw# = Vdw/(1-β1的t次方)
    Sdw# = Sdw/(1-β2的t次方)
    W = W - α*Vdw#/√Sdw#
#同理得db

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值