说明:以下内容为学习刘建平老师的博客所做的笔记
梯度下降(Gradient Descent)小结www.cnblogs.com因为个人比较喜欢知乎文章的编辑方式,就在这里边记笔记边学习,喜欢这个博客的朋友,可以去刘建平老师的博客follow,老师的github链接:
ljpzzz/machinelearninggithub.com梯度下降法是与最小二乘法并驾齐驱的一种无约束优化问题方法,在机器学习求解模型参数中常常会用到。
一、什么是梯度以及梯度的意义?
在微积分中,对多元函数的参数求偏导,把求导后的结果(各个参数的偏导数)以向量的形式表达出来就是梯度。比如
那么梯度的意义又是什么?从几何的角度,梯度就是在这一点函数增加最快的方向,反之梯度的相反方向就是函数减小最快的方向。例如对于
这里举一个爬山的例子:
比如我们在爬一座山,我们现在在初始点所标注的位置,现在想要尽快下山,应该用什么样的方式呢?我们需要朝着初始点的梯度负方向前进一步,然后在在新的初始点位置继续向梯度负方向前进一步,就这样一步又一步,我们可能会达到一个局部的山峰最低处。如果这个山峰是凸函数形状的,我们这样一步又一步地走下去,可能会走到山脚。
二、梯度下降的相关概念
步长:步长决定了在梯度下降迭代的过程中,每一步沿梯度负方向前进的长度。用上面下山的例子,步长就是在当前这一步所在位置沿着最陡峭最易下山的位置走的那一步的长度。
特征:样本的输入部分,如
假设函数:在监督学习中,为了拟合输入的样本,而建立的拟合函数
损失函数:为了评估模型拟合的好坏,通常用损失函数来度量拟合的程度。损失函数极小化,意味着拟合程度最好,对应的模型参数即为最优参数。在线性回归中,损失函数通常为样本输出和假设函数的差取平方。比如对于m个样本
三、梯度下降法实现过程(代数法)
1.先决条件:确定假设函数和损失函数
对于线性回归函数,我们设假设函数为
这里为了方便运算,我们设
2.算法过程:
1)确定损失函数的梯度,对于
2)用步长乘以损失函数的梯度,得到当前位置下降的距离,即
3)确定是否所有的
4)更新所有的,对于
5)对于线性回归预测函数,如下演示:
对
而步骤四对应的公式为:
这里的
三、梯度下降法的调优
在使用梯度下降时,需要进行调优。哪些地方需要调优呢?
1. 算法的步长选择。在前面的算法描述中,提到取步长为1,但是实际上取值取决于数据样本,可以多取一些值,从大到小,分别运行算法,看看迭代效果,如果损失函数在变小,说明取值有效,否则要增大步长。前面说了。步长太大,会导致迭代过快,甚至有可能错过最优解。步长太小,迭代速度太慢,很长时间算法都不能结束。所以算法的步长需要多次运行后才能得到一个较为优的值。
2. 算法参数的初始值选择。 初始值不同,获得的最小值也有可能不同,因此梯度下降求得的只是局部最小值;当然如果损失函数是凸函数则一定是最优解。由于有局部最优解的风险,需要多次用不同初始值运行算法,关键损失函数的最小值,选择损失函数最小化的初值。
3.归一化。由于样本不同特征的取值范围不一样,可能导致迭代很慢,为了减少特征取值的影响,可以对特征数据归一化。
先写到这里吧,后面继续更新。