优化算法的学习

         对于机器学习,优化算法,是指求解最优化问题的方法,这对于解决问题至关重要,什么时候用什么方法,以及如何推导,现记录如下,以防止以后忘记,都用大白话来说,尤其需要掌握其精髓。

         最优化问题,大概可以分为二类,一类是有无约束条件的优化问题,一类是有约束问题的优化。在有约束问题的优化中,我们对于约束分类为等式约束和不等式约束。依次介绍。

         对于无约束问题,我们主要采用的几种算法来解决,梯度下降法,迭代尺度法,牛顿法,拟牛顿法,最小二乘法等。

         【梯度下降法】(Gradient descent)也叫做,最速下降法(steepest descent),往梯度的方向走,也就是下降最快的地方走。是一种迭代的算法,每一步都选择下降最快的方向,只有方向信息。首先,给定一个初始值,然后求出梯度,然后更新初始值,直到收敛。梯度指的是负梯度方向,也就是函数值下降最快的方向,然后用最快的方式减少目标函数更新变量值,直到收敛。在梯度下降法中,我们需要设定的参数有:初始值,步长(学习率),迭代终止条件(迭代次数或梯度变化很小的情况)。

          当求解的问题是凸函数的时候,有全局最优解,否则,并不能保证一定是全局最优的情况,有可能得到极值而不是最值的情况。(梯度下降法是梯度法中的一种 ,梯度下降主要是用来最小化的情况,而梯度上升主要是用来求最大化的情况)。

           梯度下降法,可以采用的随机梯度下降法(SGD,stochastic gradient descent),也就是随机选择数据来求梯度进行更新;可以采用批量梯度下降法(BGD,batch gradient descent),也就是选择全部的训练数据来求平均梯度,来进行更新;可以采用小批量梯度下降法(mini-batch gradient descent),选择一部分训练数据来求平均梯度,来进行更新。三种方法中,从三个方面来对方法进行度量,从收敛速度来说,BGD>MBGD>SGD;从准确率来说,BGD>MBGD>SGD;从训练速度来说:SGD>MBGD>BGD。

          【迭代尺度法】(improved iterative scaling,IIS),主要是通过寻找一种参数的修正方法能够不断的迭代来实现目的。这种方法主要的应用之一是在最大熵模型中,这种算法通过求参数改变后和参数改变前的差的上界,利用上界中,改变一维,固定剩下的维实现求导为0,最终得到这一维的变化。

           【牛顿法】牛顿法的得名主要在于求方程的解的牛顿法,当然得名的原因还是在于应用到了牛顿法解方程的思想。主要的精华部分在于:求解的极值点处的一阶导数为0,也就是我们求得是一阶导数的方程,所以,我们需要用到二阶的情况。我们对其进行二阶泰勒展开,对x-xk求导,得到一阶的关系,最终得到一阶,二阶的关系,而对于极值点一阶为0,以此关系最终得到更新式子,不断迭代,最终实现求解即可。对其进行扩展,如果函数是一维的 ,那么就是与二阶导数相关,但如果是高维函数的情况,不能单独认为是二阶的情况,而是涉及到了海森矩阵的问题,不仅涉及到了海森矩阵,还涉及到了海森矩阵的逆的情况。而这个求矩阵的逆的问题也成为了牛顿法的瓶颈所在。

            【拟牛顿法】拟牛顿法的名字可以看出,第一是拟,也就是不是真的,是仿照的,第二是牛顿法,那么说明拟牛顿法与牛顿法密切相关。拟牛顿法的存在就是为了解决牛顿法的海森矩阵的逆难求解的问题,找这么一个矩阵来代替海森矩阵,那么这个矩阵需要与海森矩阵(逆)的功效一样,并且与其性质相同,都是正定矩阵(对应求极小值点),若为负定矩阵(极大值点)<正定矩阵的性质,是对于向量的转置乘以矩阵乘以向量始终为正,也就是减去一个整数,是不断下降的趋势>。G为我们找到的替代矩阵,H为海森矩阵,G=H的逆。在拟牛顿法中,有几种方法,第一种是DFP算法(Davidon-Fletcher-Powell)算法,  从因变量角度来进行说明,第二种是BFGS(Broyden-Fletcher-Goldfarb-Shanno)算法,从自变量的角度来进行说明;第三种是Broyden类算法,是利用BFGS中的矩阵与DFP中的矩阵之间的逆矩阵的关系,然后将BFGS的矩阵用DFP矩阵来表示出来,然后利用一个线性的关系式来表示,最终得到需要的矩阵。

              【最小二乘法】最小二乘法是用来求函数拟合,或者函数极值的方法。最小二乘法求解的目标是最小化平方误差,然后对平方误差对每一个参数进行求导,使得导数为0(导数为0很有可能是极值的情况),然后联立所有的导数为0的方程组成方程组,然后求解解析解。除了采用代数的描述方式,还有利用矩阵的描述方式,利用矩阵的描述方式中涉及到了矩阵求导的问题。对于最小二乘法而言,是直接求解析解的方法,并且在矩阵描述中,涉及到了求解逆矩阵的问题,如果逆矩阵不存在的话,则不能进行求解,而其他的方法仍然可用。并且对于函数的拟合,是必须要求拟合的函数是线性的,这是必要的条件,需要先把非线性的函数转换为线性函数,然后才能用最小二乘法来进行求解。并且最小二乘法对应的是求方程组,那么要求方程组肯定是可以求出解的,也就是要求方程组不是欠定,是欠定的情况,是无法求解的。

             对于有约束问题的求解,如果是等式约束的情况下,我们可以采用拉格朗日乘子法,将有约束的问题转化为无约束的问题,然后利用无约束的问题的求解方法来解决问题,但从有约束的问题转化为无约束的问题中,加入了几个变量,所以,我们也需要将这几个参数同样进行求解优化的问题。 对这几个参数进行求导的时候,其实就是原来等式的约束情况,也就是需要在我们等式约束的条件下,然后对约束与原条件求相切的情况。如果是不等式混杂的约束条件下,我们采用的是KKT条件方法来进行处理,什么是KKT条件,就是变形的拉格朗日乘子法,加入了不等式之后,对参数求解就不再是单纯的求解得到约束条件,因为涉及到了不等式的情况,所以,要不让不等式为0,要不让其系数为0,保证原始式子不变。具体的解释,详见链接:深入了解拉格朗日乘子法和KKT条件


        

猜你喜欢

转载自blog.csdn.net/angela2016/article/details/80713366
今日推荐