最优化—梯度下降法

最优化问题

最优化问题就是求解函数极值的问题, 包括极大值和极小值, 几乎所有机器学习算法归根到底都是在求解最优化问题。在高等数学/微积分中有求极值统一的思路:找函数导数等于0的点,只要函数可导我们就可以用这种方法。在机器学习中我们一般求函数的极小值,若求极大值我们只需要整体加负号。有些时候我们会对优化变量x有约束, 包括等式约束和不等式约束, 他们定义了优化变量的可行域。我们的目标即一个优化的问题的全局极小值x*对于可行域里所有的x,有f(x*)<=f(x),即全局极小值不大于任意一点的函数值。但是, 有些函数有多个函数极小值,即使我们找到了导数等于0的所有点, 还需要比较这些点的函数值。

导数与梯度

梯度是导数多元函数的推广, 它是多元函数对各个自变量偏导数形成的向量。 

可导函数在某一点处取得极值的必要条件是梯度为 0,梯度为 0 的点称为函数的驻点, 这是疑似极值点。需要注意的是,梯度为 0 只是函数取极值的必要条件而不是充分条件,即 梯度为 0 的点可能不是极值点。至于是极大值还是极小值,要看二阶导数/Hessian 矩阵,Hessian 矩阵我们将在后面的 文章中介绍,这是由函数的二阶偏导数构成的矩阵。这分为下面几种情况:如果 Hessian 矩阵正定,函数有极小值; 如果 Hessian 矩阵负定,函数有极大值;如果 Hessian 矩阵不定,则需要进一步讨论。这和一元函数的结果类似,Hessian 矩阵可以看做是一元函数的二阶导数对多元函数的推广。一元函数的极值判别法为,假设在某点处导数等于 0,则:如果二阶导数大于 0,函数有极小值;如果二阶导数小于 0,函数有极大值;如果二阶导数等于 0,情况不定。

对于有指数函数,对数函数,三角函数的方程,我们称为超越 方程,求解的难度十分的大。精确的求解不太可能,因此只能求近似解,这称为数值计算。工程上实现时通常采用的是迭代法,它从一个初始点 x0 开始,反复使用某种规则从 xk 移动到下一个点 xk+1 ,构造这样一个数列,直到收敛到梯度为 0 的点处。这些规则一般会利用一阶导数信息即梯度;或者二阶导数信息即 Hessian 矩阵。这样迭 代法的核心是得到这样的由上一个点确定下一个点的迭代公式。

这个过程就像我们处于山上的某一位置,要到山底找水喝,因此我们必须到达最低点处:此时我们没有全局信息,根本就不知道哪里是地势最低的点,只能想办法往山下走,走 一步看一步。刚开始我们在山上的某一点处,每一步,我们都往地势更低的点走,以期望能走到山底。

推导过程

只要没有到达梯度为 0 的点,则函数值会沿着序列 xk 递减,最终会收敛到梯度为 0 的点,这就是梯度下降法。迭代终止的条件是函数的梯度值为 0(实际实现时是接近于 0), 此时认为已经达到极值点。注意我们找到的是梯度为 0 的点,这不一定就是极值点,后面会 说明。梯度下降法只需要计算函数在某些点处的梯度,实现简单,计算量小。

感觉有用小伙伴的可以关注下博客,这段时间在学习机器学习的一些公理算法,会继续更新一些算法内容,会把一些基本的知识总结到博客上,一方面为了方便以后查阅,另一方面希望分享自己觉得有用的东西,及时解决大家疑惑。如果有错误欢迎大家留言指正,一起学习进步。

猜你喜欢

转载自blog.csdn.net/H_hei/article/details/82313040
今日推荐