深度学习第四章-数值计算笔记

4.1 上溢和下溢

  • 下溢(underflow):当接近0的数被四舍五入为0时,发生下溢。例如,我们通常要避免被0(NaN错误)除或避免取0的对数( )。
  • 上溢(overflow):大量级的数字被近似为
  • softmax是避免上溢下溢数值稳定的一个办法:
    softmax(x)i=exp(xi)nj=1exp(xj)(1)

    • xi=c ,且c是很小的负数, exp(c) 会发生下溢,softmax函数分母会变成0
    • xi=c ,且c是很大的正数, exp(c) 会发生上溢
      需要通过 softmax(xmaxi(xi)) 解决, xmaxi(xi) 使 exp 最大参数为0,解决上溢问题。同样分母至少有一个值为1的项,解决了下溢被0除问题。
  • 可以使用相同的技巧稳定 logsoftmax 函数

4.2病态条件

  • 根据第二章线性代数:函数 f(x)=A1x 。特征值分解,条件数为:
    maxi,jλiλj(2)
    最大特征值与最小特征值比值很大,则矩阵求逆对输入误差特别敏感,这种特性是矩阵本身的固有属性,不是矩阵求逆误差带来的影响。

4.3基于梯度的优化方法

这一部分很常见了,最新的Andrew Ng在Coursera推出的deeplearning specialization讲解的很详细。普通的梯度下降就不写了,写一下Jacobian和Hessian矩阵。

4.3.1 Jacobian和Hessian矩阵

Jacobian和Hessian矩阵
简单的说,Jacobian矩阵计算输入和输出都是向量的所有偏导数。Hessian计算导数的导数,也就是曲率的导数。其中Jacobian和Hessian矩阵介绍了关于牛顿法的推导。
- 仅使用梯度信息的优化算法称为一阶优化算法,如梯度下降。
- 使用Hessian矩阵的优化算法称为二阶优化算法,如牛顿法。
- 深度学习背景下,限制函数满足Lipschitz连续,Lipschitz连续函数的变化速度以Lipschitz常数 L 为界:

x,y,|f(x)f(y)|L||xy||2(3)
,该属性允许我们的假设,如梯度下降算法导致输入的微小变化将使输出只产生微小变化,属于弱约束。
- 凸优化(Convex optimization)只对凸函数起作用,即Hessian处处半正定的函数,因为这些函数没有鞍点且局部极小点肯定是全局最小点

4.4约束优化

传统的SVM使用了经典的Lagrange函数及KKT条件,可参考李航的《统计学习方法》中SVM一节。

4.5实例:线性最小二乘

  • 传统方法:
    • 线性最小二乘直接求导
      线性最小二乘直接求导
    • 线性最小二乘矩阵形式求解
  • 梯度优化方法:
    f(x)=12||Axb||22(4)

    计算梯度:
    xf(x)=AT(Axb)=ATAxATb(5)

    执行如下步骤:
    while||ATAxATb||>δ:x:=xα(ATAxATb)
  • 牛顿法:
    引入Lagrangian函数:
    L(x,λ)=f(x)+λ(xTx1)(6)

    要解决:
    minx maxλ,λ0L(x,λ)(7)

    用Moore-Penrose伪逆: x=A+b 找到无约束最小二乘问题的最小范数解。对Lagrangian关于 x 微分,
    ATAxATb+2λx=0(8)

    该解得形式:
    x=(ATA+2λI)1ATb(9)
    关于 λ 进行梯度上升找到服从约束的值。观察
    λL(x,λ)=xTx1
    x 的范数超过1,导数为正,为了跟随导数上升并相对 λ 增加Lagrangian,需要增加 λ 。因为 xTx 惩罚系数增加了,求解关于 x 的线性方程将得到具有较小范数的解。求解过程和调整 λ 将一直持续到 x 具有正确的范数,并且关于 λ 的导数为0。

你可能感兴趣的:(深度学习笔记)