数据正在快速取代代码,成为了软件开发的基础。以下是组织如何在开发人员驾驭这种范式转换时预测流程和工具的转换的。
随着企业开始指望人工智能来推动其数字化转型,软件开发也将发生巨大变化。
公司已经准备好让开发人员跟上机器学习算法和神经网络的速度,并期待着看到人工智能将如何使许多开发和测试功能自动化。
但许多企业没有注意到的是软件本身的性质也在发生着变化。
今天,应用程序是确定的。它们是围绕循环和决策树构建的。如果应用程序不能正常工作,开发人员就会分析代码并使用调试工具来跟踪逻辑流程,然后重写代码以修复这些错误。
而当系统是由人工智能和机器学习驱动时,应用程序就不是这样开发的。虽然,有些公司有时会为算法本身编写新的代码,但是大部分工作是在其他地方完成的,因为他们会从开源库中选择标准算法,或者从他们的人工智能平台中选择可用的选项。
然后,通过选择正确的训练集并告诉算法哪些数据点(或特征)是重要的以及它们应该被加权多少,这些算法最终被转换成了工作系统。
这种将数据作为开发软件系统核心的转变,使得公司不仅需要重新思考他们将如何开发软件,还要重新思考他们成功驾驭这种范式转变时所需的工具和流程。
对“软件2.0”的介绍
在去年的Spark+AI峰会上,特斯拉人工智能总监Andrej Karpathy谈到,这家自动驾驶汽车公司正在向这种新的代码开发方式过渡,他称之为软件2.0。
人工智能驱动的优化算法,如神经网络,可以针对一个问题,尝试各种解决方案的评估标准,直到找到他们所认为的好的解决方案。因此,例如,该系统可以通过数百万张标签图像来学习区分汽车和行人。
“我们设计得更少了,事情也做得更好了,”他说。
但是当这种方法不起作用时会发生什么呢?例如,当特斯拉的自动驾驶汽车在通过隧道时无法确定是否需要打开挡风玻璃雨刷时,解决办法不是深入研究机器学习算法,找出它们的不足之处。
相反,该公司会发现其训练数据中没有足够的汽车通过隧道行驶的例子。解决办法是从隧道里拍摄的汽车中提取更多的图像,并发送给人类进行分类。
“作为一名博士生,我花了很多时间来研究模型和算法,以及该如何训练这些网络,”Karpathy说。“但是在特斯拉,我大部分时间都在整理数据集。”
但管理训练数据并非只是让人类看到一组图像并给它们贴上标签那么简单。首先,开发人员需要对数据本身有深刻的理解。例如,一个观察汽车变道静态图像的系统很难判断出汽车的转向信号灯是否正在闪烁。解决这个问题需要回到训练图像上,并对它们进行不同的标注。
但是现在改变图像的标记方式可能意味着许多以前分类的图像现在也须重新标记。
此外,人类在给图像贴标签时也可能会出错,或者彼此有不同看法,或者图像本身也可能会有问题。这意味着须有一个逐步升级和跟踪问题的过程。
特斯拉开始这项工作时,管理这种新的软件开发方法的流程和工具并不存在。
“在软件1.0中,我们有IDE来帮助我们编写代码,”karpathy说。“但是现在我们没有显式地编写代码,而是在不断地积累和修改数据集,它们实际上就是代码。数据集的IDE是什么?”
从代码到数据
Alex Spinelli在去年成为LivePerson的技术官之前,曾领导过亚马逊的 Alexa,他亲眼目睹了开发过程的这种转变。
“以前,会有决策树、路径、案例陈述,”他说,而现在开发人员须知道要有足够的数据,有正确的例子,以保障算法有继续工作所需的燃料。“我们实际上正在为我们所支持的行业创造新的算法。”
20多年来,LivePerson一直在帮助Home Depot、Adobe、汇丰银行和欧莱雅等公司与其客户沟通。2016年,它开始向人工智能聊天机器人转变。
为了开发聊天机器人,该公司首先从带有人类标签的例子开始,比如说,客户问题。“我有10万种不同的人们想要表达‘我想付账’的方式,”他说。“这就是开始。”
一旦有了足够的数据,下一个挑战就是找出哪些属性是重要的,他说。例如,自动化系统可以提取相关性,但可能无法确定因果关系。虽然时钟经常会在日出时响起,但这并不意味着闹钟会导致太阳升起。
“决策是在如何衡量数据的某些属性或特征方面做出的,”他说。“你需要能够花大量时间来思考这些问题的专家。”
如今,根据客户的不同,LivePerson已经可以理解65%到90%的客户问题了,公司正在不断尝试通过使用人工智能技术(如无监督学习和转移学习)以及人工输入来提高这一比例。
偏见是新的错误
当人工智能系统不起作用时,有三种主要的方法来解决这个问题。
首先,问题可能出在算法本身。但这并不意味着开发人员需要深入代码。通常,问题在于为这项工作选择了错误的算法。
“须有人做出决定,认为这个算法比那个更好,”Spinelli说。“这仍然是人类所面临的挑战。”
接下来是算法的调整。算法关注的是哪些特性,以及每个特性的权重是多少?在算法有自己特点的情况下,这可能会很复杂。
预测某人是否有良好信用风险的系统可以查看固定数量的数据点,并且可以提取和分析其推理过程。但是,比如说,一个在图像中识别猫的系统可能会产生一个人类完全无法理解的过程。这可能会给金融服务公司带来合规性问题,或者可能会在医疗保健应用和自动驾驶汽车方面危及人们的生命。
然后是数据本身所引起的问题。“你从哪里收集你的数据,它来自什么群体--这些都是会产生偏见的地方,”Spinelli说。“这可能是对种族或性别的偏见,也可能只是一种有负面商业结果的偏见。”
要弄清楚问题是出在算法上、参数上还是在数据中可能很具有挑战性,他说。“我认为我们还没有真正解决这个问题。”
Spinelli补充道,当今的世界正处于一个独特的境地当中,技术正在从研究实验室中走出来,并直接投入了生产。
“你可以看到很多来自科学家的东西,他们没有运行关键任务系统的丰富经验,”他说,并补充道,缺乏标准和实践。“它们正在进化,但这是一个大问题。现在还不够成熟。”
例如,大多数现成的算法都没有能力解释为什么会做出特定的决定。
LivePerson使用了百度的Ernie和谷歌的Bert开源自然语言处理算法。“他们有不错的审计和可追溯性能力,”Spinelli说。“但是,总的来说,它是透明的。”
他说,当LivePerson需要构建自己的系统时,这种功能就是须的。“我们构建算法的方式是有可追溯性的,所以你可以问算法,‘你为什么要做出这个回答?’它会告诉你,‘这是我所看到的,这是我如何阅读它和如何评分的。’”
AI的版本控制是关于数据的
在人工智能系统中发现和修复问题已经足够困难了。但是修复、持续改进和对模型漂移的修正--所有这些也都是对系统的频繁更改。
传统的软件开发过程有版本控制来跟踪哪些代码行被更改了以及谁进行了更改。但是,如果更改不在代码中,而是在数据或参数中时,又会发生什么?又或者当系统内置了持续学习的反馈回路?
技术咨询和系统集成公司Insight的数据和人工智能架构师Ken Seier表示:“你不能因为没有可重现的结果而让训练数据发生变化。
传统的DevOps工具对此无能为力,他说。“你需要在数据管道中添加额外的步骤。”
他说,构建人工智能模型新实例的开发团队需要能够对所使用的数据进行快照,并将其存储在存储库中。“然后进入一个测试环境,在这个环境中,他们将针对已知的场景运行它,包括审计场景和合规性场景,以及测试数据集,以保障它们具有一定的准确性。”
他说,大多数公司都在自己构建这些工具,主要的云人工智能平台供应商正在将许多这种功能放在适当的位置,但仍然缺少关键部分。
同样,你须开发一个自动化的过程来改变模型的调整方式,并测试各种算法,以了解哪种算法在特定情况下会表现更好。
他说,理想情况下,如果一个算法偏离了轨道,自动化过程就可以重新训练模型,这样一切都可以恢复正常了。“如果你不能让模型再次可用,你就需要提前有一系列的回滚选项。”
对于传统的软件开发,这可以简单地恢复到软件的先前工作版本。但是随着人工智能会因环境变化而偏离轨道,这可能是无法做到的。
“当软件不起作用而他们又不能重新训练它时,会发生什么?”他问道。“你让他退出来,依靠人工操作吗?你有一个允许人类做出这些决定的业务流程吗?对于自动驾驶汽车,这是否意味着他们会关掉汽车?”
处理数据漂移
训练数据通常是时间的快照。当条件改变时,模型就变得不那么有效了。为了应对这种趋势,公司需要不断地根据真实数据测试他们的模型,以保障系统仍然有效。
“如果他们用30天的时间来训练模型,那么每两周他们就应该设置一个新的30天的时间来识别是否出现了问题,”Seier说。
当人工智能系统改变它正在观察的行为时,这可能会变得很复杂。
例如,使用人工智能系统来查看历史数据,看看工厂设备何时有可能损坏。如果工厂随后使用了这些预测来改变修理计划,那么这些预测将不再有效---但是在新数据上重新训练模型又将导致一系列的问题,因为机器将在没有人工智能干预的情况下再次开始损坏。
“无人驾驶汽车面临的挑战之一是如何应对其他无人驾驶汽车,”Seier说。“他们是在有人驾驶汽车的环境中接受训练的,自动驾驶汽车的行为也有所不同。”
可解释的人工智能公司Fiddler Labs的联合创始人兼执行官Krishna Gade表示,他希望看到人工智能和机器学习系统的集成开发环境能够以数据为中心。
“我们需要一个IDE,它可以方便地导入和探索数据,以及清洁和整理表格,”他说。“Jupyter笔记本有些用处,但它们也有自己的问题,包括缺乏版本控制和审查工具。”
他说,随着越来越多的模型被投入生产,能够管理各种版本变得越来越重要了。“Git也可以用于模型管理。然而,它无法扩展到大型数据集。”
数据安全的挑战
随着公司转向以人工智能为动力的软件开发实践,他们也面临着一系列新的安全挑战,许多人对此毫无准备。
例如,当系统由数据科学家而不是传统的软件工程师创建时,安全性可能是事后才想到的。第三方和开源人工智能算法也可能有自己的问题,包括漏洞和不安全的依赖关系。
“让开发人员及时使用新的、修补过的代码是很重要的,”为科技行业服务的全球公共政策公司Access Partnership的全球数据和信任主管Michael Clauser表示。
第三方供应商的专有代码通常是专有的,无法分析。
“可以肯定的是,大型数据密集型互联网公司和其他蓝筹股在自己开发和部署人工智能的过程中,都会为网络安全这一小事绞尽脑汁,”Clauser说。“对于资源紧缺的早期初创企业来说,情况可能并非如此,他们更感兴趣的是展示自己的人工智能能做什么,能解决什么问题,而不是担心有一天黑客会让自己的人工智能成为问题本身。”
人工智能算法还必须与传统系统对接,包括数据库和用户界面。当安全专家没有预先参与安全过程时,错误是很常见的,甚至是很可能的。
此外,人工智能系统通常会建立在新的云人工智能平台上。这里的安全风险尚不清楚。但是人工智能所面临的最大安全挑战是数据。人工智能系统需要访问操作数据,以及训练数据和测试数据。公司经常会忘记锁定最后两组操作。此外,数据科学家也更喜欢在构建他们的人工智能模型时使用清晰的测试数据,而不是使用加密或标记化的数据。一旦这些系统投入运行,缺乏加密就成为了一个主要的漏洞。
一家目前正在处理其人工智能系统潜在安全风险的公司是在线文件共享供应商Box。
“我们告诉客户,给我们那些你珍贵的内容吧,那些能让你谋生的内容,”该公司的CISO Lakshmi Hanspal说。
Box现在正致力于使用人工智能来从内容中提取元数据,以改进搜索、分类和其他功能。例如,Box可以自动从合同中提取条款和价格,她说。
为了构建新的人工智能系统,Box正在小心翼翼地保障自己不要绕过其传统的安全控制级别。
“无论是人工智能还是非人工智能,我们都有一个安全的开发流程,”她说。“它符合ISO安全标准。Box中有许多管道,但是它们都遵循一个类似的过程,通过内置的设计来实现安全性。”
其中包括加密、日志记录、监控、认证和访问控制,她说。
然而,Deloitte & Touche的云策略官David Linthicum表示,大多数公司并没有在人工智能的开发过程中加入安全性。
事实上,大约75%的组织只是在事后处理安全问题,他说。“在事情发生后才这样做就如同当卡车沿着街道行驶时试图更换卡车轮胎一样。”