您的位置:首页 > 理论基础 > 计算机网络

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

2018-04-08 18:19 405 查看
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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐