1. 从梯度下降开始

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

  • 什么是梯度下降?

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

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

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

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

符号解释:

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

图片可能更加直观,请原谅我拙劣的画技,原始图片取自课程课件:
梯度下降总结(BGD ,SGD, MBGD)

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

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

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

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

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

for j=1 to m {
θi:=θiα(hθ(x(j))y(j))xi(j) \theta_{i}:=\theta_{i} - \alpha{(h_{\theta} (x^{(j)}) - y^{(j)}) \bullet x_{i}^{(j)}} (forfor allall ii )
}

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

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

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

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

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

正在学习机器学习吗?欢迎关注公号「MachineLearning学习之路」,在学习之路上多一个战友,扫描下方二维码带走我:
梯度下降总结(BGD ,SGD, MBGD)

相关文章:

  • 2022-01-30
  • 2022-12-23
  • 2021-08-07
  • 2021-05-16
猜你喜欢
  • 2021-12-27
  • 2021-09-30
  • 2021-10-18
  • 2021-11-07
  • 2021-07-03
  • 2021-01-21
相关资源
相似解决方案