对人工智能时代软件开发的重新思考

2019-10-28 02:16MariaKorolov
计算机世界 2019年40期
关键词:开发人员代码流程

Maria Korolov

随着企业开始寻求利用人工智能来推动数字化转型,软件开发也将发生巨大变化。

企业已做好了开发人员必须加快机器学习算法和神经网络速度的准备,他们期待看到人工智能推动许多开发和测试功能实现自动化。但是许多企业忽视了一件事情,那就是软件性质本身正在发生变化。

今天,應用程序是确定性的。它们的构建围绕的是循环和决策树。如果应用程序无法正常工作,那么开发人员将分析代码并使用调试工具来跟踪逻辑流程,然后重写代码以修复这些错误。

当系统由人工智能和机器学习提供支持时,应用程序的开发方式就不再是上述方式了。诚然,部分企业有时确实会自己为算法编写新代码,但是大多数工作是以另外的方式完成的,如从开源库中选择标准算法或从其人工智能平台中选择可用的选项。然后再通过选择正确的训练集,告诉算法哪些数据点或特征最重要以及应加权多少,将这些算法融入到工作系统中。

作为软件开发系统的核心,这种以数据为导向的转变不仅正促使领先的企业重新思考他们的开发软件方式,同时还促使他们重新思考成功应对这种范式转变所需的各种工具和流程。

引入“软件2.0”概念

在去年的Spark+人工智能峰会上,特斯拉人工智能总监Andrej Karpathy谈到了自动驾驶汽车企业如何过渡到这种新的代码开发方式,他将这种新的开发方式称之为软件2.0。

人工智能驱动的优化算法(例如神经网络)会针对一个问题尝试与评估标准相关的各种解决方案,直到找到最佳解决方案。例如,该系统会浏览数百万个被标记过的图像,以学习区分汽车和行人。他说:“我们的设计工作正在减少,但是事情却做得越来越好。”

但是如果这种方法不起作用会发生什么事情呢?例如,当特斯拉的自动驾驶汽车无法确定是否在穿越隧道时打开雨刮器时,解决方案并不是继续深入研究机器学习算法以找出问题所在。

相反,该公司发现其训练数据中关于汽车在隧道中行驶方面没有足够的示例。解决方案只能是从隧道中拍摄的汽车图像中提取更多图像,然后将其发送给人类进行分类。

Karpathy说:“在读博时,我花了很多时间在模型、算法以及如何实际训练这些网络上。但是在特斯拉,我的大部分时间都花在了处理数据集上。”

管理训练数据并不是像人们想像的那样让开发人员看着一组组图像并标记它们那样简单。首先,开发人员需要对数据本身有一个深刻的了解。例如,一个查看汽车变道的静态图像的系统将很难确定汽车的转向信号灯是否闪烁。解决该问题的办法是回到训练图像并对其进行不同的标记。

但是现在更改图像的标记方式意味着必须重新标记许多以前已经被分类过的图像。

此外,人们在标记图像时可能会犯错误,或者彼此标准不同,亦或是图像本身可能就有问题。这意味着必须有一个流程来逐步升级并跟踪问题。当特斯拉开始着手这项工作时,用于管理这种创建软件新方法的流程和工具并不存在。

Karpathy说:“在软件1.0中,我们有IDE来帮助我们编写代码。但是现在,我们不是在进行准确意义上的代码编写工作,而是在累积和批量处理数据集,但它们实际上又是代码。那么针对数据集的IDE是什么样子呢?”

从代码到数据

在去年跳槽成为LivePerson的首席技术官之前,曾负责亚马逊Alexa项目的Alex Spinelli亲眼目睹了这一开发过程的转变。

他说:“以前有决策树、路径和案例陈述。现在开发人员必须要知道需要有足够的数据和正确的示例,以确保算法工具能够保持工作。实际上,我们正在为我们支持的行业创建一些全新的算法。”

20多年来,LivePerson一直在帮助Home Depot、Adobe、HSBC和L'Oreal等公司与客户进行沟通。2016年,他开始使用由人工智能驱动的聊天机器人对原有范式进行转型。

为了开发聊天机器人,公司首先从由人工标记的客户问题示例着手。他说:“我有十多万种表达‘我想买单的说话方式。那就从这里开始。”

一旦有了足够的数据,下一个挑战就是弄清楚哪些属性是重要的。例如,自动化系统可以提取相关性,但可能无法确定因果关系。闹钟经常会在日出时响起,但是并不意味着闹钟响起会引起太阳升起。

他说:“如何加权数据的某些属性或特征要由人来做出。你需要能够花费大量时间思考这些问题的专家。”

今天,根据客户的不同,LivePerson可以理解65~90%的客户问题,同时公司正在不断尝试利用无监督学习和迁移学习等人工智能技术以及人工输入来提高这一比率。

偏见成为了新漏洞

当人工智能驱动的系统无法正常工作时,可以采用三种主要方法来解决这一问题。

首先,问题可能出在算法本身上。但这并不意味着开发人员需要深入研究代码。通常,问题的原因是选择了错误的算法。

Spinelli说:“人们必须做出一个决定,即该算法要优于其他算法。这仍然是人类面临的一项挑战。”

其次是算法的调整。算法着眼于哪些功能,每个功能是多少权重?如果算法本身拥有自己的功能,那么这一工作将异常复杂。

预测某人是否具有良好信用的系统可以查看固定数量的数据点,并且其推理过程可以被提取和被分析。但是一个可以识别图像中猫的系统可能会提出一个人类完全无法理解的过程。这可能导致金融服务公司的合规性问题,或者可能使人们的生命安全受到医疗保健应用和自动驾驶汽车的威胁。

数据本身也会导致一些问题。Spinelli说:“在哪里收集的数据,数据来自什么群体,都可能造成偏见。其有可能是针对种族群体或性别的偏见,也有可能只是针对业务结果的偏见。”

他说,弄清楚问题出在算法上、调整上还是数据上,可能是非常具有挑战性的。“我认为我们并没有真正地解决这一问题。”Spinelli补充道,当前的情况非常特殊,技术出现在研究实验室里并被直接应用到了生产当中。

“我们看到科学家提出了很多东西,但是这些科学家没有运行关键任务系统的丰富经验。目前业内也几乎没有什么标准和最佳实践。这是一个大问题。也就是说目前它们还不成熟。”例如,大多数现成的算法都没有能力解释为什么会做出某个特定决策。

LivePerson使用了百度的Ernie和谷歌的Bert开源自然语言处理算法。Spinelli说:“它们具有不错的审核和可追溯性。但是从总体上看,这还不够。”

当LivePerson自己构建算法时,他们将这种功能列入了需求。“我们是以一种可追溯性的方式构建算法的,所以当你问算法‘为什么给出这个答案?它们会告诉你‘这是我所看到的,这里是我的阅读方式和评分方式。”

人工智能的版本控制与数据密切有关

在人工智能系统中查找和修复问题非常困难。修复、正在进行中的改进以及模型漂移的校正等所有这些工作导致对系统的修改更加频繁。

传统的软件开发流程都有版本控制,以跟踪哪些代码行已更改以及谁进行了更改。但是当更改不是在代码中而是在数据或调整中时,情况会是什么样?当系统内置了针对持续学习的反馈回路时,情况又是什么样呢?

技术咨询和系统集成公司Insight的数据与人工智能首席架构师Ken Seier表示:“你无法自行更改训练数据,因为你没有可重复的结果。”

他说,传统的DevOps工具存在不足。“你需要在数据管道中添加其他步骤。”

构建人工智能模型新实例的开发团队需要能够快照使用的数据并将其存储在存储库中。“然后进入测试环境。在该环境中,他们将针对已知的方案(包括审计方案和合规性方案)以及测试数据集来运行它们,以确保它们具有一定的准确性。”

大多数企业都在自行构建这些工具,虽然主要的云人工智能平台供应商已将许多此功能部署到位,但是仍然缺少关键要素。

能够用于调整模型的自动化流程也必须要开发出来,以测试各种算法并查看哪种算法在特定情况下效果更好。

理想情况下,如果算法偏离了轨道,那么自动化流程可以重新训练模型,从而使一切重新运行。如果无法使模型再次恢复正常,那么则需要提前预备一系列后备选项。

使用传统的软件开发,恢复到该软件的先前工作版本非常简单。但是由于环境的变化,人工智能已经偏离了轨道,那么恢复或许已经变成了不可能的事情。

他问道,“如果软件无法运行并且无法重新训练,那会发生什么?你是否淘汰它们并依靠人类操作人员?你是否拥有可以让人类做出这些决定的业务流程?在使用自动驾驶汽车时,是否意味着它们会让汽车熄火?”

处理漂移

训练数据通常是即时快照。当条件改变时,该模型的有效性就会降低。为了应对这种漂移,企业需要针对真实数据不断对模型进行测试,以确保系统仍可正常工作。Seier称:“如果他们以30天为一个窗口来训练模型,那么他们应该每两周抓住一个新的30天窗口,并确定是否出现了问题。”

当人工智能系统更改了其正在观察的行为,那么情况很快就会变得复杂起来。举例来说,人工智能系统会查看历史数据,以查看工厂设备何时最有可能损坏。如果工厂随后使用这一预测结果来更改维修计划,那么这一预测结果在后面将不再有效,但是在新数据上对模型进行再训练将导致另外的问题发生,因为在没有人工智能干预的情况下,机器将再次开始损坏。

Seier说:“自动驾驶汽车面临的挑战之一是与其他自动驾驶汽车打交道。它们在人工驾驶汽车的环境中接受培训,而自动驾驶汽车的行为方式是不一样的。”

Fiddler Labs的联合创始人兼首席执行官Krishna Gade说,他希望看到一个针对以数据为核心的人工智能和机器学习系统的集成开发环境。他说:“我们需要一个能够轻松导入和浏览数据以及清理表单的IDE。Jupyter备忘录有些用处,但是它们也存在其他的问题,如缺少版本控制和检查工具。”

随着越来越多的模型投入到生产中,管理各种版本变得越来越重要。他说:“Git可以在模型中重用,但是它们不能扩展到大型数据集中。”

数据安全挑战

随着企业转向由人工智能驱动的软件开发实践,他们还将面临着许多新的安全挑战,而这是许多人无法预料的。

例如,当系统由数据科学家而不是传统软件工程师创建时,安全性可能事后才被想起。第三方和开源人工智能算法可能有其自身的问题,包括漏洞和不安全的依赖关系。

全球公共政策企业Access Partnership的数据和信任业务全球负责人Michael Clauser说:“开发人员使用最新修补的代码至关重要。”

第三方供应商提供的专有代码通常是专利性的并且无法分析。

Clauser说:“可以肯定的是,数据量繁重的大型互联网企业和其他蓝筹股企业在自己的人工智能开发和部署中正遇到了网络安全麻烦。对于为资源而苦恼的初创企业来说,情况可能并非如此,他们更关注的是展示自己的人工智能可以做什么,可以解决什么问题,而不是担心有一天黑客会把他们的人工智能系统变成问题。”

人工智能算法还必须与传统系统进行交互,包括数据库和用户界面。如果安全专家没有提前介入安全流程,那么出现错误将是非常常见的事情。

此外,人工智能系统通常建立在新的云人工智能平台上。此处的安全风险尚不为人所知。尽管如此,人工智能的最大挑战还是来自于数据。人工智能系统需要访问操作数据,训练数据和测试数据。企业通常会忘记锁定后两组数据。此外,数据科学家更喜欢构建自己的人工智能模型以使用非加密的测试数据,而不是使用加密或标记化的数据。这些系统一旦运行,缺乏加密就会成为一个严重的漏洞。

在线文件共享供应商Box是一家当前正在解决其人工智能系统潜在安全风险的公司。该公司的首席信息安全官Lakshmi Hanspal表示:“我们要告诉客户,请放心地将最宝贵的内容交给我们,我们将让这些内容给企业带来强大的生产力。”

Box现在正致力于使用人工智能从这些内容中提取元数据,以改善搜索、分类等功能。她举例说Box能够自动从合同中提取条款和价格。

对于构建新的人工智能系统,Box仍然非常谨慎地保留了其传统级别的安全控制。她说:“对于任何产品,无论是人工智能还是非人工智能,我们都有一个安全开发流程。它们与ISO安全标准保持一致。虽然Box内部有很多条线,但是它们都遵循着一个相似的流程,并通过内置的設计实现安全性。”其中包括了加密、日志记录、监视、身份验证和访问控制等措施。

德勤会计师事务所首席云战略官David Linthicum指出,大多数企业并未将安全性纳入其人工智能开发流程当中。实际上大约有75%的企业都是在事后处理安全问题。他说:“事后再做这一工作,就像当卡车在道路上行驶时试图更换它们的轮胎一样。”

本文作者Maria Korolov在过去二十年中长期关注新兴技术和新兴市场。

原文网址

https://www.cio.com/article/3437436/rethinking-software-development-in-the-人工智能-era.html?nsdr=true

猜你喜欢
开发人员代码流程
吃水果有套“清洗流程”
Semtech发布LoRa Basics 以加速物联网应用
创世代码
创世代码
创世代码
创世代码
违反流程 致命误判
本刊审稿流程
析OGSA-DAI工作流程
后悔了?教你隐藏开发人员选项