深度学习-1.数值计算

上溢和下溢

定义

  • 下溢指接近零的数被四舍五入为零后作为分母,求对数等,有些软件会抛出异常,有些会分会NaN做占位符
  • 上溢指计算出的数字接近无穷,进一步计算会导致出现非数字

解决方法

  • softmax函数

s o f t m a x ( x ) = e x p ( x i ) / ∑ e x p ( x i ) softmax(x) = exp(x_i)/∑exp(x_i) softmax(x)=exp(xi)/exp(xi)
使用该函数并不能完全避免上下溢,但可以用来做一个数值稳定

病态条件

定义

  • (神经网络中的)条件数:函数相对于输入的微小变化而变化的快慢程度
  • 考虑函数 f ( x ) = A − 1 x f(x) = A^{-1}x f(x)=A1x,当 A ∈ R n × n A \in R^{n \times n} ARn×n具有特征值分解时,其条件数为 max ⁡ i , j ∣ λ i λ j ∣ \max \limits_{i, j} \left| \frac{\lambda_i}{\lambda_j} \right| i,jmaxλjλi, 即 ∣ λ m a x λ m i n ∣ \left| \frac{\lambda_{max}}{\lambda_{min}} \right| λminλmax。条件数越大,该函数越病态,即矩阵求逆对输入的误差越敏感。

示例

  • 病态程度高:

[ 10000 2 0 1 ] x = [ 10000 10000 ] \begin{bmatrix} 10000 &2\\ 0& 1 \end{bmatrix} x = \begin{bmatrix} 10000\\ 10000 \end{bmatrix} [10000021]x=[1000010000]
特征值10000和1,条件数10000
解得 x 1 = − 10000 , x 2 = 10000 x_1=-10000,x_2=10000 x1=10000,x2=10000

轻微扰动后
[ 10000 2 0 2 ] x = [ 10000 10000 ] \begin{bmatrix} 10000 &2\\ 0& 2 \end{bmatrix} x = \begin{bmatrix} 10000\\ 10000 \end{bmatrix} [10000022]x=[1000010000]
解得 x 1 = 0 , x 2 = 5000 x_1=0,x_2=5000 x1=0,x2=5000
可见差别巨大

  • 病态程度低:

[ 10 2 0 5 ] x = [ 100 100 ] \begin{bmatrix} 10 &2\\ 0& 5 \end{bmatrix} x = \begin{bmatrix} 100\\ 100 \end{bmatrix} [10025]x=[100100]
特征值10和1,条件数2
解得 x 1 = 6 , x 2 = 20 x_1=6,x_2=20 x1=6,x2=20

轻微扰动后
[ 10 2 0 4 ] x = [ 100 100 ] \begin{bmatrix} 10 &2\\ 0& 4 \end{bmatrix} x = \begin{bmatrix} 100\\ 100 \end{bmatrix} [10024]x=[100100]
解得 x 1 = 5 , x 2 = 25 x_1=5,x_2=25 x1=5,x2=25

基于梯度的优化方法

梯度下降法

  • 梯度下降法的思想较为简单,且在网络上有详细的介绍,在此不做赘述,一篇文章
  • 梯度下降法中学习率α的选取,普遍的方式是选择一个小常数,更好的方法是选取几个常数进行计算,在其中有策略的挑选出最优参数,这种策略被称为线搜索
  • 值得注意的是,梯度下降法被限制在连续空间,但其迭代的概念可以推广到离散空间。其中,递增且带有离散参数的目标函数成为爬山算法。

梯度之上的雅可比矩阵和海森矩阵

雅可比(Jacobin)矩阵

  • 输入和输出都是向量的函数的所有偏导数.
  • J i , j = ∂ ∂ x j f ( x ) i J_{i,j} = \frac{\partial}{\partial x_j} f(x)_i Ji,j=xjf(x)i

海森(hessian)矩阵

  • 二阶导数的矩阵,等价于梯度的雅可比矩阵
  • H ( f ) ( x ) i , j = ∂ 2 ∂ x i ∂ y j f ( x ) H(f)(x)_{i,j} = \frac{\partial^2}{\partial x_i \partial y_j}f(x) H(f)(x)i,j=xiyj2f(x)

应用

寻找最优学习率
  • 泰勒展开式

f ( x ) = f ( x ( 0 ) ) + ( x − x ( 0 ) ) ⊤ g + 1 2 ( x − x ( 0 ) ) ⊤ H ( x − x ( 0 ) ) f(x) = f(x^{(0)}) + (x-x^{(0)})^\top g + \frac{1}{2}(x-x^{(0)})^\top H(x-x^{(0)}) f(x)=f(x(0))+(xx(0))g+21(xx(0))H(xx(0))

其中g是 f ( x ) f(x) f(x)的一阶梯度,H是 f ( x ) f(x) f(x)的二阶海森矩阵。使用学习率 ϵ \epsilon ϵ,则下一步迭代所使用的点 x = x ( 0 ) − ϵ g x = x^{(0)} - \epsilon g x=x(0)ϵg,代入泰勒展式,得

f ( x ( 0 ) − ϵ g ) = f ( x ( 0 ) ) − ϵ g ⊤ g + 1 2 ϵ 2 g ⊤ H g f(x^{(0)} - \epsilon g) = f(x^{(0)}) - \epsilon g^\top g + \frac{1}{2}\epsilon^2g^\top Hg f(x(0)ϵg)=f(x(0))ϵgg+21ϵ2gHg

现更改变量(变分法)为 ϵ \epsilon ϵ,则 f ( x ( 0 ) − ϵ g ) f(x^{(0)} - \epsilon g) f(x(0)ϵg)的最小值一阶导数的零点,故最优步长为

ϵ ∗ = g ⊤ g g ⊤ H g \epsilon^* = \frac{g^\top g}{g^\top Hg} ϵ=gHggg

在最坏的情况下, g g g H H H的最大特征值 λ m a x \lambda_{max} λmax对应的特征向量对齐,则最优步长是 1 λ m a x \frac{1}{\lambda_{max}} λmax1

然而,当海森矩阵的条件数很差时,即病态程度较高时,梯度下降法的迭代速度会很慢,如下图所示,在最大特征值所对应的特征向量方向上浪费太多时间。因此可以利用海森矩阵的性质预测下一步迭代是否是一个有前途的方向。

请添加图片描述

  • 牛顿法

由泰勒展开式对 x x x求导,可得
f ′ ( x ) = g + H ( x − x ( 0 ) ) f'(x) = g + H(x-x^{(0)}) f(x)=g+H(xx(0))
f ′ ( x ) = 0 f'(x) = 0 f(x)=0,可得
x ∗ = x ( 0 ) − H − 1 g x^* = x^{(0)} - H^{-1}g x=x(0)H1g
当f是一个正定二次函数时,牛顿法只需要一次迭代就能直接跳到最优点,相反则需要多次迭代。

  • 优化算法

仅使用一阶梯度的优化算法成为一阶优化算法
使用海森矩阵的优化算法称为二阶最优化算法,如牛顿法

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值