机器学习基础——数值计算

  1. 1. 前言
  2. 2. Source of errors
    1. 2.1. Overflow and Underflow
    2. 2.2. Poor Conditioning
  3. 3. Optimization
    1. 3.1. naive gradient descent
    2. 3.2. Beyond the Gradient: Jacobian and Hessian Matrices
    3. 3.3. Constrained optimization

前言

本文的主体是机器学习中所用到的数值计算知识,因此奉行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乘数。

现在定义广义拉格朗日函数

接下来在广义拉格朗日函数上使用非受限优化算法,就可以解决受限优化算法了。