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(x−maxi(xi)) 解决, x−maxi(xi) 使 exp 最大参数为0,解决上溢问题。同样分母至少有一个值为1的项,解决了下溢被0除问题。
- 可以使用相同的技巧稳定 logsoftmax 函数
4.2病态条件
- 根据第二章线性代数:函数
f(x)=A−1x
。特征值分解,条件数为:
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
为界:
- 凸优化(Convex optimization)只对凸函数起作用,即Hessian处处半正定的函数,因为这些函数没有鞍点且局部极小点肯定是全局最小点
4.4约束优化
传统的SVM使用了经典的Lagrange函数及KKT条件,可参考李航的《统计学习方法》中SVM一节。
4.5实例:线性最小二乘
- 传统方法:
- 梯度优化方法:
设f(x)=12||Ax−b||22(4)
计算梯度:∇xf(x)=AT(Ax−b)=ATAx−ATb(5)
执行如下步骤:
while||ATAx−ATb||>δ:x:=x−α(ATAx−ATb) - 牛顿法:
引入Lagrangian函数:L(x,λ)=f(x)+λ(xTx−1)(6)
要解决:minx maxλ,λ≥0L(x,λ)(7)
用Moore-Penrose伪逆: x=A+b 找到无约束最小二乘问题的最小范数解。对Lagrangian关于 x 微分,ATAx−ATb+2λx=0(8)
该解得形式:x=(ATA+2λI)−1ATb(9)关于 λ 进行梯度上升找到服从约束的值。观察∂∂λL(x,λ)=xTx−1当 x 的范数超过1,导数为正,为了跟随导数上升并相对 λ 增加Lagrangian,需要增加 λ 。因为 xTx 惩罚系数增加了,求解关于 x 的线性方程将得到具有较小范数的解。求解过程和调整 λ 将一直持续到 x 具有正确的范数,并且关于 λ 的导数为0。