XGBoost梯度下降 梯度下降更新_深度学习


首先是对感知器的简单回顾,假设现有的训练集为 D,共有 n 个训练数据,每个数据都有 m 个输入特征和一个输出标签。一个 epoch 就是遍历一次整个训练集,对于每一个训练数据,都计算其预测、计算误差、更新参数。

XGBoost梯度下降 梯度下降更新_机器学习_02


在一个 epoch 中,每次针对一个训练数据进行参数更新的方法,称为在线方法或者随机梯度下降;而在一个 epoch 中将参数在每个训练数据上需要更新的值记录下来,最后叠加在一起再对参数进行更新的方法,称为批量方法。

XGBoost梯度下降 梯度下降更新_XGBoost梯度下降_03


最常用的是这两种方法的折中方法:小批量方法。它的优点有三个:

1、选择子集而不是单个训练数据,可以利用向量化来进行并行计算,加快计算速度;

2、相比于单个训练数据,子集的噪声更加小;

3、批量方法也拥有以上两个优点,但是训练数据集一般都非常大,用整个批量的速度太慢,且适当的噪声可以帮助我们跳出局部最小值。

XGBoost梯度下降 梯度下降更新_机器学习_04


用感知器的视角来看待线性回归,就相当于是用恒等函数作为激活函数。

XGBoost梯度下降 梯度下降更新_人工智能_05


线性回归有闭式解,但是对大型数据集的矩阵进行求导也是非常困难的,此时梯度下降就派上用场了。

XGBoost梯度下降 梯度下降更新_人工智能_06


将线性回归的(随机)梯度下降方法与感知器的学习方法进行比较,可以发现它们十分相似,区别只在于:感知器的激活函数是阈值函数,线性回归的激活函数是恒等函数;感知器直接用误差进行参数更新,线性回归则用负梯度值进行参数更新。

XGBoost梯度下降 梯度下降更新_pytorch_07


线性回归的随机梯度下降方法,既可以用向量化的方法求梯度然后用负梯度值更新参数,也可以用 for 循环的方法求偏导数然后用负偏导数值更新参数,显然前者更优。

XGBoost梯度下降 梯度下降更新_人工智能_08


假设线性回归中使用的凸损失函数是平方误差函数,则其一定存在全局最小值,通过梯度下降可以求得这个值,而更新步骤会同时受到学习率和梯度的影响,学习率决定步长,梯度决定陡峭程度,方向一定是负梯度方向(求最小值)

XGBoost梯度下降 梯度下降更新_机器学习_09


平方损失函数,推导该损失函数对各个权重的偏导数,写在一起即梯度。记住线性回归中的激活函数就是恒等函数,所以导数等于 1。推导过程中使用了两次链式法则。

XGBoost梯度下降 梯度下降更新_XGBoost梯度下降_10


使用均方误差作为损失函数,推导过程同理,就是多求了个平均值而已。

XGBoost梯度下降 梯度下降更新_深度学习_11


最后看下 Adaline,感知器的激活函数是阈值函数,线性回归的激活函数是恒等函数,而 Adaline 的激活函数是恒等函数,但它后面也接上了阈值函数(相当于恒等函数 + 阈值函数)。