adadelta算法_自适应学习率调整:AdaDelta

超参数

超参数(Hyper-Parameter)是困扰神经网络训练的问题之一,因为这些参数不可通过常规方法学习获得。

神经网络经典五大超参数:

学习率(Leraning Rate)、权值初始化(Weight Initialization)、网络层数(Layers)

单层神经元数(Units)、正则惩罚项(Regularizer|Normalization)

这五大超参数使得神经网络更像是一门实践课,而不是理论课。

懂神经网络可能只要一小时,但是调神经网络可能要几天。

因此,后来Vapnik做SVM支持向量机的时候,通过巧妙的变换目标函数,避免传统神经网络的大部分超参数,

尤其是以自适应型的支持向量替代人工设置神经元,这使得SVM可以有效免于过拟合之灾。

传统对抗这些超参数的方法是经验规则(Rules of Thumb)。

这几年,随着深度学习的推进,全球神经网络研究者人数剧增,已经有大量研究组着手超参数优化问题:

★深度学习先锋的RBM就利用Pre-Traning自适应调出合适的权值初始化值。

★上个世纪末的LSTM长短期记忆网络,可视为“神经网络嵌套神经网络”,自适应动态优化层数。

★2010年Duchi et.al 则推出AdaGrad,自适应来调整学习率。

自适应调整学习率的方法,目前研究火热。一个经典之作,是 Matthew D. Zeiler 2012年在Google实习时,

提出的AdaDelta。

Matthew D. Zeiler亦是Hinton的亲传弟子之一,还是商业天才,大二时办了一个公司卖复习旧书。

Phd毕业之后,创办了Clarifai,估值五百万刀。参考[知乎专栏]

Clarifai的杰出成就是赢得了ImageNet 2013冠军,后来公布出CNN结构的时候,Caffe、Torch之类

的框架都仿真不出他在比赛时候跑的结果,应该是用了不少未公布的黑科技的。

再看他2012年提出的AdaDelta,肯定是用在的2013年的比赛当中,所以后来以普通方式才无法仿真的。

梯度更新

2.1 [一阶方法] 随机梯度

SGD(Stochastic Gradient Descent)是相对于BGD(Batch Gradient Descent)而生的。

BGD要求每次正反向传播,计算所有Examples的Error,这在大数据情况下是不现实的。

最初的使用的SGD,每次正反向传播,只计算一个Example,串行太明显,硬件利用率不高。

后续SGD衍生出Mini-Batch Gradient Descent,每次大概推进100个Example,介于BGD和SGD之间。

现在,SGD通常是指Mini-Batch方法,而不是早期单Example的方法。

一次梯度更新,可视为:

$x_{t+1}=x_{t}+\Delta x_{t} \quad where \quad  \Delta x_{t}=-\eta \cdot g_{t}$

$x$为参数,$t$为时序,$\Delta$为更新量,$\eta$为学习率,$g$为梯度

2.2 [二阶方法] 牛顿法

二阶牛顿法替换梯度更新量:

$\Delta x_{t}=H_{t}^{-1} \cdot g_{t}$

$H$为参数的二阶导矩阵,称为Hessian矩阵。

牛顿法,用Hessian矩阵替代人工设置的学习率,在梯度下降的时候,可以完美的找出下降方向,

不会陷入局部最小值当中,是理想的方法。

但是,求逆矩阵的时间复杂度近似$O(n^{3})$,计算代价太高,不适合大数据。

常规优化方法

3.1 启发式模拟退火

早期最常见的手段之一就是模拟退火。当然这和模拟退火算法没有半毛钱关系。

引入一个超参数(常数)的退火公式:

$\eta_{t}=\frac{\eta _{0}}{1+d\times t}$

$\eta _{0}$为初始学习率,$d$为衰减常数,通常为$10^{-3}$

模拟退火基于一个梯度法优化的事实:

在优化过程中,Weight逐渐变大,因而需要逐渐减小学习率,保证更新平稳。

3.2 动量法

中期以及现在最普及的就是引入动量因子:

$\Delta x_{t}=\rho \Delta x_{t-1}-\eta \cdot g_{t}$

$\rho$为动量因子,通常设为0.9

在更新中引入0.9这样的不平衡因子,使得:

★在下降初期,使用前一次的大比重下降方向,加速。

★在越过函数谷面时,异常的学习率,会使得两次更新方向基本相反,在原地”震荡“

此时,动量因子使得更新幅度减小,协助越过函数谷面。

★在下降中后期,函数面局部最小值所在的吸引盆数量较多,一旦陷进吸引盆当中,

$Gradient \rightarrow 0$,但是前后两次更新方向基本相同。

此时,动量因子使得更新幅度增大,协助跃出吸引盆。

3.3  AdaGrad

AdaGrad思路基本是借鉴L2 Regularizer,不过此时调节的不是$W$,而是$Gradient$:

$\Delta x_{t}=-\frac{\eta }{\sqrt{\sum_{\tau=1}^{t}(g_{\tau})^

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Adam自适应学习率是一种优化算法,它结合了梯度下降和动量方法。Adam的自适应原理是根据统计对梯度进行修正,但仍然需要设置学习率。如果学习率设置过大,会导致模型发散,收敛较慢或陷入局部最小值点。因此,一开始通常不会设置过大的学习率,而是根据不同的任务进行选择。通常默认的学习率设置为1e-3。\[1\] 与传统机器学习相比,深度学习的学习率设置要小得多。这是因为神经网络的损失函数通常不是凸函数,而梯度下降法等优化方法主要针对凸函数。如果学习率设置过高,Adam优化器只会矫正梯度,而不会影响初始学习率,导致模型的Loss出现较大的波动,无法收敛。因此,深度学习中的学习率需要设置得更小。\[2\] 另外,Adadelta是一种改进的优化算法,它针对Adagrad学习率分母的累加问题进行了改进。Adadelta将分母的累加替换为均值,使得学习率相对稳定。类似于Batch Normalization对均值和方差使用滑动平均来近似训练集的均值和方差,Adagrad也使用滑动平均来近似参数梯度的均值。从Pytorch源码中可以看到,Adadelta使用了两次滑动平均。\[3\] 综上所述,Adam自适应学习率需要根据具体任务进行学习率的设置,通常需要选择一个适当的学习率来保证模型的收敛性和性能。 #### 引用[.reference_title] - *1* *2* [(Note)优化器Adam的学习率设置](https://blog.csdn.net/qq_40728667/article/details/125921684)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [基于Pytorch源码对Adagrad、Adadelta、RMSProp、Adam等自适应学习率进行学习](https://blog.csdn.net/MacKendy/article/details/106772624)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值