梯度下降(Gradient Descent)小结
**梯度:**在微积分里面,对多元函数的参数求∂偏导数,把求得的各个参数的偏导数以向量的形式写出来,就是梯度。沿着梯度向量的方向,函数增长最快,反向减少最快。
**梯度下降与梯度上升:**在最小化损失函数时,可以通过梯度下降法来一步步的迭代求解,得到最小化的损失函数,和模型参数值。反过来,如果我们需要求解损失函数的最大值,这时就需要用梯度上升法来迭代了。
梯度下降法算:
起点(山顶)找最陡峭的位置向下走一步(梯度的负方向),继续求解当前位置梯度,走最陡峭的下山,走一步看一步。梯度下降不一定能够找到全局的最优解,有可能是一个局部最优解。如果损失函数是凸函数,梯度下降法得到的解就一定是全局最优解。
概念:
步长(Learning rate):延梯度每一步长度
特征(feature):指的是样本中输入部分
假设函数(hypothesis function):在监督学习中,为了拟合输入样本,而使用的假设函数,记为。
损失函数(loss function):为了评估模型拟合的好坏,通常用损失函数来度量拟合的程度。损失函数极小化,意味着拟合程度最好,对应的模型参数即为最优参数。 计算结果和实际结果的方差。其中表示第i个样本特征,表示第i个样本对应的输出,为假设函数。
梯度下降的详细算法
先决条件: 确认优化模型的假设函数和损失函数。
比如对于线性回归,假设函数表示为 , 其中$ \theta_{j}$ (j = 0,1,2… n)为模型参数, (j = 0,1,2… n)为每个样本的n个特征值。这个表示可以简化,我们增加一个特征 ,这样。同样是线性回归,对应于上面的假设函数,损失函数为:, 如果前面有系数参考线性回归损失函数为什么要用平方形式。
算法相关参数初始化:主要是初始化,算法终止距离以及步长。在没有任何先验知识的时候,我喜欢将所有的初始化为0, 将步长初始化为1。在调优的时候再优化。
算法过程:
1.确定损失函数,对:.
2.确定步长:.
3.确定是否所有的,梯度下降的距离都小于,如果小于则算法终止,当前所有的(i=0,1,…n)即为最终结果。否则进入步骤4.
4.更新所有的,对于,其更新表达式如下。更新完毕后继续转入步骤1..
梯度下降的算法调优:
- 算法的步长选择。在前面的算法描述中,我提到取步长为1,但是实际上取值取决于数据样本,可以多取一些值,从大到小,分别运行算法,看看迭代效果,如果损失函数在变小,说明取值有效,否则要增大步长。前面说了。步长太大,会导致迭代过快,甚至有可能错过最优解。步长太小,迭代速度太慢,很长时间算法都不能结束。
- 算法参数的初始值选择。 初始值不同,获得的最小值也有可能不同,因此梯度下降求得的只是局部最小值;当然如果损失函数是凸函数则一定是最优解。由于有局部最优解的风险,需要多次用不同初始值运行算法,关键损失函数的最小值,选择损失函数最小化的初值。
3.归一化。由于样本不同特征的取值范围不一样,可能导致迭代很慢,为了减少特征取值的影响,可以对特征数据归一化,也就是对于每个特征x,求出它的期望和标准差std(x),然后转化为:
这样特征的新期望为0,新方差为1,迭代次数可以大大加快。
转载梯度下降(Gradient Descent)小结