深度学习中的数值计算问题

1.上溢和下溢

连续数学在数字计算机上的根本困难:我们需要通过有限数量的位模式来表示无限多的实数。计算机在表示实数时总会引入一些近似误差,这些舍入误差会导致上溢和下溢问题。
举例:softmax函数: s o f t m a x ( x ) i = e x i ∑ j n ( e x j ) softmax(x)_{i} = \frac{e^{x_{i}}}{\sum_{j}^{n}(e^{x_{j}})} softmax(x)i=jn(exj)exi
x i x_i xi非常大时会导致 e x i e^{x_i} exi上溢,同理,当 x i x_i xi非常小时会导致 e x i e^{x_i} exi下溢,可以通过下面公式解决该问题(其中D为 x i x_i xi中的最大值):
S i = e v i − D ∑ i = 0 C e v i − D S_{i}= \frac{e^{v_{i}-D}}{\sum_{i=0}^{C}e^{v_{i}-D}} Si=i=0CeviDeviD

2.基于梯度的优化方法

基础
  1. 当导数等于0时,导数无法提供往哪个方向移动的信息。
  2. 驻点有三种:局部极小点,局部极大点、鞍点。
  3. 梯度向量 ∇ x f ( x ) \nabla_{x}f(x) xf(x)指向上坡,负梯度向量指向下坡,我们在负梯度方向上移动可以减少 f f f,这被称为最速下降法(method of steepest descent)或梯度下降法(gradient descent),更新公式: x ‘ = x − α ∇ x f ( x ) x^` = x - \alpha\nabla_{x}f(x) x=xαxf(x)
Jacobian和Hessian矩阵
  • Jacobian矩阵(由函数一阶导数组成的矩阵)
    如果我们有一个函数: f : R m → R n f:R^m \rightarrow R^n f:RmRn,则雅各比矩阵 j ∈ R n × m j\in R^{n\times m} jRn×m,其中 J i , j = ∂ ∂ x j f ( x ) J_{i,j} = \frac{\partial}{\partial x_j}f(x) Ji,j=xjf(x)
  • Hessian矩阵(由函数二阶导数组成的矩阵)
  1. 定义:如果我们有一个函数: f : R m → R f:R^m \rightarrow R f:RmR,则海森矩阵 h ∈ R m × m h\in R^{m\times m} hRm×m,其中 H i , j = ∂ 2 ∂ x i x j f H_{i,j} = \frac{\partial^2}{\partial x_i x_j}f Hi,j=xixj2f
  2. 二阶导数是对曲率的衡量,它告诉我们一阶导数如何随着输入的变化而改变。
  3. 曲率为零 ⟹ \Longrightarrow 一阶导数是常数 ⟹ \Longrightarrow 函数f是一条平坦的线 ⟹ \Longrightarrow 代价函数下降的速度与步长 α \alpha α相等
  4. 曲率为负时(即二阶导数为负)函数向下凹陷,为正向上凹陷
  5. Hessian矩阵是实对称矩阵,因此我们可以将其分解成一组是特征值和一组特征向量的正交基,最大的特征值确定最大的二阶导数,最小的特征值确定最小的二阶导数
  6. 某个特定方向d上的二阶导数为 d T H d d^THd dTHd,当d是H的一个特征向量时,此方向上的二阶导数就是对应的特征值,对于其他方向d,方向的二阶导数是所有特征值的加权平均,权重在0和1之间,且与d的夹角越小的特征向量权重越大。
  7. 二阶导数可以用来确定最优步长, α ∗ = g T g g t H g \alpha^* = \frac{g^Tg}{g^tHg} α=gtHggTg,其中g是梯度,最坏情况下梯度g与H最大特征值 λ m a x \lambda_{max} λmax对应的特征向量对齐,此时 α ∗ = 1 λ m a x \alpha^* = \frac{1}{\lambda_{max}} α=λmax1
  8. 二阶导数可以用来确定一个临界点是否是局部极大值、局部极小值或鞍点。当Hessian矩阵正定时,为局部极小点、反之,负定时为局部极大值;当Hessian既有正特征值也有负特征值时,此临界点很可能是鞍点;当包含零特征值,且非零特征值是同号时,无法确定。
  9. 一阶优化算法,如梯度下降法,只使用了函数的一阶信息,并没有利用Hessian矩阵中的曲率信息,当Hessian矩阵条件数很差时,会导致梯度下降法表现很差,可以通过对数据进行标准化处理来解决该问题。(另外,梯度下降法不会被卡在鞍点,但牛顿法,可能会)
  10. 二阶优化算法,如牛顿法, 会使用到Hessian矩阵的信息。
约束问题

假设我们希望在x的某些集合S中找f(x)的最大值或最小值,一般使用拉格朗日乘子法。
假设 S = { x ∣ ∀ i , g ( i ) = 0   a n d   ∀ j , h ( j ) ≤ 0 } S = \{x| \forall i, g^{(i) = 0 }\ and\ \forall j, h^{(j)} \leq 0\} S={xi,g(i)=0 and j,h(j)0}
第一步:我们设拉格朗日函数为: L ( x , λ , α ) = f ( x ) + ∑ i λ i g ( i ) ( x ) + ∑ j α j h ( j ) ( x ) L(x, \lambda, \alpha) = f(x) + \sum_i\lambda_ig^{(i)}(x) + \sum_j\alpha_jh^{(j)}(x) L(x,λ,α)=f(x)+iλig(i)(x)+jαjh(j)(x)
第二步:优化 m i n x   m a x λ   m a x α , α ≥ 0   L ( x , λ , α ) min_x\ max_{\lambda}\ max_{\alpha, \alpha \geq0}\ L(x,\lambda, \alpha) minx maxλ maxα,α0 L(x,λ,α)
第三步:使用KKT条件来寻找最优点,KKT条件是必要条件,不一定是充分条件;

  • 使拉格朗日函数梯度为零;
  • 所有关于x和KKT乘子的约束都满足;
  • 不等式约束显示的“互补松弛性”: α ⨀ h ( x ) = 0 \alpha \bigodot h(x) = 0 αh(x)=0
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值