美文网首页
梯度下降学习总结(BGD ,SGD, MBGD)

梯度下降学习总结(BGD ,SGD, MBGD)

作者: Zero黑羽枫 | 来源:发表于2019-02-23 20:04 被阅读0次

1. 从梯度下降开始

这两天学习了机器学习课程的第二课,课程内容是围绕梯度下降展开的,下面就我的学习内容做一个总结。

  • 什么是梯度下降?

梯度下降 (Gradient Decent) 是优化算法的一种,其思想是让损失函数沿着梯度的方向下降, 以最快的速度取到最小值。为啥是沿梯度的方向?因为梯度 (gradient) 就是函数变化最快的方向,贴一个梯度的定义: 梯度-维基百科,想深入了解的同学可以自取。

2. 批梯度下降 (Batch Gradient Decent)

批梯度下降是梯度下降最基本的形式,下面尝试在Linear Regression算法中使用批梯度下降来优化他的损失函数。

作为新手,在理解算法的时候,很多时候难住我们的不是逻辑,而是各种千奇百怪的符号,所以我先把公式中需要用到的符号列在这里,以消除符号的干扰。

符号解释:

  • h(x) 学习算法的假设函数,本例中的学习算法是Linear Regression
  • x_{i} 数据集的第 i 个特征
  • \theta_{i} 假设函数对第 i 个特征的系数
  • n 数据集的特征数
  • m 数据集的样本数目
  • (x^{(i)},y^{(i)}) 第 i 条训练样本

图片可能更加直观,请原谅我拙劣的画技,原始图片取自课程课件:


在这里插入图片描述

Linear Regression 的假设函数为:
h(x) = \sum_{i=0}^{n}{\theta_{i}x_{i}}
其损失函数:
J(\theta)=\frac{1}{2} \sum_{i=1}^{m}{(h_{\theta} (x^{(i)}) - y^{(i)}) ^ 2}
在给定训练集的情况下,(x, y) 均已知,损失函数只与 \theta有关,记为 J(\theta) , 前面的系数 \frac{1}{2} 是为了求导方便。

现在的目标是使损失函数最小,即求 min_{\theta} J(\theta) 。终于轮到主角出场了,使用梯度下降法来求解 min_{\theta} J(\theta) 。下降的过程需要起点和终点,期望的终点自然是最小值,那么起点在哪里呢?这里给 \theta 一个初始值,whatever,就假设它为0(这里是一个向量)吧,然后不断更新 \theta 的值使 J(\theta) 变小。如何更新?当然是沿梯度的方向更新啦:
\theta_{i}:= \theta_{i} - \alpha\frac{\partial J(\theta)}{\partial \theta_{i}}
更新的写法跟课程中的相同,:=符号表示赋值, \alpha 是学习率/步长/训练速度。

下面推导在只有一组训练样本的情况下偏导数:
\frac{\partial J(\theta)}{\partial \theta_{i}} = \frac{\partial}{\partial \theta_{i}} \frac{1}{2} (h_{\theta} (x) - y)^{2}
=(h_{\theta} (x) - y) \bullet \frac{\partial}{\partial \theta_{i}}(\theta_{0}x_{0} + \theta_{1}x_{1} + ...+\theta_{i}x_{i}+...\theta_{n}x_{n} -y )
=(h_{\theta} (x) - y) \bullet x_{i}
有 m 组训练样本时,情况如下:
\frac{\partial J(\theta)}{\partial \theta_{i}} = \frac{\partial}{\partial \theta_{i}} \frac{1}{2}\sum_{j=1}^{m}{ (h_{\theta} (x^{(j)}) - y^{(j)})^{2}}
=\sum_{j=1}^{m}{\frac{\partial}{\partial \theta_{i} }} \frac{1}{2} (h_{\theta} (x^{(j)}) - y^{(j)})^{2}
=\sum_{j=1}^{m}{(h_{\theta} (x^{(j)}) - y^{(j)}) \bullet x_{i}^{(j)}}
将其带入 \theta_{i}:= \theta_{i} - \alpha\frac{\partial J(\theta)}{\partial \theta_{i}} 可得计算方式。从上式可以看出,在每次更新 \theta 时,都需要计算 \sum_{j=1}^{m},意味着需要遍历所有的训练样本,这将带来庞大的计算量,在样本数量巨大的情况下会更为明显,如何避免这个问题?这个时候SGD出现了。

3. 随机梯度下降 (Stochastic Gradient Decent)

SGD是为了避免BGD在样本数量大时带来的巨大计算量。巨大的计算量来自每次迭代对整个训练集的遍历,从这里出发,SGD每次更新只选择一个样本:

for j=1 to m {
\theta_{i}:=\theta_{i} - \alpha{(h_{\theta} (x^{(j)}) - y^{(j)}) \bullet x_{i}^{(j)}}(for all i )
}

俗话说有得必有失,因为每次只选取一个样本,SGD下降的过程可能没有BGD那样一帆风顺,在“下山”的路上它可能会这里走走那里瞧瞧,anyway,我们关心的其实只是它能够带我们到达终点而且它够快。也因为每次只选取一个样本,它可能会失去对数据模型的精准刻画,这就导致在遇到噪声时,它可能会把我们带跑偏,即陷入局部最优解。

刚刚是谁说的有得必有失,MBGD表示,我全都要。

4. 小批量随机梯度下降 (Mini-batch Stochastic Gradient Decent)

MBGD吸收了BGD和SGD的优点,SGD选择的是一个样本,而MBGD选择将样本划分为多个小块,将每个小块看作是一个样本,这样即保证了对数据模型的精准刻画,也不会太慢。

以上是对梯度下降算法的理论知识的总结。

最后,求赞求关注,欢迎关注我的微信公众号[MachineLearning学习之路] ,深度学习 & CV 方向的童鞋不要错过!!

相关文章

网友评论

      本文标题:梯度下降学习总结(BGD ,SGD, MBGD)

      本文链接:https://www.haomeiwen.com/subject/aatmyqtx.html