机器学习-吴恩达-笔记-13-大规模机器学习

目录

大型数据集的学习

批量梯度下降

随机梯度下降

小批量梯度下降

随机梯度下降收敛

在线学习

映射化简和数据并行


【此为本人学习吴恩达的机器学习课程的笔记记录,有错误请指出!】

大型数据集的学习


如果模型算法具有欠拟合现象,增加数据集可以得到较好的预测效果,那么怎样应对一个有 100 万条记录的训练集?

以线性回归模型为例,每一次梯度下降迭代,都需要计算训练集的误差的平方和,如果学习算法需要 20 次迭代,这已经是非常大的计算代价。

首先应该做的事是去检查一个这么大规模的训练集是否真的必要,也许只用 1000个训练集也能获得较好的效果,可以绘制学习曲线来帮助判断。

 

批量梯度下降


批量梯度下降法是最原始的形式,它是指在每一次迭代时使用所有样本来进行梯度的更新。

每次迭代对参数进行更新:

伪代码:

优点:

(1)每一次的迭代是对所有样本进行计算,利用矩阵进行操作,实现了并行计算。

(2)由全数据集确定的导数方向能够更好地代表样本总体,从而更准确地朝向极值的方向收敛。当目标函数为凸函数时,BGD一定能够得到全局最优。

缺点:

(1)当训练样本数目很大时,每迭代一步都需要对所有样本计算,训练过程会很慢(如:30W训练样本,需要迭代10次,需计算 10 * 30W次)。

 

随机梯度下降


如果一定需要一个大规模的训练集,我们可以尝试使用随机梯度下降法(SGD) 来代替批量梯度下降法。

在随机梯度下降法中,定义代价函数为一个单一训练实例的代价:

随机梯度下降算法为: 首先对训练集随机“洗牌”, 然后:

 

伪代码:

优点:

(1)在每一轮迭代中,随机优化某一条训练数据上的损失函数,这样每一轮参数的更新速度大大加快(如:30W训练样本,需要迭代30W次,需计算 1 * 30W次)。

缺点:

(1)准确度下降。由于每次随机训练一条数据,即使在目标函数为强凸函数的情况下,SGD仍旧无法做到线性收敛。

(2)可能会收敛到局部最优,由于单个样本并不能代表全体样本的趋势。

(3)不易于并行实现。

随机梯度下降算法在每一次计算之后便更新参数 𝜃 ,而不需要将所有的训练集求和(只求当前样本的误差),在梯度下降算法还没有完成一次迭代时,随机梯度下降算法便已经走出了很远。但是这样的算法存在的问题是, 不是每一步都是朝着”正确”的方向迈出的。 因此算法可能会逐渐走向全局最小值的位置,但是可能无法站到那个最小值的那一点,而是在最小值点附近徘徊。

 

小批量梯度下降


小批量梯度下降法(MBGD)是介于批量梯度下降法和随机梯度下降法之间的算法,每次计算常数 𝑏 个样本来更新一次参数𝜃。

假设  batch_size = 10,样本数 m = 1000。伪代码:

优点:

(1)利用矩阵运算,每次在一个batch上优化神经网络参数并不会比单个数据慢太多。

(2)每次使用一个batch可以大大减小收敛所需要的迭代次数,同时可以使收敛到的结果更加接近梯度下降的效果。(如上例中的30W,设置batch_size=100时,需要迭代3000次,远小于SGD的30W次)。

(3)可实现并行化。

缺点:

(1)batch_size的不当选择可能会带来一些问题。

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

 

随机梯度下降收敛


三种梯度下降法的收敛过程:

在梯度下降中,我们可以令代价函数 𝐽 为迭代次数的函数,绘制图表,根据图表来判断梯度下降是否收敛:

图 1 到 图 2 :通过调整学习率(如增大学习率𝛼),最后模型趋势都能够收敛,说明是正确的学习率。

图 3:通过调整学习率(如增大学习率𝛼),模型没有明显的收敛趋势或没有收敛(如红线和洋红线),那么模型可能存在一些错误。

图 4:模型趋势不断上升,说明选择的学习率过大,需要适当调小学习率。

对于随机梯度下降法来说,可能出现无法到达全局最小值,而是在最小值的位置附近徘徊。所以,我们可以令学习率随着迭代次数的增加而减小,例如:

随着算法不断地靠近全局最小值,通过减小学习率,迫使算法收敛而非在最小值附近徘徊。

但是通常我们不需要这样做便能有非常好的效果了,对 𝛼 进行调整所耗费的计算通常不值得。

随机梯度下降法的收敛图形,只需要每次对最后 1000 次的(或者其它数目)迭代,求一下平均值即可。应用这种方法,既可以保证随机梯度下降法正在正常运转和收敛,也可以用它来调整学习速率𝛼的大小。

 

在线学习


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

许多在线网站都有持续不断的用户流,对于每一个用户,网站希望能在不将数据存储到数据库中便顺利地进行算法学习。

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

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

在实际中,很多大公司会实时获取大量的数据,真的没有必要来保存一个固定的数据集,取而代之的是可以使用一个在线学习算法来连续的学习,从这些用户不断产生的数据中来学习。

在线学习算法与随机梯度下降算法非常类似,唯一的区别是,我们不会使用一个固定的数据集,而是获取一个用户样本,从那个样本中学习,然后丢弃那个样本并继续学习下去,因此如果一个应用有一个连续的数据流,这样的算法可能会非常值得考虑。

在线学习的一个优点就是,如果你有一个变化的用户群,又或者你在尝试预测的事情在缓慢变化(就像你的用户的品味在缓慢变化),使用在线学习算法,可以慢慢地调试你所学习到的假设函数,将其调节更新到最新的用户行为。

 

映射化简和数据并行


映射化简和数据并行对于大规模机器学习问题而言是非常重要的概念。

之前提到,如果用批量梯度下降算法来求解大规模数据集的最优解,需要对整个训练集进行循环,计算偏导数和代价,再求和,计算代价非常大。

如果我们能够将数据集分配给多台计算机,让每一台计算机处理数据集的一个子集,然后将所有结果汇总在求和。这样

的方法叫做映射简化。

具体而言,如果学习算法能够表达为,对训练集的函数求和,那么便能将这个任务分配给多台计算机(或者同一台计算机的不同 CPU 核心),以达到加速处理的目的。

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

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值