总第122篇
我们在前面说过机器学习中的损失函数,其实机器学习中的每一个模型都是在求损失函数的最优解,即让损失达到最小值/极小值,求解方式有多种,本篇讲讲其中两个基本的优化方法:
梯度下降法,肯定是利用的梯度的原理,关于梯度的讲解推荐大家去看这个视频:
https://www.bilibili.com/video/av19844108?from=search&seid=1216217609851821464
,很生动形象。
偏导数主要是用来研究多元函数的导数,一个多变量的函数的偏导数是它关于其中一个变量的导数,而保持其他变量恒定不变。现有函数z = f(x,y),下面两式分别为函数z对x(y保持不变)、z对y(x保持不变)的偏导。
在一个二维平面内,z对x的偏导表示在该点对x轴的切线斜率,z对y的偏导表示在该点对y轴的切线斜率,分别如下图所示:
y值保持不变,其实是将X和Z就变成一个一维平面
X值保持不变,其实是将Y和Z就变成一个一维平面。
上面提到的x轴的偏导数和y轴的偏导数,只是两个特殊方向的偏导数,实际上在一个二维平面内的一点上可以有多个方向上的偏导数,我们把在其他方向上的偏导数称为方向导数。
方向导数是在各个方向上都有,而且每个方向上的斜率是不一样的,对应的变化速度也是不一样的,那到底沿哪个方向斜率最大,速度最快呢?我们把这个斜率最大,速度最快的方向称为梯度。
梯度就是将z对x轴的偏导数与z对y轴的偏导数以向量相加的结果。
假设你现在是在一座山的山顶(最高点),你要可能快的走到山底(最低点),你应该往哪个方向走呢,肯定是选择最陡峭的那个方向走(排除其他风险的情况下),这样走起来要快。那么该怎么寻找比较陡峭的方向呢?就可以用梯度,但是梯度是表示上升的方向,如果要用来指示下降方向的话,需要加一个负号。 这里有一个问题就是你走一会以后又得重新找当前位置对应的最陡峭的方向,因为你山不可能一条倾斜的直线,最陡峭的方向是固定的,而山是曲线,在不同点处,最陡峭的方向是不一样的,所以你在走一回以后就需要从新寻找当前位置的最陡峭方向。我们把这个走一会所走的距离称作步长。
这样梯度下降的公式就出来了:
Θ0表示在没有走之前的位置,最开始的话就是山顶的位置,α是步长,∇J(Θ)是梯度、即行走方向,-α∇J(Θ)表示沿着负梯度方向走了多远,Θ1表示从起始位置沿着∇J(Θ)方向走了α远以后到达的位置。
利用梯度下降求解最优化问题:
最小化所有训练样本的损失函数,使得最终求解的是全局的最优解,即求解的参数是使得风险函数最小,但是对于大规模样本问题效率低下。
随机选择部门样本来最小化损失函数,得到的极值是局部最优解,适用于大规模训练样本情况。
牛顿法利用泰勒公式的原理,关于泰勒公式再给大家推荐一个有趣的视频:https://www.bilibili.com/video/av14431402?from=search&seid=12076814235087445644
,原理很清楚,弹幕也有趣。
并不是所有的方程都有求根公式,或者求根公式很复杂,导致求解困难。牛顿法就是为了解决这些问题而生的。利用牛顿法,可以迭代求解,让上面的问题迎刃而解。牛顿法的原理是利用泰勒公式,在x0处展开,且展开到一阶,即f(x) = f(x0)+f'(x0)(x-x0)
牛顿法的具体解决方式就是找到与原方程无限类似的函数,这样新函数的解就可以近似代替原函数的解。
具体的逼近原理就是让两个函数p(x)和f(x)在x0处的函数值相等(y值相等),一阶导数相等(斜率方向相等),二阶导数相等(斜率大小相等),…,n阶导数相等,这样函数p(x)就在点x0处无限接近了函数f(x)。
那么p(x)的函数应该是什么样子的呢?p(x)函数应该是从f(x)到f(x) n阶导数的一个集合,那么该怎么把这些拼凑起来呢?这里需要用到幂函数,主要是因为幂函数有如下特性:
这个特性就是幂函数的指数级对应的阶数导数不为0,其他阶导数全为0。那么函数p(x)就可以写成下式:
比如x的平方的二阶导数不为0,其他阶导数全为0.
函数p(x)在x0的值为a0,就是f(x0),函数p(x)在x0处的一阶导为a1,函数p(x)在x0处的二阶导为a2,…函数p(x)在x0处的n阶导为an。
式中Rn(x)是函数f(x)在任意点x与x0处的误差。这样就得出了函数f(x)的泰勒公式,即与f(x)无限接近的p(x)函数。
已知函数待求解最优化问题可以转化为求函数f(x)的极值,求f(x)的极值可以转化为求f(x)的导数 φ′(x)=0的解。即:
求解得:
于是,随机选择一个初始点x0,然后即可利用下式进行迭代求解:
通过不停迭代k值来求取f(x)的极小点。
上面讨论的是二维情况,二阶泰勒展开式变为:
其中▽f为f的梯度向量(对于多元函数来说,一阶导数就是偏导),▽2f为f的海森矩阵,其定义如下:
注意,▽f和▽2f中的元素均为关于X的函数,以下简记为g和H.特别是若f的混合偏导数可交换次序,则海森矩阵为对称矩阵。而▽f(Xk)和▽2f(Xk)则表示将X取为xk后得到的实值向量和矩阵,以下分别将其简记为gk和Hk。同样的,由于是求极小点,极值必要条件 要求它为φ(X)的驻点,即:
通过在上式中两边作用一个梯度算子,得到:
此时若矩阵Hk非奇异,可解得:
若给定初始值X0,则可同样构造出迭代格式:
其中下式为海森矩阵的逆矩阵,每次迭代时都需要计算一遍:
这就是牛顿迭代法,其中迭代方向为:
称为牛顿方向。
引用自:https://blog.csdn.net/lilong117194/article/details/78111779
从本质上去看,牛顿法是二阶收敛,梯度下降是一阶收敛,所以牛顿法就更快。如果更通俗地说的话,比如你想找一条最短的路径走到一个盆地的最底部,梯度下降法每次只从你当前所处位置选一个坡度最大的方向走一步,牛顿法在选择方向时,不仅会考虑坡度是否够大,还会考虑你走了一步之后,坡度是否会变得更大。所以,可以说牛顿法比梯度下降法看得更远一点,能更快地走到最底部。(牛顿法目光更加长远,所以少走弯路;相对而言,梯度下降法只考虑了局部的最优,没有全局思想。)
根据wiki上的解释,从几何上说,牛顿法就是用一个二次曲面去拟合你当前所处位置的局部曲面,而梯度下降法是用一个平面去拟合当前的局部曲面,通常情况下,二次曲面的拟合会比平面更好,所以牛顿法选择的下降路径会更符合真实的最优下降路径。
红色为牛顿法,绿色为梯度下降
引用自:https://www.cnblogs.com/shixiangwan/p/7532830.html
参考文章: https://www.jianshu.com/p/c7e642877b0e https://www.cnblogs.com/shixiangwan/p/7532830.html https://blog.csdn.net/lilong117194/article/details/78111779