总结Deep Learning第四章Numerical Computation知识点。
1.Overflow and Underflow
书中指出在数字计算机系统中最大的连续计算问题是用有限的位运算表示无限多个实数。对于一些实数,当我们在计算机中表示时会出现近似错误,最常见的就是舍入错误。例如将近似0的数舍入成0,这就是Underflow。而当舍入的0出现在分母时,就会出现大的计算错误问题。而Overflow是当数组是一个很大的数时,计算机可能会将该近似无限大数表示成一个非数字(not-a-number)。
所以为预防出现Overflow和Underflow问题,我们使用Softmax函数,Softmax函数形式为:。
2.Poor Conditioning
Conditioning表示函数在输出发生小改变时输出值的变化情况。如果函数对于输入的扰动输出值产生很大的改变的话,科学计算会出现问题。为衡量函数的变化情况,提出了condition number(条件数):函数,当A是n*n的,且A有特征值时,定义条件数为。条件数越大,代表函数的抗干扰能力越弱。
3.Gradient-Based Optimization
当我们计算目标函数的最大或最小值时可以采用梯度下降(Gradient descent)算法。梯度下降算法是指我们每次讲x沿当前点x的导数相反方向移动来更新f(x)。更新方法表示为:。其中是学习率。学习率的选择下一节谈到。
梯度下降算法当每个元素的导数都为0时收敛,导数等于0的点叫做critical point(临界点),但此时的最小(大)值可能不是全局的最小(大)值,可能是局部最小(大)值或鞍点(Saddle point)。
4.Jacobian and Hessian Matrices
Jacobian Matrix(雅克比矩阵)中包含的是函数的导数值。例如,则雅克比矩阵是,其中每个元素是。
Hessian Matrix(黑塞矩阵)中包含的是二次导数,定义为。Hessian Matrix是实对称矩阵。
二次导数表示的是一次导数的斜率,使用泰勒展开式将f(x)展开得到:。使用梯度下降将x移到带入到上面方程式中化简得到。
由上式得到,若是非正数,则f(x)的变化是同一次导数和学习率的方向变化的;但是若是正数,则可能出现f(x)的变化随二次导数的变化,为避免这种情况,可以选择学习率为。
并从二次导数判断当在在临界点时,如果Hessian矩阵是正定矩阵(所有的特征值都是正值),则该点是局部最小值;同理若Hessian矩阵是负定矩阵(特征值全是负数),点是局部最大值;若特征值至少有一个是负数且至少有一个是正数,则点是鞍点。
对于多维变量来说,若Hessian矩阵条件数太大的话,会出现在某个点沿某方向变化剧烈,而沿另外一方向变化缓慢。而对于梯度下降法来说,它不知道导数的变化,所以也不会优先知道在哪个方向上导数会一直保持负数很长时间。同时由上面式子也可以得出学习率不好选择。所以书中提出了Newton’s method(牛顿方法)。重新写出二阶泰勒展开式如下:
我们使用下式作为x的下一步的取值:
牛顿方法有很多特性:当f(x)是正定二次矩阵时,使用牛顿方法可以一步取得最小值。而牛顿方法多用于来计算最小值,对于计算最小值(所有特征值都是正数)有很多良好的特性。
5.Constrained Optimization
第5小节讲带约束条件的优化问题,主要介绍了广义拉格朗日和KKT条件。具体内容单独总结。