深度学习(四):数值计算基础

版权声明:本文为博主原创文章,转载请注明出处,商业转载请联系作者([email protected]),谢谢合作!
  • 上溢和下溢:
     连续数学在数字计算机上最根本的困难是,需要通过有限的位数来表示无限多的实数,因此在计算机中表示实数时,总是会引入一些近似误差,当许多操作结合时,可能会引发重大问题。
    下溢:由于计算机表示数值的位数有限,所以一些接近零的数四舍五入变成了零,称为下溢。
    上溢:一些数值过大(∞)或者过小(-∞)时,计算机同样无法精确表示出来,称为上溢。
     必须对上溢和下溢进行数值稳定(对分子或者分母或者其中某一项式子做加减运算等,使得数值不再接近零或者趋于无穷)。
  • 病态条件:
    条件数指的是函数相对于输入的微小变化而变化的程度。输入发生了微小扰动后,输出随即迅速发生改变,称之为病态条件,这种系统对于科学计算来说是有问题的。
     函数 f(x) = A-1xA∈ Rn * n,其条件数为:
         maxi,j| λi / λj |
    即最大特征值和最小特征值的比值的绝对值。当该值很大时,矩阵A求逆对输入的误差非常敏感,但这种敏感性是矩阵本身所固有的特性。
  • 基于梯度的优化方法(梯度下降算法):
     将要进行最小化或最大化的函数称为目标函数准则,当我们要对其进行最小化时,也称为代价函数损失函数误差函数
     通常使用上标 * 表示最小化或最大化函数的 x 值,如 x* = arg min f(x)。
    深度学习(四):数值计算基础_第1张图片
    梯度下降
     如上图所示,对于函数 f(x),在某一点处(如图中的A点),可以沿两个方向移动(斜向上或者斜向下),图中的红线是在该点处的导数,由图中可知,若要最小化函数需要沿着导数的反方向(斜向下)进行移动。具体的数学推导过程如下(采用泰勒公式推导)
      一阶泰勒公式如下:
        f(x) ≈ f(x0) + (x - x0) f '(x0)   f '(x0) 表示 f(x)对x求导后带入x0的值
    设λ为每次更新的步长,v 为(x - x0)的方向,则:
        f(x) ≈ f(x0) + λv f '(x0)
    最小化目标函数时,我们希望每次更新 x 使得 f(x)变小,即:
        f(x) - f(x0) ≈ λv f '(x0) < 0
    步长λ通常为正值,因此,上式可以简化为:
        v f '(x0) < 0
    v 表示下一步前进的单位向量。f '(x0) 表示 f(x)对x求导后带入x0的值,在向量求导中该值称为梯度(关于向量求导问题,详细可参考:矩阵求导术)。进一步推导可得:
        v f '(x0) = ||v|| || f '(x0) || cos(θ)
    θ为 vf '(x0)之间的夹角。在 ||v||和|| f '(x0) ||固定的情况下,当cos(θ) = -1时,即 vf '(x0)反向时,||v||和|| f '(x0) ||的乘积最小,即f(x) 降低的最多,而f '(x0)的方向为梯度,故沿着负梯度的方向f(x) 局部下降最快。进一步推导可得:
         v = -f '(x0) / ||f '(x0)|| (v是一个单位向量,方向与f '(x0)相反)
    f '(x0) = 0时,导数无法提供移动方向的信息,该点称为临界点或者驻点局部极小点意味着这个点的 f(x)小于所有临近点,因此无法通过移动无穷小的步长来减小f(x),同样局部极大点处无法再增大f(x)。有些临界点既不是最大点也不是最小点,称为鞍点
     在深度学习背景下,要优化的函数可能包含有许多不是最优的局部极小点以及鞍点,尤其是在多维的情况下,优化将变得更困难。因此通常寻找使得 f 非常小的点(并不一定是最小的点)。
    深度学习(四):数值计算基础_第2张图片
    近似最小化
  • Jacobian和Hessian矩阵
    Jacobian矩阵(雅可比矩阵):对于一个函数 f:Rm→Rn,定义 f 的Jacobian矩阵 J ∈Rm * n,其中 J 中的每个元素 Ji,j = α f(xi) / αxjf(xi) 对xj求偏导)
    深度学习(四):数值计算基础_第3张图片

    Hessian矩阵:定义如下
    深度学习(四):数值计算基础_第4张图片
    Hessian矩阵主要用来存储二阶导数,等价于梯度的Jacobian矩阵。在二阶偏导连续的点处交换求导顺序,结果不变
    H i, j = H j, i,Hessian矩阵在这些点处是对称的。在深度学习背景下,可以认为Hessian矩阵是实对称的,可以将其分解为一组实特征值和一组特征向量的正交基。在特定方向 d 上的二阶导数可以写成 dTH d。当 dH的一个特征向量时,这个方向的二阶导数就是对应的权值。在其他方向上,方向二阶导数是所有特征值的加权平均,权重在 0 到 1 之间,且与 d 的夹角越小的特征向量权重越大。可以通过二阶导数预期一个梯度下降步骤能表现的多好。在当前点x(0)的近似二阶泰勒公式如下:
       f(x) = f(x(0)) + ( x - x(0))T g + ½ ( x - x(0))T H (x - x(0))
    具体推导不再展开,和上面使用一阶泰勒展开的推导过程很相似。
    当Hessian矩阵的条件数很差时,梯度下降算法也会表现的很差。
  • 约束优化
     有时候,并不需要在 x 的所有可能值下最大化或最小化一个函数,而是希望在 x 的某些集合 S 中找 f(x)的最大值或最小值,这称为约束优化
    Karush-kuhn-Tucker(KKT)方法(KKT方法是拉格朗日乘数法的推广)。如果通过等式和不等式的形式来描述 S,使用 m 个函数 g(i)和 n 个函数 h(j),则 S 可以表示为 S = {x| ∀ig(i)(x) = 0 and ∀j,h(j)(x) ≤ 0},其中涉及 g(i)的等式称为等式约束,涉及 h(j)的不等式称为不等式约束,为每个约束引入新的变量 λi和 αj,新变量称为KKT乘子(类似拉格朗日乘子)。定义广义Lagrangian函数:
     可以通过优化无约束的的广义Lagrangian来解决约束最小化问题(最大化问题可以通过加负号转变成最小化问题)。满足KKT条件的的函数,其最优值必定满足:
     ① L 对各个x求导均为零
     ② h(x) = 0
     ③ λi g(i)(x)=0,λi≥0
     其中第③个式子采用松弛变量构造出拉格朗日表达式求导后得到,此处不再展开,感兴趣可以查看这篇文章: KKT条件介绍。
    上图为对满足KKT条件的优化问题化简过程。

参考资料:
  《深度学习》
本系列相关文章:
深度学习(三):概率与信息论基础
深度学习(二):主成分分析算法
深度学习(一):线性代数基础

深度学习新手,文章若有疏漏,欢迎及时指正!

你可能感兴趣的:(深度学习(四):数值计算基础)