机器学习中梯度降低(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