作者:探码科技, 原文链接: http://www.tanmer.com/blog/463
AI正在逐渐的改变所有业务功能,软件开发也不例外。机器学习技术不仅可以用于加速传统的软件开发生命周期(SDLC),也为技术创新提供了一种全新的范例。
传统上,开发计算机程序要求我们事先准确指定系统要做的事情,然后手工设计技术的所有功能。以明确的方式编码许多任务。然而随着时代的发展需求的不断提高,有许多任务和决定太复杂,无法以严格的,基于规则的方式教给计算机。即使是像识别互联网上的照片或视频是否属于猫这样看似简单的活动,也是传统软件开发无法实现的。鉴于猫照片可以采取的巨大排列,没有任何工程师团队可以列举所有能够可靠地识别猫的规则以及可能出现在媒体中的所有其他可能的对象。
机器学习从根本上改变了软件开发模式
进入人工智能技术,如机器学习和深度学习。在这些方法中,软件开发人员不会为如何制定决策和采取行动提供计算机规则。相反,他们会策划并准备特定领域的数据,这些数据被输入到学习算法中,这些算法经过迭代训练并不断改进。机器学习模型可以从数据中推断出哪些特征和模式是重要的,而无需人类明确地编码这些知识。ML模型的输出甚至可以给人类带来惊喜,并突出我们自己没有想到的观点或细节。
因此,人工智能对计算机编程的最深刻影响是揭示人类如何感知,定义和执行软件开发。
现任特斯拉人工智能总监的OpenAI研究科学家安德烈·卡尔帕西(Andrej Karpathy)表示,“未来很大一部分程序员不会维护复杂的软件存储库,编写错综复杂的程序或分析他们的运行时间。他们将会收集,清理,操作,标记,分析和可视化为神经网络提供数据的数据。“Karpathy用一种高度可引用的见解来描述海洋变化:”神经网络不仅仅是另一种分类器,它们代表了我们如何从根本上转变的开始编写软件。它们是软件2.0 。 “
他将Software 1.0的“经典堆栈”描述为计算机的明确指令,由程序员使用Python或C ++等语言编写。传统的软件开发生命周期通常从需求定义(即技术规范)开始,然后转向设计和开发。一旦构建了可行的原型,就会进行QA测试。最后,一旦产品通过集合,它将被部署到生产中并且必须持续维护。敏捷流程可以使这个周期变得更快,因为工程师将选择较小的功能集来专注于2-4周的冲刺,而不是试图一次性构建整个软件。无论是敏捷还是瀑布,这个过程基本上是相同的。
随着时间的推移,这些系统变得异常复杂,需要多个依赖关系和集成以及层功能和接口层。所有这些组件必须由人工手动管理和更新,从而导致不一致和无法解决的错误。
相比之下,机器学习模型推断出数据中的重要特征和模式。用Karpathy的话来说,软件2.0是以“神经网络权重”的形式编写的代码,不是由人类编写的,而是通过机器学习方法,如反向传播和随机梯度下降。更新模型需要使用新数据重新训练算法,这将改变模型的行为和执行方式。
虽然机器学习开发有其自身的调试和维护挑战,但Karpathy强调了这样一个事实,即软件2.0已经变得非常可行和有价值,因为“很大一部分现实问题具有收集数据更容易的特性”(或者更一般地说,确定一个理想的行为,而不是明确地编写程序。“从软件2.0中受益最多的领域包括计算机视觉,语音识别,机器翻译,游戏,机器人和数据库。
Karpathy还引用了新范式的好处:
然而,传统的软件开发并没有消失。培养高性能机器学习模型只是产品化AI技术的一个步骤。正如一篇受欢迎的谷歌论文所断言的那样,只有一小部分真实世界的机器学习系统由机器学习代码组成。
数据管理,前端产品接口和安全性等关键组件仍需要由常规软件处理。但是,使用传统SDLC开发的技术仍然可以通过以下方式受益于机器学习方法:
根据Forrester Research关于AI对软件开发影响的报告,将AI应用于软件开发中的主要作用总结为在于自动化测试和错误检测工具。
实际上,我们已经看到AutoML解决方案的巨大增长,这些解决方案旨在实现机器学习模型培训流程的自动化,减少数据科学家和工程师的工作量,并使领域专家能够培训生产质量模型。
诸如H2O.ai的无人驾驶AI,Google Cloud的AutoML和Amazon Sagemaker等解决方案可自动化或简化关键组件,例如数据准备,模型搜索和调整以及模型部署和扩展。
总结:随着人工智能技术的不断发展将会颠覆我们传统的软件制作,软件开发智能化不在是个趋势而是必然性的体现,探码科技作为新时代的软件技术商将利用更多新技术赋予软件制造更多智能化的可能!