机器学习笔记-15(大规模机器学习)

这部分主要是讲超大规模数据下的机器学习优化方法。之前就说过了一个结论”大数据下,各算法差异不明显。”

Machine learning and data

大数据集下的机器学习情况

关于评估机器学习的效果,也就是之前的学习曲线,在这就不多说了,直接说这部分的内容了,这部分东西总的来说不多,也很容易理解。

Learning with large datasets

大规模数据下的学习曲线

课程一共介绍了四个关于大规模机器学习的优化方法,首先来讲第一个Stochastic gradient descent(随机梯度下降法)。

Linear regression with gradient descent

批量梯度下降

之前的线性回归算法中的梯度下降法,如果在数据样本的规模还不是很大的时候,是没有什么问题的,但是一旦数据规模很大的时候,在求偏导的部分会出现运算量巨大的问题,因为这部分需要对每一样本的数据进行累加,数据样本巨大的时候,每一次迭代都要进行这么一次运算是非常费劲的,在这种情况下的方法称之为Batch gradient descent(批量梯度下降)。

Batch gradient descent / stochastic gradient descent

批量梯度下降与随机梯度下降的对比

为了解决这个问题,在此首先介绍随机梯度下降。实现的方法很简单,只需要在原来的批量梯度下降上进行小小的改动即可。亦即每次咱只计算一个样本的Cost并对其进行梯度下降,这样求偏导的时候运算量会变得灰常小,最后把整个样本依次跑完即可。

具体算法实现看下图,在这中情况下,因为下降步伐乱且很小,所以该方法并不能最终收敛于全局最优,只能接近全局最优的一个区域,但这通常都不是一个问题,只要足够逼近全局最优基本上问题不大。

Stochastic gradient descent

随机梯度下降

接下来,讲下一个”mini-batch gradient descent”(小批量梯度下降),看名字应该就大概是怎么个处理方法了。木有错,就是把大规模的数据分别切割成一小份,然后再分别进行梯度下降,这样同样可以在偏导的部分降低运算规模。它跟随机梯度下降的区别就在于,一个每次迭代只折腾一个样本,而小批量梯度下降每次处理的是原样本的一个超小子集。看上去两种方法区别不大,实际上在某种情况下运算速度会比随机梯度下降更快,这个更快的前提是对数据进行良好的向量化(为神马会更快?看到后面就会知道~)!

Mini-batch gradient descent

小批量梯度下降

Mini-batch gradient descent

小批量梯度下降的算法实现

第四节,咱来谈谈随机梯度下降的收敛问题,其实也没什么好讲的,就是判断是否收敛。 方法就是设置一个区间,每迭代多少个样本之后,计算一次样本的cost,然后绘图,介个时候就可以对收敛情况有个大体的了解了。这个区间设置的越大,曲线就会越平滑,但是细节丢失也会越多。

Checking for convergence

检查随机梯度下降收敛情况的方法

Checking for convergence

Cost的收敛曲线

前面咱曾说过随机梯度下降的收敛过程是乱而小的,从而导致无法最终收敛到全局最优,只能大概的到达那一区域。而要解决这个问题,要是将学习速率不断减小,具体可以使用下图中的公式。

Stochastic gradient descent

固定学习速率下的收敛图像

Stochastic gradient descent

学习速率不断减小时的收敛图像

Well,现在来谈谈”online learning”(在线学习)吧。现在这个东西应该是应用的非常广泛了,分析点击流数据还有搜索推荐等。这一方法一般是应用在具备非常大规模数据流的情况下,例如大型网站的点击数据,每秒都有N多的点击数据参数。而咱们机器学习的数据样本就来自于此,不停地迭代流中的数据,每学完一个数据即可丢弃,因为数据非常多,不缺。利用这一点咱们就可以根据各种用户的行为对很多东西进行调整了,算法的整体实现跟随机梯度下降类似,不同的是学习样本不再是固定的,而是不断变化的。。下图是两个具体的应用例子。

Online learning

在线学习例子-1:速递服务的优化

Other online learning example

在线学习例子-2:产品搜索优化

最后,就是map-reduce方法,用于并行运算上,因为有些数据的规模不是单一计算机能吃得消的。具体思想其实跟Mini-batch有点类似,也是为数据分块,然后让每一台计算机负责一块数据样本的学习,后面在中央计算机进行参数汇总,再进行各组参数累加梯度下降。在使用这一方法之前,首先要判断是否可以将其表达为累加梯度下降的形式,不过还好的是,大部分机器学习和优化算法都可以这么表示。有了这个方法,对于很多机器学习算法,咱都可以对其进行并行化处理了,然后再配合良好的数据向量化(很多相关库也用了并行实现),让很多算法的速度更上一个台阶。

Map-reduce

Map-reduce的具体实现思路

map-reduce

多计算机下的Map-reduce

map-reduce and summation over the training set

要首先确定算法是否可以表达为累加梯度下降

Multi-core machines

多核心下的Map-reduce

好吧,写得有点怠慢了。不过大概的内容都点到了。

发表评论

电子邮件地址不会被公开。 必填项已用*标注