Sweety

Practice makes perfect

导航

在线学习&Map Reduce(斯坦福machine learning week 10)

Posted on 2017-12-10 17:01  蓝空  阅读(213)  评论(0编辑  收藏  举报

1 在线学习

在本节,我将会讨论一种新的大规模的机器学习机制,叫做在线学习机制。在拥有连续一波数据或连续的数据流涌进来,而我们又需要一个算法来从中学习的时候来模型化问题时,我们就需要用到在线学习机制。
特别要提及的是,如果你有一个由连续的用户流引发的连续的数据流,用户流进入你的网站,你能做的是使用一个在线学习机制,从数据流中学习用户的偏好,然后使用这些信息,来优化一些关于网站的决策。

1.1 背景实例

1.1.1 运输服务对于定价的预测

例如网站一直保持在线学习状态。
当一个用户偶然访问网站时,我们会得到当前用户对应的数据(x,y)(特征x是指用户所指定的起始地与目的地以及我们这一次提供给客户的价格,而y的取值是0或1,具体值取决于用户最终是否选择了我们的运输服务)。
通过该用户的数据(x,y)来更新θ

θj:=θjα(hθ(x)y)xj       (j=0,,n)

与以往的学习过程不同的是,在线学习中,每次梯度下降使用的这个当前用户的样本数据(x,y),我们使用一次之后就丢弃了,我们永远都不会再次使用它。这就是为什么我们在一个时间点只会处理一个样本的原因。(感觉和随机梯度下降有点像,每次更新一个样本!!!)

NG说:

如果你真的运行一个大型网站,在这个网站里你有一个连续的用户流登陆网站,那么这种在线学习算法,是一种非常合理的算法。因为数据本质上是自由的,而且数据本质上是无限的,那么或许就真的没必要重复处理一个样本。当然,如果我们只有少量的用户,那么我们就不选择像这样的在线学习算法,这种情况下最好是要保存好所有的数据,然后对这个数据集使用某种算法。

1.1.2 搜索中对于搜索结果的优化

假如你有一个在线卖手机的网站,你有一个可以提供搜索的用户界面。在你的网站中,有100部正在售卖的手机,用户每次搜索时会提供10部手机的搜索结果。那么当用户输入类似“安卓 手机 1080p 摄像头”这样的搜索词时,我们应该推荐哪十部手机给用户呢?
更明确地说,假定每次用户进行一次搜索,我们回馈给用户十个结果。在线学习算法会真正地提供给我们十个(x,y)数据对样本。每当一个用户来到 我们网站时就给了我们十个样本,因为对于这十部我们选择要展示给用户的手机的每一个我们会得到 一个特征矢量x,而且对于这10部手机中的任何一个手机,我们还会得到y的取值。这些取值是根据用户有没有点击那个网页链接来决定的。这样运行此类网站的一种方法就是连续给用户展示你的十个最佳猜测,这十个推荐是指用户可能会喜欢的其他的手机,那么每次一个用户访问,你将会得到十个(x,y)样本数据对,然后利用一个在线学习 算法来更新你的参数。更新过程中会对这十个样本利用10步梯度下降法,然后你可以丢弃你的数据了。

1.2 总结

如果你有一个协作过滤系统,你可以想象到一个协作过滤系统可以给你更多的特征,这些特征可以整合到逻辑回归的分类器,从而可以尝试着预测对于你可能推荐给用户的不同产品的点击率。

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

2 Map Reduce 和数据并行

在之前,我们讨论了随机梯度下降,以及梯度下降算法的其他一些变种,包括如何将其运用于在线学习。然而所有这些算法都只能在一台计算机上运行,但有的时候,机器学习的运算量巨大,以至于单台机器处理起来特别耗时,所以人们希望能在多台机器上同时执行运算来提高效率。
在本节中,我将介绍进行大规模机器学习的另一种方法,称为Map Reduce。尽管我们用了很多内容来讲解随机梯度下降算法,而对于Map Reduce的介绍比较少,但是请不要根据我们介绍内容的长短来判断哪一种技术更加重要。事实上 许多人认为Map Reduce与梯度梯度下降算法相比至少是同等重要的,还有人认为Map Reduce甚至比梯度下降方法更重要。
我们之所以在Map Reduce上花的时间比较少,只是因为它相对简单,容易解释。然而实际上相比于随机梯度下降方法,Map Reduce能够处理更大规模的问题。

原来的递归下降:
这里写图片描述
分解后分别计算:
这里写图片描述

θj:=θjα1400(temp(1)j+temp(2)j+temp(3)j+temp(4)j)(j=0,,n)

如果你打算将Map Reduce技术用于加速某个机器学习算法,也就是说你打算运用多台不同的计算机并行的进行计算,那么你需要问自己一个很关键的问题,那就是你的机器学习算法是否可以表示为训练样本的某种求和。

事实证明,很多机器学习算法的确可以表示为关于训练样本的函数求和。而在处理大数据时,这些算法的主要运算量在于对大量训练数据求和。