前言
本文的主体是机器学习中所用到的数值计算知识,因此奉行Lazy evaluation,对这些知识更深层次的探究只在绝对必要时完成。
Source of errors
Overflow and Underflow
计算机的内存是有限的,而有限的内存上无法实现无限精度的数值计算,因此数值计算是有误差的。
接近零的非零数值因为舍入变为0称为Underflow。
超出表示范围的wrap-around称为Overflow
- positive-overflow 指超过范围的正数被截断为负数
- negative-overflow 指超过范围的负数被截断为正数
Poor Conditioning
Condition指输入的微小变化引起函数值变化的剧烈程度。计算机中的数字是有表示范围的,因此Condition大的函数会遇到很多问题。
对于
如果A可以做特征值分解,那么f的condition number定义为
Optimization
解出使函数f(x)取得最大值/最小值的x的过程称为优化(optimization)。求f(x)最大值可以用求-f(x)的最小值实现,因此主要讨论求最小值。
naive gradient descent
梯度(gradient)给出了函数增长最快的方向,那么沿着梯度的反方向就可以将函数值减少。梯度下降法(gradient descent)就是采用这个思路一种方法:
其中ε是学习率(learning rate)。一般来说ε有两种取法
- 设为一个固定的很小的常量
- 取多个ε,选其中让f(x-ε∇f(x))最小的那个ε。这种方法又称为line search
Beyond the Gradient: Jacobian and Hessian Matrices
对于一个输入和输出都是向量的函数f,含有它的所有偏微分的矩阵称为雅可比矩阵(Jacobian matrix)
同样的,含有f的所有二阶偏微分的矩阵称为海希矩阵(Hessian matrix)
海希矩阵就是梯度的雅可比矩阵。
当二阶偏微分连续时,微分运算符具有交换律,即
机器学习中大部分函数f都具有连续的二阶偏微分,因此海希矩阵是实对称矩阵,因而可以做特征值分解,并且U是正交矩阵。
f对某个单位向量u方向u的二阶偏微分由
给出。
在x0处对f做二阶泰勒展开
H为海希矩阵,g为梯度。当采用学习率ε时,梯度下降的新坐标是x0-εg,带入泰勒展开,有
当最后一项小于等于零时,ε可以任选。当最后一项大于零时,有
时下降最快。最坏情况下,g与H重合,因此学习率的数量级由
决定。
学习率设的过大或过小都会造成问题,这可以由海希矩阵解决。其中最简单的就是牛顿法
牛顿法的步骤基本思路是,在x点做二阶泰勒展开。
解出函数的critical point
f是正定二次函数时,一次就找到了最低点。当f不是二次函数但是可以用二次函数局部近似时,多次迭代x*即可。
牛顿法只适用于解最小值,而梯度下降没有这个限制。
只用到梯度的优化算法,如梯度下降,叫做一阶优化算法。使用海希矩阵的算法,如牛顿法,叫做二阶优化算法。
Constrained optimization
有时我们希望在某集合S上而不是R^n上找出函数的最大/最小值,这叫做constrainted optimization(受限优化)。落在s中的点称为feasible point(可行点)
KKT方法是一个受限优化问题的通用方法。使用KKT方法,首先定义广义拉格朗日函数。
为了定义广义拉格朗日函数,首先需要将S定义为函数的集合
含有g(i)的方程称为equality constraints,含有h(j)的方程称为inequality constraints。
对于每个函数,定义λi和αj。他们叫做KKT乘数。
现在定义广义拉格朗日函数
接下来在广义拉格朗日函数上使用非受限优化算法,就可以解决受限优化算法了。