梯度下降法
梯度下降法是求解无约束最优化问题的一种最常用的方法,有实现简单的特点。梯度下降法是迭代算法,每一步需要求解目标函数的梯度向量。假设f(x)f(x)是NN为维几里德空间上具有一阶连续偏导数的函数。
符号解释
- 学习率:
- 特征值:x1,x2x1,x2
- 参数:w1,w2w1,w2
- 预测函数:f(x)f(x)假设形式如下:
f(x)=w1x1+w2x2f(x)=w1x1+w2x2- 经验函数:y(x)y(x)
- 其中损失函数(Cost Function)如下:
C(w1,w2)=12n∑(f(x)−y(x))2C(w1,w2)=12n∑(f(x)−y(x))2
求解
简单来说,对于样本中只有一个特征的数据来说也就是预测函数为:
f(x)=(x1)2f(x)=(x1)2那么梯度就是f(x)f(x)对x1x1求导数,而针对多维数据的情况下就是对xx向量求偏导数。
为什么要选择梯度来选择参数的大小,本人觉得这是一个必要条件:因为梯度的方向是函数上升最快的放下,选择局部最优解或者全局最优解就类似与下山要找到一条最短时间路径的山路。针对梯度下降算法的理解,本人觉得梯度决定了人们下山的方法,也就是函数迭代的方法,而学习率aa则决定下山时行走的速度,也就是函数每次增加多少进行迭代。本人觉得实际上就是定义了一个速度,因为速度是一个矢量,梯度的负方向就是下降最快的方向,也就是速度的方向,而学习率则定义了速度的大小。
具体更新策略
- w1=w1−a∂f(w)∂w1w1=w1−a∂f(w)∂w1
- w2=w2−a∂f(w)∂w2w2=w2−a∂f(w)∂w2
如果针对的是凸函数梯度下降算法得到的是全局最优解;如果不是可能得到局部最优解或者全局最优解。
调优
在使用梯度下降时,需要进行调优。哪些地方需要调优呢?
1. 算法的步长选择。在前面的算法描述中,我提到取步长为1,但是实际上取值取决于数据样本,可以多取一些值,从大到小,分别运行算法,看看迭代效果,如果损失函数在变小,说明取值有效,否则要增大步长。前面说了。步长太大,会导致迭代过快,甚至有可能错过最优解。步长太小,迭代速度太慢,很长时间算法都不能结束。所以算法的步长需要多次运行后才能得到一个较为优的值。
2. 算法参数的初始值选择。 初始值不同,获得的最小值也有可能不同,因此梯度下降求得的只是局部最小值;当然如果损失函数是凸函数则一定是最优解。由于有局部最优解的风险,需要多次用不同初始值运行算法,关键损失函数的最小值,选择损失函数最小化的初值。
3.归一化。由于样本不同特征的取值范围不一样,可能导致迭代很慢,为了减少特征取值的影响,可以对特征数据归一化,也就是对于每个特征xx,求出它的期望和标准差std(x)std(x),然后转化为:
x−x¯std(x)x−x¯std(x)这样特征的新期望为0,新方差为1,迭代次数可以大大加快。