随机梯度下降法(Stochastic Gradient Descent)和批量梯度下降法(Batch Gradient Descent )总结

公式来源于:http://blog.csdn.net/lilyth_lilyth/article/details/8973972
参考知乎:https://zhuanlan.zhihu.com/p/25765735

梯度下降法常用于最小化风险函数或者损失函数,分为随机梯度下降(Stochastic Gradient Descent)和 批量梯度下降(Batch Gradient Descent )。除此之外,还有梯度上升法(Gradient Ascent),应用于极大似然估计,与下降法区别就是朝着梯度上升还是下降的方向迭代。

设hθ(x)是预测值,其中θ是模型的参数,J(θ)是损失函数,对于最小化损失函数问题,采用梯度下降法来求解。

1、批量梯度下降法:
假设J(θ)是平方损失函数,其中m是样本个数,i表示第i个样本,yi是真实值
随机梯度下降法(Stochastic Gradient Descent)和批量梯度下降法(Batch Gradient Descent )总结_第1张图片

J(θ)对每一个θj求偏导,j指的是第j个参数
随机梯度下降法(Stochastic Gradient Descent)和批量梯度下降法(Batch Gradient Descent )总结_第2张图片

按照每个参数θj的负梯度方向来更新
随机梯度下降法(Stochastic Gradient Descent)和批量梯度下降法(Batch Gradient Descent )总结_第3张图片

批量梯度下降得到一个全局最优解,但是每迭代一步,都要用到训练集所有的数据;
如果m很大,迭代速度很慢。所以,这就引入了随机梯度下降的方法。
收敛方向大概是这样(等高线是损失函数):
随机梯度下降法(Stochastic Gradient Descent)和批量梯度下降法(Batch Gradient Descent )总结_第4张图片

2、随机梯度下降法:
每次迭代只选取一个样本来更新θj
这里写图片描述
收敛方向大概是这样(哈哈哈哈……)
随机梯度下降法(Stochastic Gradient Descent)和批量梯度下降法(Batch Gradient Descent )总结_第5张图片

总结与比较:
1、收敛速度:随机梯度下降收敛速度比批量梯度下降慢,因为随机梯度下降噪音较多,并不是每次迭代都朝着整体最优化方向;
2、计算速度:随机梯度下降计算速度比批量梯度快,因为不需要用到所有样本就能达到最优解。
3、最优解:
批量梯度下降是min所有训练样本的损失函数,使得最终求解的是全局的最优解,即求解的参数是使得风险函数最小。随机梯度下降是min每次选取的样本的损失函数,虽然每次迭代得到的损失函数并不一定朝着全局最优方向, 但是整体方向是逼近全局最优解的,最终的结果往往是在全局最优解附近。

当损失函数(目标函数)是凸函数时,求得的是全局最优解。

补充:除此之外,还有个min-batch 小批量梯度下降法MBGD
意思就是在以上两种方法之间折中,每次用到一个batch的样本,根据不同的任务,选取batch中样本的个数。

三种梯度下降方法的总结

1.批梯度下降每次更新使用了所有的训练数据,最小化损失函数,如果只有一个极小值,那么批梯度下降是考虑了训练集所有数据,是朝着最小值迭代运动的,但是缺点是如果样本值很大的话,更新速度会很慢。

2.随机梯度下降在每次更新的时候,只考虑了一个样本点,这样会大大加快训练数据,也恰好是批梯度下降的缺点,但是有可能由于训练数据的噪声点较多,那么每一次利用噪声点进行更新的过程中,就不一定是朝着极小值方向更新,但是由于更新多轮,整体方向还是大致朝着极小值方向更新,又提高了速度。

3.小批量梯度下降法是为了解决批梯度下降法的训练速度慢,以及随机梯度下降法的准确性综合而来,但是这里注意,不同问题的batch是不一样的,听师兄跟我说,我们nlp的parser训练部分batch一般就设置为10000,那么为什么是10000呢,我觉得这就和每一个问题中神经网络需要设置多少层,没有一个人能够准确答出,只能通过实验结果来进行超参数的调整。

你可能感兴趣的:(Machine,Learning)