机器学习—梯度下降算法

来源:互联网 发布:软件测评收费 编辑:程序博客网 时间:2024/06/06 02:27

梯度下降算法

   一、梯度下降算法是一个最优化算法,它是沿梯度下降的方向求解极小值(也可以沿梯度上升方向求解极大值的一种方法。


    二、众所周知,我们从山顶下山,想要求得到山脚路程最短的一条路径,那么我们每次都应该沿着最陡峭的方向下山。
下山问题即我们这里所说的梯度下降问题。最陡峭的方向即为函数斜率绝对值最大的方向。那么,为什么沿斜率方向函数值下降的最快呢?我们可以运用高等数学的知识来证明这个结论。
    若函数z=f(x,y)的增量与pp'两点切线距离之比在p'沿着方向趋于p时,趋于零极限存在,则称函数在p点沿着方向的方向导数,表示为:


    对函数z求偏导,对x有:
   对y有:



   则

    设有向量,和向量

    则上式可写成如下形式(其中θ为两向量之间的夹角):


   当θ=kπ时,取得极值:
   由此可知,当下降方向与斜率方向相同(相反)时,其上升(下降)速度最快。


   三、现在,我们设有一组样本点(xi,yi),由该组样本点,我们可以得到一个预测函数h(x),设样本的实际函数y与预测函数h(x)之间的差值的平方为J(x),表示为:

   要想使得h(x)与实际函数y拟合,就要使得J(x)取得最小值,这里就要用到梯度下降算法。
   设定θ的初值,以及下降的步长ɑ,沿着斜率方向下降,以求得J(x)最小值,利用以下公式对θ的值进行更新


    每下降一次,θ的值更新一次,直到J(x)取得最小值时,θ才停止更新,此时的θ使得预测函数h(x)与实际函数y拟合最好,即为函数h(x)的理想值。


   
   四、梯度下降算法又有批量梯度下降算法和随机梯度下降算法两种:
   
(1)批量梯度下降算法: 
   批量梯度下降算法在迭代过程中要利用到所有的样本,其迭代公式如下:




  利用批量梯度下降法得到的是一个全局最优解,但是每迭代一步,都要用到训练集所有的数据,如果m很大,那么这种方法的迭代速度就不理想。

批量梯度下降算法代码如下:



运行结果如下:



(2)随机梯度下降算法:
   随机梯度下降是通过每个样本来迭代更新一次,如果样本量很大的情况(例如几十万),那么可能只用其中几万条或者几千条的样本(每次迭代随机选取一个样本点,只是迭代次数比批量梯度下降要多),就已经将迭代到θ最优解了。
   对于随机梯度下降算法,将J(x)表示成以下形式:



(注:cost为costfunction函数)

   每个样本的损失函数,对θ求偏导得到对应梯度,来更新θ:
   
   
随机梯度下降算法代码:


运行结果:


(3)批量梯度下降算法与随机梯度下降算法的比较:  

   1、批量梯度下降---最小化所有训练样本的损失函数,使得最终求解的是全局的最优解,即求解的参数是使得风险函   数最小。

   2、随机梯度下降---最小化每条样本的损失函数,虽然不是每次迭代得到的损失函数都向着全局最优方向, 但是大     的整体的方向是向全局最优解的,最终的结果往往是在全局最优解附近。


   五、梯度下降算法中步长α取值问题

   如果步长ɑ,步子太小,迭代很多次都可能到不了终点:而步长太大,可能越跑越远,出现之字下降。
   解决方法:
   1.手动测试法
   2.固定步进
   3.步长衰减
   4.自适应步长



1 0