栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

吴恩达机器学习17-大规模机器学习

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

吴恩达机器学习17-大规模机器学习

吴恩达机器学习17-大规模机器学习 1.大型数据集的学习

在高方差/过拟合的情况下,训练集误差和交叉验证集误差存在差距,但是随着样本数的增加两者差距减少并且交叉训练集的误差开始降低,所以增加更多数据到训练集可能可以提高算法效果。

在高偏差/欠拟合的情况下,训练集误差和交叉验证集误差一直很大,增加数据到训练集意义不大。

2.随机梯度下降法

如果我们有一个低方差的模型,增加数据集的规模可以帮助你获得更好的结果。但我们应该怎样应对一个有 100 万条记录的训练集?以线性回归模型为例,每一次梯度下降迭代,我们都需要计算训练集的误差的平方和,其计算代价是十分巨大的:

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

其算法如下:

第一步:随机分布训练集

第二步:对每个样本分别进行梯度下降:

首先引入训练单一代价的实例:

cost ⁡ ( θ , ( x ( i ) , y ( i ) ) ) = 1 2 ( h θ ( x ( i ) ) − y ( i ) ) 2 operatorname{cost}left(theta,left(x^{(i)}, y^{(i)}right)right)=frac{1}{2}left(h_{theta}left(x^{(i)}right)-y^{(i)}right)^{2} cost(θ,(x(i),y(i)))=21​(hθ​(x(i))−y(i))2

然后对每个样本进行梯度下降:

Repeat (usually anywhere between1-10){
for i=1: m{

θ : = θ j − α ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) theta:=theta_{j}-alphaleft(h_{theta}left(x^{(i)}right)-y^{(i)}right) x_{j}^{(i)} θ:=θj​−α(hθ​(x(i))−y(i))xj(i)​

​ (for j=0: n )
​ }
}

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

3.小批量梯度下降

小批量梯度下降算法是介于批量梯度下降算法和随机梯度下降算法之间的算法,每计算常数푏次训练实例,便更新一次参数 휃 。

批量梯度下降算法是全部计算,随机梯度下降算法是每次计算一次。

例如我们选择b=10:

Repeat {
for i=1: m{
θ : = θ j − α 1 b ∑ k = i i + b − 1 ( h θ ( x ( k ) ) − y ( k ) ) x j ( k ) theta:=theta_{j}-alpha frac{1}{b} sum_{k=i}^{i+b-1}left(h_{theta}left(x^{(k)}right)-y^{(k)}right) x_{j}^{(k)} θ:=θj​−αb1​∑k=ii+b−1​(hθ​(x(k))−y(k))xj(k)​
(for 푗 = 0: 푛)
i+=10
}

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

4.随机梯度下降收敛

本届介绍如何选取学习率 훼

在批量梯度下降中,我们可以令代价函数퐽为迭代次数的函数,绘制图表,根据图表来判断梯度下降是否收敛。但是,在大规模的训练集的情况下,这是不现实的,因为计算代价太大了。

在随机梯度下降中,我们在每一次更新 휃 之前都计算一次代价,然后每푥次迭代后,求出这푥次对训练实例计算代价的平均值,然后绘制这些平均值与푥次迭代的次数之间的函数图表。

图1是选择1000个样本点画一次,可以看出代价函数在不断收敛

图2是选择5000个样本画一次,可以看出代价函数在收敛的同时变得更加平滑

图3则效果不佳,模型本身可能选取错误,需要选取新的特征或调整学习率

图4呈上升趋势,需要减少学习率

此外,我们可以安如下方式设置学习率:

α =  const  1  iterationNumber  +  const  2 alpha=frac{text { const } 1}{text { iterationNumber }+text { const } 2} α= iterationNumber + const 2 const 1​

푐표푛푠푡1、푐표푛푠푡2为常数,푖푡푒푟푎푡푖표푛푁푢푚푏푒푟为迭代次数,令学习率随着迭代次数的增加而减小。随着我们不断地靠近全局最小值,通过减小学习率,我们迫使算法收敛而非在最小值附近徘徊。 但是通常我们不需要这样做便能有非常好的效果了,对훼进行调整所耗费的计算通
常不值得。

5.在线学习

今天,许多大型网站或者许多大型网络公司,使用不同版本的在线学习机制算法,从大批的涌入又离开网站的用户身上进行学习。特别要提及的是,如果你有一个由连续的用户流引发的连续的数据流,进入你的网站,你能做的是使用一个在线学习机制,从数据流中学习用户的偏好,然后使用这些信息来优化一些关于网站的决策。

一个算法来从中学习的时候来模型化问题在线学习算法指的是对数据流而非离线的静态数据集的学习。许多在线网站都有持续不断的用户流,对于每一个用户,网站希望能在不将数据存储到数据库中便顺利地进行算法学习。

假使我们正在经营一家物流公司,每当一个用户询问从地点 A 至地点 B 的快递费用时,我们给用户一个报价,该用户可能选择接受(푦 = 1)或不接受(푦 = 0)。现在,我们希望构建一个模型,来预测用户接受报价使用我们的物流服务的可能性。因此报价 是我们的一个特征,其他特征为距离,起始地点,目标地点以及特定的用户数据。模型的输出是:푝(푦 = 1)。

每次交互事件并不只产生一个数据集,例如,我们一次给用户提供 3 个物流选项,用户选择 2 项,我们实际上可以获得 3 个新的训练实例,因而我们的算法可以一次从 3 个实例中学习并更新模型。

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

Repeat forever (as long as the website is running) {
Get (푥, 푦) corresponding to the current user

θ : = θ j − α ( h θ ( x ) − y ) x j theta:=theta_{j}-alphaleft(h_{theta}(x)-yright) x_{j} θ:=θj​−α(hθ​(x)−y)xj​

(for 푗 = 0: 푛)

}

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

6.映射化简和数据并行

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

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

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

很多高级的线性代数函数库已经能够利用多核 CPU 的多个核心来并行地处理矩阵运算,这也是算法的向量化实现如此重要的缘故(比调用循环快)。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1022708.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号