【原创】batch-GD, SGD, Mini-batch-GD, Stochastic GD, Online-GD -- 大数据背景下的梯度训练算法

机器学习中梯度降低(Gradient Descent, GD)算法只须要计算损失函数的一阶导数,计算代价小,很是适合训练数据很是大的应用。算法

梯度降低法的物理意义很好理解,就是沿着当前点的梯度方向进行线搜索,找到下一个迭代点。可是,为何有会派生出 batch、mini-batch、online这些GD算法呢?机器学习

原来,batch、mini-batch、SGD、online的区别在于训练数据的选择上:函数

  batch mini-batch Stochastic Online
训练集 固定 固定 固定 实时更新
单次迭代样本数 整个训练集 训练集的子集 单个样本 根据具体算法定
算法复杂度 通常
时效性 通常(delta 模型) 通常(delta 模型)
收敛性 稳定 较稳定 不稳定 不稳定

 

1. batch GD学习

每次迭代的梯度方向计算由全部训练样本共同投票决定,ip

batch GD的损失函数是:it

\[J(\theta ) = \frac{1}{{2m}}\sum\limits_{i = 1}^m {{{({h_\theta }({x^{(i)}}) - {y^{(i)}})}^2}} \]io

训练算法为:table

\[\begin{array}{l}
repeate\{ \\
\theta : = \theta - \alpha \frac{1}{m}\sum\limits_{i = 1}^m ( {h_\theta }({x^{(i)}}) - {y^{(i)}})x_j^{(i)}\\
\}
\end{array}\]ast

什么意思呢,batch GD算法是计算损失函数在整个训练集上的梯度方向,沿着该方向搜寻下一个迭代点。”batch“的含义是训练集中全部样本参与每一轮迭代。互联网

2. mini-batch GD

batch GD每一轮迭代须要全部样本参与,对于大规模的机器学习应用,常常有billion级别的训练集,计算复杂度很是高。所以,有学者就提出,反正训练集只是数据分布的一个采样集合,咱们能不能在每次迭代只利用部分训练集样本呢?这就是mini-batch算法。

假设训练集有m个样本,每一个mini-batch(训练集的一个子集)有b个样本,那么,整个训练集能够分红m/b个mini-batch。咱们用\(\omega \)表示一个mini-batch, 用\({\Omega _j}\)表示第j轮迭代中全部mini-batch集合,有:

\[\Omega  = \{ {\omega _k}:k = 1,2...m/b\} \]

那么, mini-batch GD算法流程以下:

\[\begin{array}{l}
repeate\{ \\
{\rm{ }}repeate\{ \\
{\rm{ for each }}{\omega _k}{\rm{ in }}\Omega :\\
{\rm{ }}\theta : = \theta - \alpha \frac{1}{b}\sum\limits_{i = 1}^b ( {h_\theta }({x^{(i)}}) - {y^{(i)}}){x^{(i)}}\\
{\rm{ }}\} for(k = 1,2...m/b)\\
\}
\end{array}\]

3. Stochastic GD (SGD)

 随机梯度降低算法(SGD)是mini-batch GD的一个特殊应用。SGD等价于b=1的mini-batch GD。即,每一个mini-batch中只有一个训练样本。

4. Online GD

随着互联网行业的蓬勃发展,数据变得愈来愈“廉价”。不少应用有实时的,不间断的训练数据产生。在线学习(Online Learning)算法就是充分利用实时数据的一个训练算法。

Online GD于mini-batch GD/SGD的区别在于,全部训练数据只用一次,而后丢弃。这样作的好处是能够最终模型的变化趋势。好比搜索广告的点击率(CTR)预估模型,网民的点击行为会随着时间改变。用batch算法(天天更新一次)一方面耗时较长(须要对全部历史数据从新训练);另外一方面,没法及时反馈用户的点击行为迁移。而Online Leaning的算法能够实时的最终网民的点击行为迁移。

 

Ref:

1. http://en.wikipedia.org/wiki/Gradient_descent

相关文章
相关标签/搜索