我们这些以生产软件或管理软件团队为生的人,最终得到的报酬是改善业务流程,无论是使汽车自主化以提高安全性,节省人们的驾驶时间并降低成本;优化工业流程以提高生产率;还是使人工任务自动化。

我们中的大多数人通过编写 "经典 "程序,以高度可追溯的方式解决问题,但即使这些程序也会很快变得非常复杂。回想一下你参加过的所有软件项目,它们都超过了最初分配的时间,或者更糟糕的是,由于它们的复杂性不再能证明它们会带来的好处而被完全取消。随着时间的推移,我们在开发过程中加入了许多不同的方法,正如Container Solutions的联合创始人Jamie Dobson在WTF的其他地方所探讨的那样,有的成功,有的不太成功。

"

DevOps "是云原生文化的核心部分,也是其中之一,它特别注重持续交付和通过更短的反馈环路提高代码质量。

如果这还不够复杂,让我们再增加一层复杂性:机器学习系统依靠的是随机地从输入的数据中提取信息的代码,使决策过程实际上无法追踪。

首先,你需要生成一个标记的数据集。此外,你需要收集更多的计算资源,并让你的数据科学家可以使用它们。然后你在测试数据集上报告你的结果,一切都很好,人们希望把它带入生产。

现在你的问题真正开始了,因为事实证明,实际的人工智能代码往往是整个项目中最小的部分。你需要扩大你已经很复杂的DevOps管道,不仅要运送代码,还要运送随机的黑盒子。然而,在这个过程中,你还需要对黑盒和代码所做的事情有一些保证和可审计性--或者至少能够在问题发生时提前停止它们,或者回滚到模型的旧的稳定版本。在这一点上,你将与谷歌写下他们臭名昭著的论文《机器学习系统中的隐藏技术债务》时的情况大致相同。

这就是AIOps领域的起点。简单地说,它涵盖了你在生产中成功运行AI所需要的一切,在我们已经知道的DevOps的基础上增加了一些关键功能。具体来说:

  • 数据的版本化和可搜索性
  • 模型的测试、重用和版本化
  • 用于模型预测和流入数据的服务水平指标(SLA)
  • 可视化影响的能力

数据的版本化和可搜索性

我们所有的人工智能模型都从数据中获得业务逻辑。每个项目都是从一个请求开始的。"你能预测我们的电力消耗吗?这将大大减少成本。如果这是第一次有人关注耗电量,你现在就会开始与公司所有相关人员交谈,试图找出影响耗电量的原因。这很快就会变得非常棘手,所以记录可用的数据集,给它们打上标签,并使它们可以被搜索,是一个好习惯。下一个做任何与公司电力消耗有关的事情的人都会感谢你。

当我们有了漂亮的分类数据后,我们面临着下一个障碍。在不同的数据集上训练的两个模型很少会在相同的输入下产生相同的结果,所以不同模型的结果总是需要用相同的数据集来比较。试想一下,你的一个数据科学家出现在你的门口说。"我在MNIST数据集上取得了99%的准确率,而人B在CIFAR-10数据集上只有90%。我的模型要好得多"。你肯定会质疑这种说法,尽管它有可能是正确的。如果我们把自己的数据集记录得足够好,就不应该出现这种情况。

上面的例子很直接,因为我们有两个完全不同的数据集,目标也不同,但同样的问题也发生在不同版本的数据集上,比如PASCAL VOC数据集。如果一个模型在VOC 2007上达到了很高的准确率,那么它在2012年的版本上也会达到很高的准确率,但这是没有保证的。

正因为如此,我们必须对我们的数据集进行版本管理,并跟踪每个特定训练所使用的版本。如果你的模型不断地提供请求,并为其接收地面真相,这就变得更加重要了。让我们考虑下面的例子。你部署了一个模型来检测一张图片是否包含一只猫或一只狗,并有一个按钮让用户表明模型是否正确。一段时间后,你想用新注释的数据重新训练你的模型。如果你只是把你的新数据做一个随机的训练测试分割,你的测试集会与之前的训练运行不同,使得你的结果没有可比性。相反,最好是将新的例子添加到你的训练数据中,并使用相同的测试集。这样你就可以验证模型是否在新数据的帮助下变得更好,或者人们只是搞了些小动作,错误地注释了你的数据。

测试、重用和模型的版本化

通过通用函数和库重用代码是每个软件开发者工具包的标准部分,这与测试和DRY(不要重复自己)的DevOps实践有很大关系。

但对于人工智能来说,情况并不那么好。作为一个例子,考虑一下我们经常使用的数据转换,例如返回给定日期的星期几。

如果我们不需要为这些事情写自己的函数,那就太好了。在人工智能领域,我们在这方面越来越好。特别是scikit-learn和它的基于转化器的API,在涉及到表格数据时帮助很大。在你的公司内部转换数据时,你应该支持类似的方法。你不希望你的数据科学家花时间重写已经存在的代码。这样做的一个重要的有益的副作用是,你使用的是已经经过适当测试的代码:没有人喜欢花时间去调试别人的代码。此外,有了测试用例,就可以记录下各个转化器应该如何使用,以及它实际上能处理什么样的情况。

然而,这只是人工智能中DRY的一个例子。我们还看到,在其他地方,预训练模型的可用性和使用越来越多,例如苹果的Core ML,来自DeepL 和谷歌的翻译服务,以及视频的字幕服务。

此外,越来越多的模型大量使用转移学习,允许他们从不同的神经网络中获取训练好的部分并重新使用它们。这始于图像识别中的ImageNet,并扩展到自然语言处理(NLP),首先是单词嵌入,如今则是BERT等模型及其所有后继者。一个很好的例子是拥抱脸库,它允许你在自己的模型中重用预先训练好的NLP模型的一部分。

然而,使用模型的一部分需要比重用转化器更相信别人的努力。你不仅要假定所提供的代码是有效的,而且还要假定模型是以合理的方式训练的,并且API总是返回给你相同的模型。还要记住,你是在重复使用别人的神经网络中间的一些神经元的值,并将其输入你自己的神经网络。另一个人并不关心你这样做,而是像使用一个类的私有属性。它就在那里,你可以使用它......但它可能会完全改变,因为开发者只保证你的公共API。

让我们详细说明一下。词嵌入可以通过预测其周围的词来进行训练。这方面的一个例子可以在左上图中看到。这将产生两件事:预测单词的整体准确性,以及对相关单词的嵌入(左上图)。

你可以利用这些嵌入并将其用于另一项任务,例如预测一个单词是否是诅咒词(左下图)。你的模型将大大受益于这些嵌入,因为骂人的词可能会有相互接近的嵌入。现在想象一下,有人在训练新的词汇嵌入:诅咒词仍然有可能是接近的,但是维度很容易被洗牌,而且值也可以有很大的变化(图右上)。作为一个例子,请看下面的图。它绘制了3.1.1和2.3.7两个版本中 "WTF "一词的前20个维度。仅仅通过目测,你就可以看到它们是非常不同的。

这就是为什么你需要确保每次都得到相同的模型版本:如果你的模型的权重被冻结,你的模型就会给出错误的预测(图右下)。这是你应该对你的模型进行版本管理的一个原因,但还有另外一个原因。如果你开发了一个新的模型并将其部署到生产中,然后意识到它对边缘情况的处理比以前的模型差得多,或者对请求的回复时间太长,你会想恢复到以前的模型。但显然,为了做到这一点,你需要把它放在某个地方,并且能够很容易地识别它。

模型预测的SLI和流入的数据

与正常的DevOps程序类似,我们应该在生产中监控我们的模型。他们最终会失败,如果发生这种情况,我们希望得到提醒。因此,我们应该定义服务水平指标,以及当这些指标未被满足时的警报规则。正如在DevOps中,监控响应时间对于保证良好的客户体验是至关重要的,但ML模型还有一些额外的陷阱。

正如谷歌关于在生产中测试ML

文章中所讨论的,我们需要跟踪模式和特征的倾斜,还有模型的老化:

模式的倾斜是指你的模式在训练和生产中的服务之间发生变化。最简单的例子是,你的训练数据有四列,但在生产中只有三列交给了模型。这肯定会导致你的预测出现问题。

当特征在生产中与训练中的设计不同时,就会出现特征偏移。让我们来看看这个例子。你的模型需要过去24小时内的客户数量。在训练数据库中,客户数量是按每小时的客户数汇总的。在生产中,这可能只是一个数组,只要记录是24小时的,就会删除条目。构建两者的总和将产生不同的结果,因为训练数据库中的总和将一次性删除一小时内的所有客户,而在生产中,他们将被逐渐删除。

最后,我们需要接受我们的模型正在老化。我们的大部分输入数据是由人类产生的,他们的行为会随着时间而改变。由于模型只能捕捉其训练数据中的行为,这需要更新,否则模型的预测和实际结果将随着时间的推移而进一步偏离。试想一下,你训练了一个预测2019年11月面罩消费的模型。它的预测可能不会长期准确,即使它没有突破。鉴于其训练数据,它根本无法预测消费的上升。可以帮助检测此类问题的技术是漂移检测(见下图)和离群点检测,如Seldon Core提供的技术,以及开源的替代技术。

可视化影响

几乎每个软件产品都有某种前端,以可视化其影响。毕竟,影响是你的客户所支付的东西。对于传统的软件来说,这可能已经是一项复杂的任务。然而,有了人工智能,你会得到一个额外的需要解释的点:虚假预测。由于人工智能是概率性的,它将会犯错误。有时你可以说,一个错误可以通过重新训练模型来修复。你可以这样做一次或两次,但后来人们开始质疑人工智能是否真的是一种方式,因为它犯了很多错误。

为了避免这种情况,重要的是要尽早设定预期,让客户明白错误会发生,以及他们将得到什么样的好处作为交换。就应用的可接受的错误预算和预期收益达成一致。将这两点持续可视化,你就可以免去很多讨论,因为人们可以很容易地看到他们从使用人工智能中获得了什么。

结论 总

而言之

,人工智能仍然是一个相对年轻的领域,其他学科的许多程序员认为理所当然的事情,在人工智能领域绝不是必然的。这包括但不限于版本控制、SLI和代码重用。然而,随着人工智能被用于越来越多的生产环境,该领域正在追赶计算机科学的其他分支。我还希望看到很多工具至少能使AIOps的一部分自动化,并最终导致低代码或无代码的解决方案,利用已经写好的转化器和AI。

【翻译】我们为什么要关注AIOps?相关推荐

  1. 【论文翻译】基于图关注网络的异构网络类型感知锚链路预测

    基于图关注网络的异构网络类型感知锚链路预测 摘要 跨异构网络的锚定链路预测在跨网络应用中起着举足轻重的作用.异构网络锚链路预测的难点在于如何综合考虑影响节点对齐的因素.近年来,基于网络嵌入的锚链预测已 ...

  2. 【论文翻译】基于分层关注和时间RNN的动态异构网络链路预测建模

    基于分层关注和时间RNN的动态异构网络链路预测建模 摘要 网络嵌入的目的是在获取网络结构信息的同时学习节点的低维表示.它在链路预测.节点分类等网络分析任务中取得了巨大的成功.现有的网络嵌入算法大多集中 ...

  3. 翻译Raywenderlich 最新文章What’s New in Swift 4

    Swift学习交流群: 313838956 . 本群由Guards翻译组创建并维护, 志于给认真想学习Swift的同学打造一个良好的交流圈子. 同时群内会不间断分享Swift的资料, 如果你想学习Sw ...

  4. 计算机怎么调整显示英语翻译,翻译词汇:计算机显示英语词汇 口译词汇

    计算机显示相关词汇 ASIC: Application Specific Integrated Circuit(特殊应用积体电路) ASC(Auto-Sizing and Centering,自动调效 ...

  5. Discuz如何开发关注功能

    本文实现功能: 1.关注和取消关注用户 2. 判断与用户之间的关注关系 实现效果 点击关注后显示已关注,取消关注后显示关注ta 实现方案 用户空间的入口是home.php文件,所以我们需要先从home ...

  6. 大学英语四级翻译技巧讲解

    四级段落翻译的评分标准: 本题满分为15分,成绩分为六个档次:13-15分.10-12分.7-9分.4-6分.1-3分和0分. 13-15分 译文准确表达了原文的意思.用词贴切,行文流畅,基本上无语言 ...

  7. 翻译: Transformer一种用于语言理解的新型神经网络架构 Google AI

    神经网络,尤其是循环神经网络(RNN),现在是语言理解任务(如语言建模.机器 翻译和问答)的主要方法的 核心.在" Attention Is All You Need "中,我们介 ...

  8. 机器翻译虽然火,但距离取代人工翻译还有一段距离

    智造观点 对现在发展迅猛的人工智能来说,大多数人们很容易误读和高估其取得的成就.而这一点在人类语言领域中尤为明显,因为在这个领域,一些表象的进步就很容易被错误的暗示成AI具备更深层的能力. 过去的一年 ...

  9. 微信公众平台消息接口开发(3)中英翻译

    微信公众平台开发模式 微信 平台 消息 接口 英语翻译 互译   作者:http://www.cnblogs.com/txw1958/ 标题http://www.cnblogs.com/txw1958 ...

最新文章

  1. C# 以日期时间作为文件名学习总结
  2. 我的第一篇blog 【随意】
  3. WEB前端 vue学习二 组件之间的数据传递
  4. 企业网络高级技术-VTP中继协议(2)
  5. java mysql存储过程_JAVA调用MySQL存储过程
  6. Python进阶(十四) logging标准库
  7. 如何总结和整理学术文献?
  8. java IO流简述
  9. 电脑ps4,电脑也能玩PS4游戏 全新串流功能实测体验
  10. CAJViewer安装报错卸载报错打开报错解决流程
  11. win10小课堂:桌面快捷方式小箭头去除与恢复方法
  12. MAC 扩展屏,颜色描述文件
  13. 一台微型计算机的好坏 主要取决于,计算机一级MSOffice应用选择题
  14. 在windows XP运行CISCO7200路由器仿真器
  15. 【案例1】图书馆管理系统毕业论文
  16. 数学建模国赛经验分享
  17. 数据库连接超时的处理
  18. 全球与中国智能监控摄像头市场现状及未来发展趋势
  19. ACM-ICPC 2018 南京赛区网络预赛:E :AC Challenge题解
  20. 转载_树莓派4B的详细资料说明

热门文章

  1. 大数据岗位更看重学历还是工作经验?
  2. (个体户)注册公众平台步骤
  3. [Python]_[初级]_[使用PyCharm时不识别根包位置和Debug时报ModuleNotFoundError错误]
  4. huggingface.transformers任务简介
  5. 电线电缆线缆字母符号代表什么意思
  6. 浏览器支持的视频和音频格式
  7. html上图片用js绘制点,用 js + html 描图 与画箭头
  8. 案例:淘宝用户行为数据分析(SQL实现)
  9. 编码的奥秘:手电筒剖析
  10. 自己开发基于Web的打印控件,真正免费不是共享