如何开发组合一个复杂的机器学习系统 ?
如何分配资源决定下一步怎么做?
001. Photo OCR
Photo OCR stands for Photo Optical Character Recognition.
设计一个机器学习系统,其中一项最重要的决定就是要怎么样组织好这个流水线pipeline
在这个问题中,即表现问如何分解为如下几个模块,他们的表现会最终影响你的模型最终的性能
Pipeline :
- 图像数据 (1-2)
- 文字检测(1-5)
- 字符分割(1-5)
- 字母识别(1-5)
如果你有一个工程师团队,则可以分别分配他们1-5个人做不同的模块
![](https://img2020.cnblogs.com/blog/2150637/202011/2150637-20201106231110544-1096271100.png)
002. 滑动窗口Sliding Windows
一定尺寸的窗口,以一定步长(如4个pixel像素),全部扫一遍
窗口扩大尺寸,再扫一遍
![](https://img2020.cnblogs.com/blog/2150637/202011/2150637-20201106232217600-1567454616.png)
![](https://img2020.cnblogs.com/blog/2150637/202011/2150637-20201106232242389-387654716.png)
文字检测
字符分割
字符识别
003. 数据扩增
图像类: 对称,旋转,调色,字体类换字体
语音类:加噪音,加背景英语,变声调,
![](https://img2020.cnblogs.com/blog/2150637/202011/2150637-20201106234702961-1670612238.png)
1)先用小数据集测试,确保模型的低bias
避免花1周-几个月的时间做了很多数据,但是最终把数据喂给模型后,性能并没有提升
2)额外做出10倍当前有的数据,需要多长时间?
花点时间想这个,数据量扩大后,模型最终能达到的效果会好很多,你会成为团队的英雄!
当你面对一个机器学习的问题的时候,通常来说,2件事情肯定值得做:
1)用学习曲线做合理性测试,以确定是否更多的数据是有用的
2) 获得10倍的数据,需要多长时间
004. 上限分析Ceiling Analysis
对pipeline的流程组件上限分析,能够提供一种非常有价值的信息或导向,告诉你pipeline里面的哪个部分最值得花时间![](https://img2020.cnblogs.com/blog/2150637/202011/2150637-20201107001300429-410473583.png)
1)用一个单一的数值指标来评价
2)人工干预,直接给出“标准答案” - 提供正确的文字检测结果,使模块提升至100%正确;
3)然后继续用这个正确的数据跑接下来的模块,看整个系统的评价指标提升至多少
4)继续一个一个模块给“标准答案”,看最终系统性能提升情况
这样分析后的数据,能够让我们知道,每个模块改善的,对系统提升的上限是多少
多年机器学习经验:
不相信自己对要使用哪些组件的直觉,遇到机器学习问题,最好分模块进行组件上限分析,通常会存在一种更好更可靠的方法来决定在何处投入精力,从而真正提高某些产品的性能。