机器学习中所谓的训练其实就是损失函数的优化过程,求损失函数的最优化解,主要是得靠一些常规套路,去一点一点地接近最优化目标。
常用的有梯度下降法、牛顿法和拟牛顿法、共轭梯度法、启发式优化方法、拉格朗日乘数法等。
一、梯度下降法(Gradient Descent)
梯度下降法实现的原理简单,是最常用最简单的最优化方法。当目标函数是凸函数时(如线性规划),得到的是全局最优解。但是在一般情况下,并不能保证得到全局最优解,下降速度也不一定是最快的。
梯度下降法的原理是从当前点θ开始,在梯度下降的方向前进一步,前进的幅度由梯度决(即求导)决定,一步一步探索到达最低点。
以线性回归为例,要拟合的函数和损失函数分别为
对目标函数求导得到
每个θ向梯度下降的方向前进一步,更新得到下一个θ
按照λ和m的取值不同,梯度下降分为三种:
(1)批量梯度下降法(Batch Gradient Descent,BGD),是梯度下降法最原始的形式,它的具体思路是在更新每一参数时都使用所有的样本数据来进行更新。λ值取1,更新的公式为
从它的构建思路可以知道批量梯度下降法,
优点:全局最优解;易于并行实现;
缺点:当样本数目(m值)很多时,训练过程会很慢。
针对它的缺点就有了以下的改进。
(2)随机梯度下降(Random Gradient Descent,RGD),其具体思路是在更新每一参数时都使用一个样本来进行更新,也就是m值取为1,更新的公式如下。
每一次更新参数都用一个样本,更新很多次。如果样本量很大的情况(例如几十万),那么可能只用其中几万条或者几千条的样本,就已经将θ迭代到最优解了。但是,SGD伴随的一个问题是噪音会增多,这样每次迭代并不一定是向着整体最优化方向的。两者的关系可以这样理解:随机梯度下降方法以损失很小的一部分精确度和增加一定数量的迭代次数为代价,换取了总体的优化效率的提升,当然增加的迭代次数是远远小于样本数量的(不过会使SGD在解空间的搜索过程看起来很盲目)。
优点:训练速度快;
缺点:准确度下降,并不是全局最优;不易于并行实现。
(3)小批量梯度下降(Mini-batch Gradient Descent,简称MBGD),它的具体思路是在更新每一参数时都使用一部分样本来进行更新,也就是m的值取一个大于1且小于所有样本的数量(假设为10),则更新公式为
这是为了克服上面两种方法的缺点,又同时兼顾两种方法的有点。于是可以总结在使用情况上a)如果样本量比较小,采用批量梯度下降算法;b)如果样本太大,或者在线算法,使用随机梯度下降算法;c)在实际的一般情况下,采用小批量梯度下降算法。
学习率(Learning Rate),即步长。学习率对算法性能产生巨大的影响。学习率决定了参数移动到最优值的速度快慢(可以参见下图的示意):如果学习率过大,很可能会越过最优值;如果学习率过小,优化的效率可能过低,算法长时间无法收敛。所以为了能够使梯度下降法有较好的性能(当然也需要考虑实际内存和效率),我们需要把学习率的值设定在合适的范围内。
二、牛顿法和拟牛顿法(Newton's method & Quasi-Newton Methods)
三、共轭梯度法(Conjugate Gradient)
四、启发式优化方法
启发式方法指人在解决问题时所采取的一种根据经验规则进行发现的方法。其特点是在解决问题时,利用过去的经验,选择已经行之有效的方法,而不是系统地、以确定的步骤去寻求答案。启发式优化方法种类繁多,包括经典的模拟退火方法、遗传算法、蚁群算法以及粒子群算法等等。(没有深入研究,先进行部分引用放在这吧)
五、拉格朗日乘数法(Lagrange Multiplier Method)
拉格朗日乘数法主要用于解决带受约束条件的最优化问题。