许多学习机器学习的小伙伴对于梯度下降这个概念并不陌生,下面就让我来和大家分享一下我最近学到的梯度下降算法。我是从吴恩达老师的机器学习课程上学习相关内容的。
一、梯度下降概念
梯度下降算法主要是使用机器学习,通过不断迭代计算函数的梯度,判断该点某一方向和目标点之间的距离,最终求得最小的损失函数和相关参数,为模型建立基础。
- 梯度下降是一种广泛用于求解线性和非线性模型最优解的迭代算法,它的中心思想在于通过不断迭代,调整使得损失函数的参数,使损失最小化。
- 损失函数是一个自变量为算法的参数,函数值为误差值的函数。一般用字母J来表示。
- 学习率(a)是一个参数,就是梯度下降的幅度,学习率越大,每一次迭代梯度下降的幅度就越大(步子就越长),反之结果相反。
所以梯度下降就是去找损失函数J最小的相对应的参数值。
二、梯度下降
可以通过下面这一张图片来讲解,每一个交叉都是一个点,纵坐标是损失函数J的值,理论上我们需要找到损失函数值最小的点。假设我们从某一个点出发(这里假设是在最上面的点出发),我们每到一个点,就判断这个点最佳的下降点,就是下降幅度最大的方向,然后往这个方向按照特定的学习率下降。如图所示,这条路径就是从起始点不断梯度下降,知道无限接近目标最低点。
梯度下降的公式如下:
当找到J()最小值时,对应的就是我们最开始线性回归函数的最佳参数。
其中,是原来线性预测函数的参数值,是学习率,函数是损失函数,:=是赋值符号,类似于c语言里面的赋值号。这条公式,通过后面的的梯度不断下降,得到最好的参数值,我们的目标就是求最小损失函数时的参数值,以达到最好的回归预测效果。类似于下图,一个找的值。 顺带也介绍一下高线图,每一个椭圆线上的所有值相等,最小的圈子值最小。
三、实现步骤
前置知识
3.1 决定模型的假设函数以及损失函数
首先我们要确定模型的假设函数,即回归函数,有一阶线性函数,二阶函数等等。比如对于线性回归,假设函数表示为
其中为模型参数,为每个样本的n个特征值。这个表示可以简化,我们增加一个特征 ,这样既即有:
我们对于上面的假设函数,设定损失函数为:
3.2 初始化参数
主要是初始化,算法终止距离以及步长。在没有任何先验知识的时候,我喜欢将所有的初始化为0, 将步长初始化为1。在调优的时候再优化。
3.3 梯度下降优化
1)确定当前损失函数的梯度也就是损失函数关于的导数,即:
2)用步长乘以损失函数的梯度,得到当前位置下降的距离,即:
对应于前面登山例子中的某一步。
3)确定是否所有的,梯度下降的距离都小于,如果小于则算法终止,当前所有的
即为最终结果。否则进入步骤4。
4)更新所有的,其更新表达式如下:
。
更新完毕后继续转入步骤1。
详解步骤四,在我们前面3.1所举的例子中,我们的样本设置为、.... 表示数据集中第i个样本。损失函数如下:
我们将其进行求偏导数:
则梯度的更新公式如下:
带入进行不断优化,梯度下降,则能无限接近损失函数最小值(即求得目标假设函数的最佳参数)