大规模机器学习

来源:互联网 发布:linux中vi编辑后退出 编辑:程序博客网 时间:2024/05/16 18:53

知识点

  • 随机梯度下降
  • 小批量梯度下降
  • 调试随机梯度下降算法
  • 在线学习
  • 映射约简

分析

如果训练数据特变庞大,使用批量梯度下降算法就会导致计算量过于沉重,迭代速度非常缓慢的问题,此时,就可以使用考虑随机梯度下降算法来提高学习速度。在使用随机梯度下降算法之前一定要确定训练模型是否真的时候适用于大数据,可以用学习曲线图来分析该模型是否合适。如果是低偏差(low bias),则可以使用更多的数据训练该模型。

随机梯度下降算法与(批量)梯度下降算法对比:
线性回归的梯度下降算法:
代价函数:Jtrain(θ)=12m(hθ(x(i))y(i))2
迭代式:
Repeat{

θj:=θjα1mi=1m(hθ(x(i))y(i))x(i)j

(for every j = 0, …, n)
}

随机梯度下降
使用 cost(θ,(x(i),y(i)))=12(hθ(x(i))y(i))2 替换代价函数项。
代价函数: Jtrain(θ)=1mmi=1cost(θ,(x(i),y(i)))
数据预处理(随机打乱数据)后,进行迭代
Reapeat {
for i = 1, …, m{
θj:=θjα(hθ(x(i))y(i))x(i)j
(for j = 0, …, n)
}
}

可以了解,梯度下降算法每次迭代都会使用全部的样本,是同步更新权重的,即每迭代一次更新一次权重参数;随即梯度下降算法每次迭代也会使用全部的样本,但是它每训练一个样本就更新一次权重。在选区适当的学习速率(alpha)时这两种算法的区别是
1. 梯度下降在迭代前不用随机打乱样本顺序
2. 梯度下降能保证每一次迭代都是递减的;而随机梯度下降只能保证总体上是递减的
3. 梯度下降算法在训练超大数据集时计算量会非常慢(迭代次数多),学习效率低;随机梯度下降则快很多,一般迭代次数在2~100之间;
4. 梯度下降最终会停留在(局部)最优解上;随机梯度下降会在(局部)最优解附近徘徊,徘徊范围与学习速率alpha有关,alpha越小,徘徊范围越小

小批量梯度下降算法是介于随机梯度下降与梯度下降之间的一种算法,它利用了向量并行运算能力进一步提升随机梯度下降算法的运行速度,但在表现上与随机梯度下降算法一致。为了提高模型准确率,可以动态改变学习速率alpha,即随着迭代的增加而降低alpha的值,不过调整alpha值太费事了,性能提升的也不一定很大,所以很多人都不会动态调整alpha值。
算法公式,假设每次使用b = 10个数据更新权重,总共有1000个训练样本。(b为小批量数(min-batch size)一般取值为2~100)
代价函数: Jtrain(θ)=1mmi=1cost(θ,(x(i),y(i)))
Repeat{
for i = 1, 11, 21, 31, …, 991 {

θj:=θjα110k=1i+9(hθ(x(k))y(k))x(k)j

(for every j = 0, …, n)
}
}

* 调试随机批量下降方法首先要画出学习曲线,调整超参学习曲线表现正常。

在线学习是随机梯度下降算法的一种应用,针对流动性很大数据进行学习的一种算法,它的核心算法是针对一个样本进行训练,跟新权重后就丢弃这个样本。比如一个购物网站每天都有千万条数据产生,基本上相当于拥有无限的训练数据,所以不可能所有数据迭代学习,使用在线学习算法就可以解决这种问题。而且在线学习还能根据数据的变化自动调整学习模型。如果是一个小型网站,流动数据不大,就不适合使用在线学习算法,完全可以使用批量梯度下降算法来训练模型。

映射约简核心是将大规模数据分成多个小规模数据,通过一个中心调度机器将多台数据处理机器调度起来完成大规模数据的学习。使用映射约减之前一定要想清楚使用的机器学习算法是否可以表示为训练样本的某种求和。比如,在批量梯度下降算法中使用的是同步更新权重的方法,可以将一次迭代中的求和运算分配给不同的机器,并行完成求和运算,计算完成后再将各个和相加完成整体求和任务;而随机批量梯度下降算法中每使用一个样本就会更新一次权重,在一次的迭代中,求和部分是连续的,不能分配给不同机器并行运算。所以批量梯度下降算法可以使用映射约减提高运行速度,随机梯度下降算法不能使用映射约减。需要注意的是映射约减可以在一台机器上进行,只要该机器是多cpu或多核心的机器就行。

术语

  • stochastic gradient descent, 随机梯度下降
  • map-reduce, 映射约简
0 0
原创粉丝点击