在一家AI公司工作四年多,经常有人问我做好人工智能的核心是什么。当前的AI发展阶段,我的回答是:
- 应用场景理解
- 工程能力
-
算法能力
催化剂是团队的衔接
1. 应用场景理解
基于现有的AI技术,训练时必须大规模的数据。训练数据和应用场景的match程度决定了算法的上限。很多互联网或者传统公司都会遇到类似的情况:某某顶尖的AI公司给出的解决方案,号称全球领先,在实际场景中测试后发现问题很多。其核心原因之一在于:
真实用户场景的数据和AI公司训练的数据match程度较低。基于目前的AI技术,无法做到全场景的泛化。
以目前比较成熟的人脸检测为例,现在极少有公司能够通过一个模型覆盖所有场景,通常的做法是在基础模型上,增加对应场景大量的数据,做到比较优良的效果,比如以人脸应用的场景:
1. AI智能安防:脸比较小,摄像头比较员通道内光线比较暗,有俯仰角各种情况;
2. 人脸解锁:人脸比较大,使用是一个过程(手臂抬起,会有移动),光线各种情况;
3. 拍照:人脸大小不定,光线一般稍好;
如果把场景1中的安防场景,应用在人脸解锁中,问题基本会非常大。
基于以上结论,在AI的应用的过程中,对于应用场景和业务的理解是最基本,最核心的。需要整个Team对应用场景和业务有很深的理解,包括但不限于:
1. 数据采集,标注和清洗人员;
2. 研究员;
3. 工程(包括产品经理)和测试;
对应用场景和业务的理解,同样可以协助整个团队做出更好的解决方案。原因在于应用需要的不仅仅是算法,还包括整个solution。以IPhone的人脸解锁为例,其核心模块包括比对和活体等,但是在实际录入使用时发现录入和解锁时的过程,有很多成像模糊,对比对和活体算法造成很大的干扰。基于此的核心解决方案是:
1. 增加质量模块;
2. 在录入时,提高质量标准,保证录入时,图片清晰;
3. 解锁时,通过质量过滤掉算法无法识别的图像,提高通过率和安全性;
通过以上方式之后,算法的整体表现大大提升。
2. 工程能力
PS:这段摘自知乎,和我思想是一致的;
做好AI应用,不仅是要懂AI“算法”,更重要的是软件工程能力和系统能力。在实践中,写程序是不是有良好的风格,版本控制是不是成为习惯,是不是掌握基本的网络服务构架,这些基本功比会用Keras/TensorFlow重要多了。有想法的人很多,具体工程去做的人就少了,应先从最底层的工程练起。没有具体的工程经验,就是清谈,是浪费时间。先过了系统运维关、数据库关、代码习惯关、基本软件工程关,才能谈得上落地一个AI的系统。
现实系统里行之有效的人工智能算法,都是很简单的。能不能发挥好的根本,都在于如何把这些简单的东西因地制宜综合运用。为1%的核心算法代码跑好,要99%的“工程”代码的支持。
比如对机器学习,无免费午餐定理告诉我们,一个算法如果在一类问题上特别有效,那一定有一些问题它比随机算法还差。一个现实中可用的机器学习系统,几乎一定是多种问题的混合问题。不会存在一种算法是一个现实问题的灵丹妙药。现实的问题的解决,一定是用一个良好的工程架构,让多种算法混合在一起解决问题。能拿捏这个架构设计的“度”,就是人工智能工程师最核心的能力。
又比如逻辑这个分支。概念上其实没有比逻辑更简单的语言了:与、非、存在量词。但是为了工程化这个简单的东西,就衍生出巨大的一门学科:知识工程、语义网、知识图谱。知识工程之所以难不在“知识”,而在“工程”。当关注“知识”的时候,总是可以映射最优秀的人的智能。但工程化的时候,必须适应群体无限的奇葩,和不可避免的各种成本的折衷。
AI应用落地,核心是工程问题,不是算法问题,更不是“哲学”问题。一定要特别特别“土”,踏踏实实从朴素的运维、数据库、数据清洗做起,从实际的工程中逐步演化。如何按天迭代? 如何构造联调系统? 如何无标注数据启动? 如何分离准确度和召回率要求? 如何统一运用规则和统计? 如何适应无明确衡量标准的开发? 如何设计可演进的数据模式? 如何提升数据可理解性? 如何逐步提升规则系统的表达力? 如何平衡黑箱和白箱模型的优缺点? 如何在优雅架构和工期间取舍? 等等,这些都是教科书上没有的答案。只有扎扎实实从工程出发,才能实事求是地发展出低成本的、有生命力的AI系统。
如果仅仅是因为某个东西时髦就去学,比如因为这两年AI火就去学AI,满口ConvolutionalNN、RNN、LSTM,却没有兴趣去理解这些东西背后的基本原理和应用范围,对工程也是无益的。比如只知道“卷积”这个词,却不理解不同的卷积核对于图像到底起什么作用;只知道深度网络,却连其他的神经网络一概不知;只知道word2vec分布式表示,却连TFIDF和LDA都没用过。这种赶时髦,对工程实践害处大于用处。
掌握分很多层次。会用包是一个层次,会改进是一个层次,发优秀论文再进一个层次。至于懂得方法的边界、工程上和其他方法融汇使用,就只有凤毛麟角的人了。到AI架构师的层次,又需要通透理解多种方法的前沿。这样的人,学校、研究院都培养不出来,都是通过工程逼出来、练出来、打出来的。光是懂算法不行,还必须通透理解实践的前沿;光是理解一个分支也不行,还必须通透理解几个分支。
没有银弹,没有奇迹。都是扎扎实实的工程,多年的细节的打磨才能解决一点小事。也从来没有一个所谓的伟大的想法,能跳过工程的考验而就成功的。工程才是做好AI的钥匙。
3. 算法能力
曾经我司的产品总监级别的人说过一句话:我司的整体还是很强的,就是缺少两个字:靠谱;
现在改编一下:市场上,大家整体的算法能力还是很强的,大部分人缺少两个字:靠谱;
一个靠谱的算法通常会考虑到以下,包括不限于:
1. 应用场景和业务;
2. 数据match程度和清晰;
3. 算法的上限(性能和效果)以及原因;
4. 测试评估方案;
5. 最优使用方式;
6. 升级和可维护性;
不靠谱的算法一般都给出:效果还可以,你们测一下。
算法能力决定了单个算法模块的上限,算法能力不仅仅包括模型training,更大的程度上是用算法解决应用场景的整体方案,并系统的思考和执行。
结语:
AI看似酷炫吊炸天,其实没有银弹,没有光环,都是扎扎实实的基础,长期细节的打磨才能解决用户的部分问题。人工智能~先有人工,才有智能。