机器学习:大规模机器学习 学习笔记

500 阅读6分钟

当需要处理很大的数据集时,我们可以采用以下两种方法:第一种是随机梯度下降,第二种是减少映射。

随机梯度下降

批量梯度下降的代价函数为

image.png 随机梯度下降的代价函数为

image.png

随机梯度下降的具体过程为:

  1. 随机打乱所有数据,即将所有m个训练样本重新随机排列,以保证我们在遍历训练集时对训练样本的访问是以随机顺序排列的;
  2. 依次遍历整个训练集。

image.png

随机梯度下降跟批量梯度下降不同之处在于,随机梯度下降不需要对全部m个样本求和来得到梯度项,而是只需要对单个训练样本求出梯度项。在这个过程中,已经开始优化参数了,不需要对所有m 个训练集都遍历一遍。

随机梯度下降和批量梯度下降的不同

  1. 随机梯度下降运行速度快。当使用批量梯度下降时,需要同时考虑所有训练样本数量,其收敛过程会倾向于一条近似的直线,直到找到全局最小点,如下图中的绿色点走过的迭代过程轨迹。在批量梯度下降算法还没有完成一次迭代时,随机梯度下降算法便已经走出了很远。
  2. 随机梯度下降结果不一定最优随机梯度下降算法在每一次计算之后便更新参数θ ,而不需要首先将所有的训练集求和。随机梯度下降算法不是直接逼近全局最小值点并停留在那里,而是在某个靠近全局最小值得区域内徘徊。但实际上这并没有多大问题,只要参数最终移动到某个非常靠近全局最小值的区域内,也会得到一个较为不错的假设函数。如下图中的红色点走过的迭代过程轨迹。

image.png

小批量梯度下降

批量梯度下降:每次迭代中,使用所有m个样本;
随机梯度下降:每次迭代中,使用1个样本;
小批量梯度下降:每次迭代中,使用b个样本(一般b = 100,取值范围为2-100)。

小批量梯度下降是介于批量梯度下降算法和随机梯度下降算法之间的算法。每计算b次训练样本,更新一次参数。 小批量梯度下降算法如下:假设b=10,m=1000

image.png

通常我们会令b在2-100之间。这样做的好处在于,我们可以用向量化的方式来循环b个训练样本,如果我们用的线性代数函数库比较好,能够支持并行处理,那么算法的总体表现将不受影响(与随机梯度下降相同)。

小批量梯度下降和随机梯度下降的不同

  1. 在向量化的过程中,小批量梯度下降可能会比随机梯度下降算法更好,原因在于拥有好的向量计算库。例如此时小批量b = 10个样本求和可以用一种更向量化的方法来实现,即允许部分并行计算10个样本的和。
  2. 小批量梯度下降的一个缺点是存在一个额外的参数 b,所以需要花费时间调试 b的大小,通常 b的取值在2-100之间都合理。因此,我们选的 b的值如果在有一个好的向量化实现条件下,有时它可以比随机梯度下降和批量梯度下降更快。

在线学习

在线学习算法指的是对数据流而非离线的静态数据集的学习。

在线学习算法与随机梯度下降算法有些类似,我们对单一的样本进行学习,而非对一个提前定义的训练集进行循环。

image.png

一旦对一个数据的学习完成了,我们便可以丢弃该数据,不需要再存储它了。这种方式的好处在于,我们的算法可以很好的适应用户的倾向性,算法可以针对用户的当前行为不断地更新模型以适应该用户。

   在线学习算法与随机梯度下降算法唯一的区别是,在线学习算法不用使用一个固定的数据集,而是获取一个用户样本,从那个样本中学习,然后丢弃那个样本继续下去,如果有一个连续的数据流,这个算法非常值得考虑。在线学习的一个优点是,如果有一个变化的用户群又或者尝试预测的事情在缓慢变化,在线学习算法可以慢慢地调试所学到的假设,将其调节更新到最新的用户行为。

  传统的机器学习(machine learning)技术是利用一批已有的数据,学习到一个固化的模型。该模型的泛化能力不能依赖于精心设计的模型,还更需要一次灌注海量数据来保证。在线学习(online learning)则不需要海量数据,只需要少量启动数据,通过探索、反馈、修正来逐渐学习。相比之下,在线学习对数据的使用更加灵活,不仅能减轻更新模型时的计算负担,更可以提高模型的时效性,更加符合人的学习方式,而传统的机器学习则是侧重于统计分析

映射简化和数据并行

映射化简和数据并行对于大规模机器学习问题而言是非常重要的概念。之前提到,如果我们用批量梯度下降算法来求解大规模数据集的最优解,我们需要对整个训练集进行循环,计算偏导数和代价,再求和,计算代价非常大。如果我们能够将我们的数据集分配给多台计算机,让每一台计算机处理数据集的一个子集,然后我们将计算的结果汇总求和。这样的方法叫做映射简化(Map-reduce)。

例如,我们有400个训练样本,我们可以将批量梯度下降的求和任务分配给4台计算机进行处理:

image.png

特别地,如果没有网络延时,也不考虑通过网络来回传输数据所消耗的时间,那么就可以有4倍的计算效率。当然实际上因为网络延时,结果汇总也需要额外的时间以及其他因素,实际上速率会小于4倍。但是不管怎样,映射映射化简算法为我们提供了一种方式来处理一台电脑无法处理的大规模数据。

通过将机器学习算法表示为求和的形式,或者是训练数据的求和形式,我们就可以运用映射化简技术来将算法并行化以便处理大规模数据。