梯度检验与高级优化笔记

梯度检验

反向传播算法很难调试得到正确结果,但却会得到一个看起来很合理的结果。
比如段位错误(Off-by-one error)。例子是for循环中循环 m 次,正确应该是for(i=1; i<=m; i++),有时会写成 for(i=1; i<m; i++) ,这就是缺位错误。 再有是忘记计算偏置项。
这节课介绍了一种对求导结果进行数值检验的方法,这种方法可以验证求导代码是否正确。

单个实数

假设我们想要最小化以 θ 为自变量的目标函数 J(θ) 。假设 J:RR ,则 θR 。在一维的情况下,一次迭代的梯度下降公式是 θ:=θαddθJ(θ)
再假设我们已经用代码实现了计算 ddθJ(θ) 的函数 g(θ) ,接着我们使用 θ:=θαg(θ) 来实现梯度下降算法。
可以用以下数值检验公式计算两端是否一样来检验 g 是否正确:
g(θ)J(θ+EPSILON)J(θEPSILON)2×EPSILON
实际应用中,我们常将 EPSILON 设为一个很小的常量,比如在 104 数量级。

向量情况

考虑 θRn 是一个向量而非一个实数,并且 J:RnR 。现在将求导检验方法推广到一般化,即 θ 是一个向量的情况。

假设我们有一个用于计算 θiJ(θ) 的函数 gi(θ) ;我们想要检验 gi 是否输出正确的求导结果。
定义:
θ(i+)=θ+EPSILON×e⃗ i
θ(i)=θEPSILON×e⃗ i

其中 e⃗ i=0010 是第 i 个基向量(维度和θ相同,在第 i 行是“1”而其他行是“0”)。
然后我们可以对每个i检查下式是否成立,进而验证 gi(θ) 的正确性: gi(θ)J(θ(i+))J(θ(i))2×EPSILON

高级优化

目前为止,学习的都是使用梯度下降来最小化 J(θ)
第一种方法:使用梯度下降,并能够自动调整学习速率 α ,以得到合适的步长值,最终使 θ 能够快速收敛到一个局部最优解。

更精妙的方法:可以寻找一个Hessian矩阵的近似,得到最佳步长值,使用该步长值能够更快地收敛到局部最优(和牛顿法类似)。比如L-BFGS算法。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值