梯度下降算法
这篇博客更加详细,以下只是我个人的理解
梯度下降算法是一种优化算法,通过梯度下降找到函数最小值时的自变量值。
其基本思想是沿着梯度方向的反方向更新参数,直到逼近函数的极值或者函数值足够小,或者是到达最大迭代次数。
- 目标函数
- 求目标函数的导数和梯度值
- 沿着梯度方向的反方向更新参数
- 重复直到满足条件
以线性回归为例,通过找均方差损失函数最小值,得到最优的权重。
目标函数就是损失函数,求其导数的到关于权重的线性方程,根据权重的具体的数值求得当前的梯度值,得到梯度值后沿着梯度的反方向更新权重参数,而后重复,直到损失函数的损失值满足预设的条件。
关于导数和梯度值。
导数
导数值的大小是沿着一个点的切线的斜率值,描述的函数在该点的瞬时变化率,值越大,函数变化越快。
导数的方向是函数值增加最快的方向。如开口向上的二次函数
图中的两个向量的方向就对应了抛物线中的点的导数的方向,
沿着方向,函数值增加最快(这里的向量只代表导数方向)
梯度
在多变量函数中,梯度是一个向量,向量有方向,梯度的方向就指出了函数在给定点的上升最快的方向
如在a(x, y) = x² / 4 + y² / 3函数中
梯度就是对各个变量求偏导,而后合并为一个向量,有大小有方向。
通过对图像做平行于xoz和yoz的平面,平面和函数相交的抛物线就是一个变量不变,另一变量变化,导致函数值变化的函数图像。(可以理解为降维到两个变量时函数的变化)通过分别对其变量求导数,可以得到两个向量,对向量进行运算,就可以得到函数的梯度,是一个有大小有方向的向量。
单个变量来看,沿着向量的方向,函数值变大最快,同时考虑多个变量,就是对多个变量的导数方向进行合并,做向量加法,得到的向量就是该点的梯度。
沿着该梯度,函数值增加最快,分解到各自的维度,就是多个变量一同增加减少,参数的值也就更新了。
沿着梯度方向的反方向,不断的迭代收敛,最终会逼近函数的最小值,最小值的变量,也就是所求的权重值。
a(x, y) = x² / 4 + y² / 3这里的x,y就相当于两个权重
w
1
,
w
2
w_1,w_2
w1,w2
两个维度的分量(红色,绿色)和为黄色的梯度(这里只表示方向,并不指示大小,黄色方向并不一定是该点的梯度方向)
梯度下降算法的核心就是沿着梯度方向的反方向进行权重变量的更新,直到目标函数,损失函数的最小值。
更新梯度时,乘以一定的系数,这个系数就被称为学习率。
直接减去梯度的值,在接近函数的最低点时,可能会过大,直接越过最低点,导致震荡。通过引入学习率,可以缓解这样的问题。后序会有参数更新的优化器,参数的更新也不仅指原始的学习率和梯度值,会引入其他的参数跟新公式。