发布时间:2019-09-12 发布者:本站
AI正在改变所有业务功能,软件开发也不例外。机器学习技术不仅可以用于加速传统的软件开发生命周期(SDLC),它们为发明技术提供了新的范例。
传统上,开发计算机程序需要您事先准确指定系统要执行的操作,然后手动设计该技术的所有功能。可以以清晰的方式编写许多任务,因为AI出现之前的计算机仍然非常强大。
但是,有许多任务和决策太复杂,无法以严格的,基于规则的方式教授计算机。传统的软件开发不可能实现看似简单的活动,例如识别互联网上的照片或视频是否是猫。鉴于可拍摄的大量猫照片,没有工程师团队可以列出可靠识别猫的所有规则以及可能出现在媒体中的所有其他可能的对象。
机器学习从根本上改变了软件开发范式
进入人工智能技术,如机器学习和深度学习。在这些方法中,工程师不提供制定决策和采取行动的计算机规则。相反,她计划并准备特定于域的数据,这些数据被输入到学习算法中,这些算法经过迭代训练并不断改进。机器学习模型可以从数据推断哪些特征和模式是重要的,而人类没有明确地编码知识。 ML模型的输出甚至可以让人类惊讶并突出我们没有想到的想法或细节。
因此,人工智能对计算机编程的最深刻影响是揭示人类如何感知,定义和执行软件开发。作者,科学家和谷歌研究工程师Pete Warden认为,随着知识在开发者社区中的传播,将会有很长一段时间,但十年后我预测大多数软件工作都不会涉及编程。 ”
特斯拉人工智能总监的前OpenAI研究科学家Andrej Karpathy对此表示赞同。 “未来的很大一部分将不会维护复杂的软件存储库,编写错综复杂的程序或分析它们的运行时间。它们收集,清理,操作,标记,分析和可视化为神经网络提供数据的数据。”Karpathy描述了海洋变化高度可信的见解:“神经网络不仅仅是另一种分类器,它们代表了我们从根本上改变了开始编写软件的方式。它们是软件2.0。”
他将Software 1.0的“经典堆栈”描述为计算机的明确指令,由程序员用Python或C ++等语言编写。传统的软件开发生命周期通常从需求定义(即技术规范)开始,然后转向设计和开发。一旦构建了可行的原型,就会执行QA测试。最后,一旦产品通过集合,它将被部署到生产中并且必须进行维护。敏捷流程可以加快这一周期,因为工程师将选择较小的功能集,专注于2-4周的冲刺,而不是尝试一次构建整个软件。无论是敏捷还是瀑布,这个过程基本相同。
随着时间的推移,这些系统变得极其复杂,需要多个依赖性和集成以及层功能和界面层。必须手动管理和更新所有这些组件,从而导致不一致和未解决的错误。
虽然机器学习开发有其自身的调试和维护挑战,但Karpathy强调软件2.0已经变得非常可行和有价值这一事实,因为“现实世界中很大一部分问题具有使收集数据更容易”的功能“(或者更一般地说,识别理想行为而不是明确地编写程序。“从软件2.0中受益最多的领域包括计算机视觉,语音识别,机器翻译,游戏,机器人和数据库。
Karpathy还引用了新范式的好处:
更均匀,更易于管理
可以轻松烘焙成硬件
连续运行时和内存使用
高便携性
高灵活性和集成
更容易为未来的开发人员学习
比功能/垂直(即图像/视频,声音/语音和文本)中的一些最佳人体编码器更好
然而,专业人士并非没有缺点。许多机器学习方法的关键限制是我们人类无法完全理解这些复杂系统是如何工作的,这使得它们在我们看来是“黑盒子”。由于缺乏理解和控制,另一个挑战是算法偏差和偏执机器人等有缺陷的模型的无意识和令人尴尬的后果。
传统软件从ML技术中得到改进
但是,传统的软件开发并没有消失。开发高性能机器学习模型只是AI技术生产的一个步骤。正如一篇受欢迎的Google论文断言,只有一小部分真实世界的机器学习系统由机器学习代码组成。
数据管理,前端产品接口和安全性等关键组件仍需要由传统软件处理。但是,使用传统SDLC开发的技术仍然可以通过以下方式受益于机器学习方法:
1.快速原型制作。将业务需求转变为技术产品通常需要数月甚至数年才能完成计划,但机器学习通过让较少技术专家使用自然语言或可视化界面开发技术来缩短此过程。
2.智能编程助手。开发人员大部分时间都在阅读文档和调试代码。智能编程助手可以通过提供即时支持和建议(例如相关文档,最佳实践和代码示例)来缩短这一时间。此类帮助程序的示例包括Kite for Python和Codota for Java。
3.自动分析和错误处理。编程助手还可以从过去的经验中学习,以识别常见错误并在开发过程中自动标记它们。部署该技术后,机器学习也可用于分析系统日志,以便快速甚至主动标记错误。将来,软件可以动态更改,以响应错误,无需人工干预。
4.自动代码重构。清洁代码对团队合作和长期维护至关重要。随着公司升级其技术,大规模的重构是不可避免的,而且往往是一种痛苦的必要性。机器学习可用于分析代码并自动优化代码以实现可解释性和性能。
5.准确估计。众所周知,软件开发超出了预算和时间表。可靠的估算需要深厚的专业知识,对环境的理解以及对实施团队的熟悉程度。机器学习可以训练过去项目中的数据 - 例如用户故事,特征定义,估计和实际情况 - 以更准确地预测工作量和预算。
根据Forrester Research关于AI对软件开发的影响的报告,将AI应用于软件开发的大部分兴趣在于自动化测试和错误检测工具。
AI可以创建AI吗?
最后一个问题是人工智能能否创造人工智能,从而推翻人类对技术发展的需求。事实上,我们已经看到AutoML解决方案的巨大增长,旨在实现机器学习模型培训流程的自动化,减少数据科学家和工程师的工作量,并使领域专家能够培训生产质量模型。诸如H2O.ai的无人驾驶AI,Google Cloud的AutoML和Amazon Sagemaker等解决方案可自动化或简化关键组件,如数据准备,模型搜索和调优以及模型部署和扩展。