时间:2024-08-12 02:49:42
目录
随机梯度下降,随机:随机选取部分数据集参与计算。SGD支持动量参数,支持学习率衰减率。
用法:
lr:大于0的浮点数,学习率。
momentum:大于0的浮点数,动量参数。
parameters:Variable参数,要优化的对象。
对于训练的数据集,首先将其分成n个batch,每个batch包含m个样本。每次更新都利用一个batch数据,而非整个数据集。
其中, 为学习率,gt为x在t时刻的梯度
好处:
①当训练数据太多时,利用整个数据集更新往往时间上不现实,batch的方法可以减少机器压力,并且可以更快收敛
②当训练集有很多冗余时(类似样本出现多次),batch方法收敛更快。以一个极端情况为例来理解,若训练集前一半和后一半的梯度相同,如果前一半作为一个batch,后一半作为一个batch,那么在一次遍历训练集时,batch的方法向最优解前进两个step,而整体的方法只前进一个step。
引入一个衰减系数,让r每回合都衰减一定比例,该优化器通常是面对递归神经网络时的一个良好选择。
用法:
lr:大于0的浮点数,学习率。
rho:大于0的浮点数。
epsilon:大于0的小浮点数,防止除0错误。
可以自动变更学习速率,只是需要设定一个全局的学习速率,但是这并非是实际学习速率,实际速率是与以往参数的模之和的开方成反比的。
优点:能够实现学习率的自动更改。如果这次梯度大,则学习速率衰减就快一些;如果这次梯度小,则学习速率衰减就慢一些。
在普通算法中也许效果还不错,但在深度学习中,深度过深时会造成训练提前结束。
用法:
lr:大于0的浮点数,学习率。
epsilon:大于0的小浮点数,防止除0错误。
Adagrad算法存在三个问题:
①其学习率时单调递减的,训练后期学习率非常小
②需要手工设置一个全局的初始学习率
③更新xt时左右两边的单位不一致
Adadelta针对上述三个问题提出了解决方案
用法:
lr:大于0的浮点数,学习率。
rho:大于0的浮点数。
epsilon:大于0的小浮点数,防止除0错误。
建议保持优化器的默认参数不变
一种基于一阶梯度来优化随机目标函数的算法
Adam算法根据损失函数对每个参数的梯度的一阶矩估计和二阶矩估计动态调整针对于每个参数的学习速率。Adam也是基于梯度下降的方法但是每次迭代参数的学习步长都有一个确定·的范围,不会因为很大的梯度导致很大的学习步长,参数的值比较稳定。
Adam(Adaptive Moment Estimation)本质上是带有动量项的RMSprop。Adam的优点主要在于经过偏置校正后,每一次的迭代学习率都有一个确定的范围,使得参数比较平稳。
用法:
lr:大于0的浮点数,学习率。
beta_1/beta_2:浮点数,0<beta<1,通常很接近1。
epsilon:大于0的小浮点数,防止除0错误。
基于无穷范数的Adam方法的变体
用法:
lr:大于0的浮点数,学习率。
beta_1/beta_2:浮点数,0<beta<1,通常很接近1。
epsilon:大于0的小浮点数,防止除0错误。
参考书籍:《PyTorch深度学习实战(侯宜君 著)》
Copyright © 2012-2019 首页-大唐娱乐-注册登录站备案号:琼ICP备88889999号