大规模机器学习
这是Machine learning最后两周的内容
大型数据集的学习
首先检查大规模的训练集是否有必要,通过绘制学习曲线来帮助判断。
随机梯度下降算法
![随机梯度下降](http://a2.qpic.cn/psb?/V12UJCGv0BAHHA/K*Ie3GA19xulKVb6FAsiDRvyAjrt4HrCCZqQn45FV*E!/b/dDEBAAAAAAAA&ek=1&kp=1&pt=0&bo=UgG6AFIBugABACc!&tl=1&vuin=1405591197&tm=1527062400&sce=50-1-1&rf=viewer_311 "随机梯度下降")
随机梯度下降算法在计算一个样本的代价函数倒数之后就更新参数$\theta$,不需要将所有训练集求和,还没有完成一次迭代时,随机梯度下降算法就已经走出了很远,存在的问题是每一步不一定是正确的方向,算法会逐渐走向全局最小的位置,但可能在最小值附近徘徊。
## 小批量梯度下降
介于批量梯度下降和随机梯度下降算法之间,每计算b次训练实例更新一次参数$\theta$。
好处:可以用向量化的方式来循环b个实例。支持并行处理。
随机梯度下降算法的收敛
每X次迭代之后,在更新$\theta$之前求出X次的训练实例计算代价的平均值。然后绘制这些平均值与X次迭代次数之间的函数图像。
在线学习
对数据流非离线的静态数据集的学习,与随机梯度下降算法类似,对单一的实例进行学习而不是对提前定义的训练集进行循环。
![在线学习](http://a1.qpic.cn/psb?/V12UJCGv0BAHHA/ZJF0AfMOSUCyRYUyGXk3eszzBKbQtutNUNykCg2qBTI!/b/dPQAAAAAAAAA&ek=1&kp=1&pt=0&bo=nQFyAJ0BcgABACc!&tl=1&vuin=1405591197&tm=1527062400&sce=50-1-1&rf=viewer_311 "在线学习")
对一个数据进行学习之后就可以丢弃该数据。好处是可以很好适应用户倾向,算法针对用户的当前行为不断更新模型以适应该用户。与随机梯度下降算法类似,其区别是不会使用一个固定的数据集。优点是可以可以对变化中的用户行为进行很好的预测。
Map Reduce and Data Parallelism
将数据分配给多台计算机,让计算机处理数据集的一个子集,再将结果汇总求和。如果算法能够表述为”对训练结果汇总求和”,就能通过映射化简进行加速处理。
应用实例:图片文字识别
问题描述和流程图(Problem Description and Pipeline)
图像文字识别
- 文字侦测(Text detection)-区别文字与环境
- 字符切分(Character segmentation)-将文字分割成单一字符
- 字符分类(Character classification)-确定每个字符是什么
滑动窗口
文字侦测:从图像中抽取对象,按不同的窗口大小来循环截取图片,缩放至模型所需大小,交给模型判断。在文字识别中,将识别出的区域进行合并扩展,通过高宽比进行过滤。
字符切分:滑动窗口抽取对象。
字符分类:根据切分出来的字符,利用神经网络、支持向量或者逻辑回归算法进行分类。
获得大量数据和人工数据
从零开始创造
例如字体包配上随机背景图片
处理已有数据
利用已有数据进行扭曲、旋转、模糊处理
众包
找人打标签
上限分析
在上限分析中,选取一部分,手工提取100%正确的输出结果,看应用整体效果提升了多少。提升效果多的最需要投入更多的时间的精力。