机器学习之旅(十)

吴恩达教授的机器学习课程的第十周相关内容:

1、大规模机器学习

1.1、大型数据集的学习

如果我们有一个低方差的模型,增加数据集的规模可以帮助你获得更好的结果。我们应
该怎样应对一个有 100 万条记录的训练集?
以线性回归模型为例,每一次梯度下降迭代,我们都需要计算训练集的误差的平方和,
如果我们的学习算法需要有 20 次迭代,这便已经是非常大的计算代价。
首先应该做的事是去检查一个这么大规模的训练集是否真的必要,也许我们只用 1000
个训练集也能获得较好的效果,我们可以绘制学习曲线来帮助判断。
在这里插入图片描述小结:通过绘制学习曲线来判断是否更多的数据是否有用。

1.2、 随机梯度下降法

如果我们一定需要一个大规模的训练集,我们可以尝试使用随机梯度下降法来代替批量
梯度下降法。
在随机梯度下降法中,我们定义代价函数为一个单一训练实例的代价:
在这里插入图片描述
随机梯度下降算法为: 首先对训练集随机“洗牌”, 然后:
在这里插入图片描述随机梯度下降算法在每一次计算之后便更新参数 θ, 而不需要首先将所有的训练集求和,
在梯度下降算法还没有完成一次迭代时,随机梯度下降算法便已经走出了很远。但是这样的
算法存在的问题是, 不是每一步都是朝着”正确”的方向迈出的。 因此算法虽然会逐渐走向全局最小值的位置,但是可能无法站到那个最小值的那一点,而是在最小值点附近徘徊。
小结:如果使用的数据规模很大,可以使用随机梯度下降法来代替批量梯度下降法,但是其不是每一步都是朝着”正确”的方向迈出的。

1.3、小批量梯度下降

小批量梯度下降算法是介于批量梯度下降算法和随机梯度下降算法之间的算法,每计算
常数 b 次训练实例, 便更新一次参数 θ。
在这里插入图片描述
通常我们会令 b 在 2-100 之间。这样做的好处在于,我们可以用向量化的方式来循环
b 个训练实例,如果我们用的线性代数函数库比较好,能够支持平行处理,那么算法的总体
表现将不受影响(与随机梯度下降相同。
小结:小批量梯度下降使用了批量梯度下降算法的‘和’的思想,和随机梯度算法的‘快’的思想。

1.4、随机梯度下降收敛

在批量梯度下降中,我们可以令代价函数 J 为迭代次数的函数,绘制图表,根据图表来
判断梯度下降是否收敛。但是,在大规模的训练集的情况下,这是不现实的,因为计算代价
太大了。
在随机梯度下降中,我们在每一次更新 θ之前都计算一次代价,然后每 X 次迭代后,求
出这 X 次对训练实例计算代价的平均值,然后绘制这些平均值与 X 次迭代的次数之间的函
数图表。
在这里插入图片描述当我们绘制这样的图表时,可能会得到一个颠簸不平但是不会明显减少的函数图像(如
上面左下图中蓝线所示)。我们可以增加 X 来使得函数更加平缓,也许便能看出下降的趋势了(如上面左下图中红线所示);或者可能函数图表仍然是颠簸不平且不下降的(如洋红色线所示),那么我们的模型本身可能存在一些错误。
如果我们得到的曲线如上面右下方所示,不断地上升,那么我们可能会需要选择一个较
小的学习率 α。
我们也可以令学习率随着迭代次数的增加而减小,例如令:
在这里插入图片描述
随着我们不断地靠近全局最小值,通过减小学习率,我们迫使算法收敛而非在最小值附
近徘徊。 但是通常我们不需要这样做便能有非常好的效果了, 对 α 进行调整所耗费的计算
通常不值得。
在这里插入图片描述
介绍了一种方法,近似地监测出随机梯度下降算法在最优化代价函数中的表现,这种方法不需要定时地扫描整个训练集,来算出整个样本集的代价函数,而是只需要每次对最后 1000 个,或者多少个样本,求一下平均值。应用这种方法,你既可以保证随机梯度下降法正在正常运转和收敛,也可以用它来调整学习速率α的大小。
小结:通过求样本的一部分的代价函数的均值来优化随机梯度下降的运转和调整学习速率α。

1.5、在线学习

一个算法来从中学习的时候来模型化问题在线学习算法指的是对数据流而非离线的静态数据集的学习。许多在线网站都有持续不断的用户流,对于每一个用户,网站希望能在不将数据存储到数据库中便顺利地进行算法学习。
假使我们正在经营一家物流公司,每当一个用户询问从地点 A 至地点 B 的快递费用时,我们给用户一个报价,该用户可能选择接受(y=1)或不接受(y=0)。
现在,我们希望构建一个模型,来预测用户接受报价使用我们的物流服务的可能性。因此报价 是我们的一个特征,其他特征为距离,起始地点,目标地点以及特定的用户数据。模型的输出是 p(y=1)。
在线学习的算法与随机梯度下降算法有些类似,我们对单一的实例进行学习,而非对一个提前定义的训练集进行循环。
在这里插入图片描述
一旦对一个数据的学习完成了,我们便可以丢弃该数据,不需要再存储它了。这种方式的好处在于,我们的算法可以很好的适应用户的倾向性,算法可以针对用户的当前行为不断地更新模型以适应该用户。
小结:在线学习指的是对数据流而非离线的静态数据集的学习,对单一的实例进行学习,而非对一个提前定义的训练集进行循环。

1.6、映射化简和数据并行

映射化简和数据并行对于大规模机器学习问题而言是非常重要的概念。之前提到,如果我们用批量梯度下降算法来求解大规模数据集的最优解,我们需要对整个训练集进行循环,计算偏导数和代价,再求和,计算代价非常大。如果我们能够将我们的数据集分配给不多台计算机,让每一台计算机处理数据集的一个子集,然后我们将计所的结果汇总在求和。这样的方法叫做映射简化。
具体而言,如果任何学习算法能够表达为,对训练集的函数的求和,那么便能将这个任
务分配给多台计算机(或者同一台计算机的不同 CPU 核心),以达到加速处理的目的。
例如,我们有 400 个训练实例,我们可以将批量梯度下降的求和任务分配给 4 台计算机
进行处理:
在这里插入图片描述
很多高级的线性代数函数库已经能够利用多核 CPU 的多个核心来并行地处理矩阵运算,这也是算法的向量化实现如此重要的缘故(比调用循环快)。
小结:通过映射化简和数据并行来并行处理大数据,加快运行速度。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值