基础的优化方法——梯度下降法,牛顿法
前言
无论在哪个领域,对于初学者而言,会对很多名词的概念产生混肴,本文介绍了两种最基本的优化算法——梯度下降法和牛顿法,万丈高楼平地起,其他优化算法基本上是在这两种算法的基础上加以改进得到的。
1.一维自变量标量函数的梯度下降法与牛顿法
梯度下降法属于牛顿法的一阶泰勒展开,常说的牛顿法默认是二阶泰勒展开,因此迭代法,就是在一个复杂函数的某点P,做一个逼近——线性逼近或者抛物线逼近(一阶泰勒多项式逼近或者二阶泰勒多项式逼近),这两个逼近只是在P点“周围”和复杂函数的斜率与数值相似,只是一阶泰勒多项式逼近的这个“周围”范围小一点,二阶泰勒多项式逼近的这个“周围”范围大一点。
假设一个二次抛物线函数 f ,泰勒展开式省略了多项式余项,函数 f 展示的是一维自变量到一维因变量,即标量到标量映射的一个函数,即x→f(x)或者说x→y(特别指出这点是因为优化算法多用多维自变量到一维因变量,即矢量到标量的映射函数,向量X→标量y)
一阶泰勒展开线性逼近(梯度下降法):
二阶泰勒展开抛物线逼近(牛顿法):
1.1梯度下降法
对于梯度下降法,因为我们使用的是一阶泰勒展开式进行逼近,即利用一个线性函数去逼近一个如上图所示的二次抛物线函数,我们不可能用这个一阶泰勒展开式的最小值(负无穷)去表示 f 这个函数的最小值,这很明显是不可能的。
但是,我们可以通过这个一阶泰勒展开式,找到函数 f 的下降方向(下降方向指的是自变量的移动方向)
对于一维自变量x,函数 f 的下降方向是在x轴方向上的(向正半轴或者负半轴移动);
当我们找到函数的下降方向,就可以通过迭代的方式,设置步长,每走一步,到达一个新的位置,判断下一步的下降方向,直至到达最小值点。
1.2牛顿法
对于牛顿法,因为我们使用的是二阶泰勒展开式进行逼近,即利用一个二次抛物线函数去逼近一个如上图所示的二次抛物线函数,二阶泰勒展开式存在最小值,在利用迭代法寻找函数 f 的最小值时,不必像梯度下降法那样设置步长去寻找下一步的位置,可以直接计算二阶泰勒展开式的最小值点以得到下一个位置:
对于一维自变量x,直接将二阶泰勒展开式的最小值点对应的自变量x当作迭代的下一个位置;
很明显,在初始值距离最小值点比较近的时候,牛顿法会非常迅速地完成迭代,而梯度下降法只能一步一步的缓慢接近最小值点。
2.多维自变量标量函数的梯度下降法与牛顿法
在实际的优化算法中,我们一般构造的是最小二乘函数,是多维的自变量X→一维的因变量y的映射函数,整个函数的最终目的是使得y最小,接近于0。在计算中,我们把式子写成行向量*列向量的形式,行向量是参数向量,列向量是自变量向量。
(x1,x2,x3是一元多次多项式)
该函数的二阶泰勒展开式写成:
也可以写成:
因为该函数是多维X到一维y的映射,因此,对应的雅可比矩阵是一个行向量,而海塞矩阵是一个矩阵。
2.1一阶泰勒展开线性逼近(梯度下降法):取到雅可比矩阵
下降方向(还需要人为定义步长):
2.2二阶泰勒展开抛物线逼近(牛顿法):取到海塞矩阵
与一维自变量标量函数的牛顿法同理,要找到二阶泰勒展开式的最小值,对∆X求导,使得二阶泰勒展开式的导数为0,得到(不需要人为定义步长):
3.多维自变量矢量函数
因为在最小二乘函数的优化中,使用的是多维自变量标量函数,因此对于多维自变量矢量函数我们知道他的存在即可