深度学习(二):超级英雄还是蚂蚁雄兵

实际上,企业此刻需要的不是单打独斗的“超级英雄”,而是一支队伍——具备学习能力与意愿的“蚂蚁雄兵”。

深度学习(二):超级英雄还是蚂蚁雄兵

上一篇文章中提出了一个疑问:对于普通公司来说,深度学习到底是机会还是陷阱?如果你还没有看过,可以在这里查看:

深度学习(一):出路还是陷阱
尽管在深度学习领域的行业巨头经常出现在聚光灯下,但是众多在舞台上没有姓名的普通公司才是这场技术热潮中的隐形主角。

本篇文章,我想从技术特性的角度来分析一下这个问题。


深度学习开发的三种类型

对于从未接触过深度学习的企业来说,该技术的应用范式大致可以分为三类。

第一类为完全外包型。将涉及到深度学习的功能与服务完全外包给第三方去开发,后期将其纳入自己的解决方案提供给客户;或者联合第三方组队提供整体解决方案。这种方案的开发重点在于方案整合,开发内容完全不涉及到深度学习,所以可以节省开发人员与时间成本。缺点在于第三方的方案不是白拿的。成熟的深度学习方案存在技术与知识门槛,当市场上没有足够多的供应商时,成本谈判没有优势。另外方案的使用费用通常与业务规模挂钩,规模越大,付出的成本越高。而且对应模块的知识产权仍然在第三方手里,换个项目需要重新谈。

某厂的文字识别批量授权价格

第二类为模块外包型。将分解后的功能模块中涉及深度学习的部分外包给第三方去完成,尤其是深度学习模型的构造与训练。这样做可能是因为企业没有适宜的开发条件,如设备、人员或数据。同样是外包,与第一种方案的不同之处在于企业享有该模块的知识产权,即第三方将该模块一次性卖给了企业。企业在后续开发时不再有规模成本顾虑、规模越大,赚得越多。这种方案看起来很美,但是实施起来困难重重。不是每只鸡都能接受这种“杀鸡取卵”的方案。对于企业来说,技术无时无刻不在演进当中。这样买来的方案能用多久存在较大的不确定性。

第三类为自主开发型。即自主开发涉及到深度学习的全部模块,包括深度学习模型的构造与训练。这种方案下,企业拥有全部的知识产权,可以随着业务规模的扩大摊薄开发成本,结果最为理想。当然,这必然意味着开发过程的艰难。尤其企业对深度学习的认识不够深入的时候,盲目介入自主开发只是一个勇敢的开始。

都是开源,凭啥你不一样?

几乎每个与代码打交道的人都或多或少用到过开源代码。深度学习这个领域也不例外。不仅TensorFlow、PyTorch这样的头部框架是开源的,你还能在开源代码集中地GitHub上找到数不清的细分领域开源项目。但是,深度学习开源项目大多无法像Ngnix或者OpenCV一样实现“开箱即用”,尤其是面临定制化应用场景的时候。这种差异广泛体现在开发流程与测试方式上。造成差异的原因则归咎于深度学习的原理。

深度学习是机器学习的一个分支。它通过使用机器统计大量有标记数据来获得数据中隐含的潜在规律。在过往的技术方案中,这些规律可能是由具备行业知识的专家来人工推导得到的。而如今“寻找规律”这件事情交给机器做时,人类不得不为其付出代价。

Computer vector created by macrovector

最显著的代价是规律的可解释性。深度神经网络包含大量的运算参数,这些参数数量与其要实现的任务难度基本上呈正相关。大量的参数以类似生物神经元的方式链接在一起,形成一套复杂的运算架构。参数数量之大、结构之繁杂、使得人类基本上无法用可以理解的逻辑去解释神经网络的判别过程。这种状况导致神经网络评价时,针对某个单一样本的评价基本上没有价值与意义。而是要看大规模数据下的整体表现。这给习惯了常规软件测试的团队带来来全新的认知挑战。

第二个代价是对大规模数据的依赖性。深度学习总是被有意无意的指称为“人工智能”,但是,行业内也流传着一句话“有多少人工才有多少智能”。寻找规律的工作交给了机器,但是用于规律寻找的有效数据,还是离不开人工。面对不那么“智能”的神经网络,输入数据某种程度上决定了学习到的规律质量。体现在具体的工作内容中,你会发现开发工程师的很大一部分工作都是在处理数据。从真实世界获得的数据往往要经过一系列处理才能达到可用的状态。这些数据不仅仅要用于模型的训练,还要用于模型的评价。毫不夸张地说,引入深度学习之后,项目开发不仅仅是软件工程,更是数据工程。这也是深度学习开源项目无法像其它开源项目那样开箱即用的原因——数据的分布是不一样的。企业的应用场景往往需要额外的私有数据才能达到理想的效果。