学习一个算法,首先就想了解它的作用。我们使用训练数据让机器去训练,无论结果是什么,我们会得到一个模型(或好或坏),那么梯度下降算法就是用来对这个模型来进行优化的。
先来了解几组概念:
梯度:在微积分里面,对多元函数的参数求∂偏导数,把求得的各个参数的偏导数以向量的形式写出来,就是梯度。梯度向量代表着函数在那一点变化的快慢,这样我们就能找到最大值/最小值。
步长(Learning rate):步长决定了在梯度下降迭代的过程中,每一步沿梯度负方向前进的长度。用上面下山的例子,步长就是在当前这一步所在位置沿着最陡峭最易下山的位置走的那一步的长度。
特征(feature):指的是样本中输入部分,比如2个单特征的样本(,),(,),则第一个样本特征为,第一个样本输出为。
假设函数(hypothesis function):在监督学习中,为了拟合输入样本,而使用的假设函数,记为hθ(x)。比如对于单个特征的m个样本(,)(i=1,2,...m),可以采用拟合函数如下:
损失函数(loss function):为了评估模型拟合的好坏,通常用损失函数来度量拟合的程度。损失函数极小化,意味着拟合程度最好,对应的模型参数即为最优参数。在线性回归中,损失函数通常为样本输出和假设函数的差取平方。比如对于m个样本(,)(i=1,2,...m),采用线性回归,损失函数为:
梯度下降算法描述:
先决条件 ——假设函数和损失函数都已给出(假设如上);初始化相关参数,假设步长为1,所有(假设为n个)初始化为0(只是参数,没有特殊含义,算法就是为了优化参数),然后给出算法终止距离
1、确定当前位置下损失函数的梯度,也就是损失函数对(1,2,3....n)求偏导,这样我们就能找到下降最快的方向
2、求出的偏导乘以步长,得到下降的距离L(1,2,3....n)
3、将距离L(1,2,3....n)与作比较,所有的L(1,2,3....n)若均小于,算法终止;若不是则进入步骤4
4、更新所有的(1,2,3....n),更新完毕,继续转到步骤一
在步骤四中我们可以看到,对于的更新,我们采用的是所有的样本值,如果我们只采用一个样本值,那么这个算法就是随机梯度下降法:
如果我们采用所有样本中的一部分样本,那就是小批量梯度下降法:
算法调优:损失函数的越小,代表拟合度越高,为了得到损失函数的极小值,我们还可以对算法进行调参。在这个算法中,我们假设步长为1,所有初始化为0,这里可以对使用不同的初始值,最终是为了得到损失函数的极小值;样本特征值的选取也会影响,可以采用归一化的方法来减少迭代次数
参考链接:http://www.cnblogs.com/pinard/p/5970503.html