深度学习(二):超级英雄还是蚂蚁雄兵
实际上,企业此刻需要的不是单打独斗的“超级英雄”,而是一支队伍——具备学习能力与意愿的“蚂蚁雄兵”。
上一篇文章中提出了一个疑问:对于普通公司来说,深度学习到底是机会还是陷阱?如果你还没有看过,可以在这里查看:
本篇文章,我想从技术特性的角度来分析一下这个问题。
深度学习开发的三种类型
对于从未接触过深度学习的企业来说,该技术的应用范式大致可以分为三类。
第一类为完全外包型。将涉及到深度学习的功能与服务完全外包给第三方去开发,后期将其纳入自己的解决方案提供给客户;或者联合第三方组队提供整体解决方案。这种方案的开发重点在于方案整合,开发内容完全不涉及到深度学习,所以可以节省开发人员与时间成本。缺点在于第三方的方案不是白拿的。成熟的深度学习方案存在技术与知识门槛,当市场上没有足够多的供应商时,成本谈判没有优势。另外方案的使用费用通常与业务规模挂钩,规模越大,付出的成本越高。而且对应模块的知识产权仍然在第三方手里,换个项目需要重新谈。
第二类为模块外包型。将分解后的功能模块中涉及深度学习的部分外包给第三方去完成,尤其是深度学习模型的构造与训练。这样做可能是因为企业没有适宜的开发条件,如设备、人员或数据。同样是外包,与第一种方案的不同之处在于企业享有该模块的知识产权,即第三方将该模块一次性卖给了企业。企业在后续开发时不再有规模成本顾虑、规模越大,赚得越多。这种方案看起来很美,但是实施起来困难重重。不是每只鸡都能接受这种“杀鸡取卵”的方案。对于企业来说,技术无时无刻不在演进当中。这样买来的方案能用多久存在较大的不确定性。
第三类为自主开发型。即自主开发涉及到深度学习的全部模块,包括深度学习模型的构造与训练。这种方案下,企业拥有全部的知识产权,可以随着业务规模的扩大摊薄开发成本,结果最为理想。当然,这必然意味着开发过程的艰难。尤其企业对深度学习的认识不够深入的时候,盲目介入自主开发只是一个勇敢的开始。
都是开源,凭啥你不一样?
几乎每个与代码打交道的人都或多或少用到过开源代码。深度学习这个领域也不例外。不仅TensorFlow、PyTorch这样的头部框架是开源的,你还能在开源代码集中地GitHub上找到数不清的细分领域开源项目。但是,深度学习开源项目大多无法像Ngnix或者OpenCV一样实现“开箱即用”,尤其是面临定制化应用场景的时候。这种差异广泛体现在开发流程与测试方式上。造成差异的原因则归咎于深度学习的原理。
深度学习是机器学习的一个分支。它通过使用机器统计大量有标记数据来获得数据中隐含的潜在规律。在过往的技术方案中,这些规律可能是由具备行业知识的专家来人工推导得到的。而如今“寻找规律”这件事情交给机器做时,人类不得不为其付出代价。
最显著的代价是规律的可解释性。深度神经网络包含大量的运算参数,这些参数数量与其要实现的任务难度基本上呈正相关。大量的参数以类似生物神经元的方式链接在一起,形成一套复杂的运算架构。参数数量之大、结构之繁杂、使得人类基本上无法用可以理解的逻辑去解释神经网络的判别过程。这种状况导致神经网络评价时,针对某个单一样本的评价基本上没有价值与意义。而是要看大规模数据下的整体表现。这给习惯了常规软件测试的团队带来来全新的认知挑战。
第二个代价是对大规模数据的依赖性。深度学习总是被有意无意的指称为“人工智能”,但是,行业内也流传着一句话“有多少人工才有多少智能”。寻找规律的工作交给了机器,但是用于规律寻找的有效数据,还是离不开人工。面对不那么“智能”的神经网络,输入数据某种程度上决定了学习到的规律质量。体现在具体的工作内容中,你会发现开发工程师的很大一部分工作都是在处理数据。从真实世界获得的数据往往要经过一系列处理才能达到可用的状态。这些数据不仅仅要用于模型的训练,还要用于模型的评价。毫不夸张地说,引入深度学习之后,项目开发不仅仅是软件工程,更是数据工程。这也是深度学习开源项目无法像其它开源项目那样开箱即用的原因——数据的分布是不一样的。企业的应用场景往往需要额外的私有数据才能达到理想的效果。