来源: 全球人工智能

概要:随着机器学习(ML)社群持续积累了几年对于活跃系统(live systems)的经验,一种让人不舒服的趋势广泛地浮出水面:研发和部署机器学习系统相对来说是既快速又便宜的,但维护它们却很困难,并且成本昂贵。

一、介绍:随着机器学习(ML)社群持续积累了几年对于活跃系统(live systems)的经验,一种让人不舒服的趋势广泛地浮出水面:研发和部署机器学习系统相对来说是既快速又便宜的,但维护它们却很困难,并且成本昂贵。

这种对立可以用“技术债”的框架来理解。1992年WardCunningham引入了这个比喻,用来帮助解释在软件工程领域里因为进展快速而带来的长期成本。就像欠下财政债务一样,欠下技术债务也总是有充分的战略性原因。并不是所有的债务都是不好的,但是,所有的债务都需要付出利息。技术债可能通过:

  1. 重构代码(refactoringcode)

  2. 改进单元测试(improvingunit tests)

  3. 删除无用代码(deletingdead code)

  4. 降低依赖(reducing dependencies)

  5. 精简应用程序接口(tightening APIs)

  6. 以及改进说明(improving documentation)的方式来逐渐偿还。

这些行动的目标并不是为了增加全新的功能,而是为了使未来能够继续改进,减少报错,以及提高维护性。推迟偿还只会带来越来越高昂的成本。因为技术债会高速增长,所以它是非常危险的。

在这篇论文中,我们提出,机器学习系统有其特有的、带来技术债的能力,因为它们不仅有传统代码所有的维护问题,还要额外加上机器学习的一些特有问题。这种债务可能很难被察觉到,因为它存在于系统层面而不是代码层面。鉴于数据会影响机器学习系统的行为表现,传统的抽象化和边界可能悄悄崩溃(corrupted)或是失效(invalidated)。偿还代码层面技术债务的典型方法在系统层面的机器学习特有的技术债面前是不够的。

这篇论文并不提供全新的机器学习算法,而是寻求提高机器学习社群对于机器学习系统技术债的意识;从长远来看,实际操作中这些艰难的权衡必须得到考虑。我们关注于系统层面的交互和接口,因为这是一个可能会快速积累机器学习技术债的领域。在系统层面上,一个机器学习模型可能会严重侵蚀抽象化边界(abstractionboundaries)。多次利用输入信号(re-use)或连锁输入信号(chain)非常吸引人,但可能会无意中将几个系统组合起来(combine),也可能会令组合系统脱节(disjoint)。机器学习可能会被当作是黑匣,导致大量的“胶水代码”(glue code)或是大量校准层(calibration layers)。外部世界的变化可能会在无意中影响系统行为。在设计不够仔细的时候,即使是监控机器学习系统的行为都可能会使一件困难的事情。我们探索了一些机器学习特有的需要在设计系统时考虑到的风险因素。这些包括了:

(1)边界侵蚀(boundary erosion)
(2)纠缠(entanglement)
(3)隐藏反馈循环(hiddenfeedback loops)
(4)未申明的访问者(undeclared consumers)
(5)数据依赖(data dependencies)
(6)配置问题(configuration issues)
(7)外部世界变化(changesin the external world)
(8)系统层面的反面模式(anti-patterns)

二、复杂模型侵蚀边界

传统的软件设计实践表明,使用封装和模块设计的强抽象化边界有助于创造便于维护的代码,因为这让独立更改和改进变得很简单。给定元素中信息输入输出中,严格的抽象化边界有助于表达不变条件(invariants)以及逻辑一致性。

不幸的是,通过预先设置特殊的行为来迫使机器学习系统拥有严格的抽象化边界是非常困难的。事实上,机器学习恰恰是被应用在相反的情况中:当不依赖于外部数据、期望的行为便无法在软件逻辑里被有效表达时。真实世界并不能被干净整齐地封装起来。在这里,我们检验了一些会导致边界侵蚀、进而使机器学习系统中的技术债显著提高的情况。

1.纠缠

机器学习系统将信号混在一起,使它们互相纠缠,让独立更新变成一件不可能的事。比如,想象一下一个在模型中使用了特征x1,…xn的系统。如果我们改变了x1中输入值的分布,那么剩下n-1个特征的重要性、权重、或是用法(use)可能都会随之发生变化。增加一个新特征xn+1会导致相似的改变,就像移除其中任何一个特征一样。不存在真正意义上独立的输入。我们在这里称它为CACE法则:改变任何东西都意味着改变一切(ChangingAnything Changes Everything)。CACE不仅适用于输入信号,也适用于超参数(hyper-parameters)、学习情景(learningsettings)、抽样方法(samplingmethods)、收敛阈值(convergencethresholds)、数据选择(dataselection)、以及其他在本质上是微小改动的部分。

一种可能的缓解策略是,将模型分离开、转而提供集成模型。这个方法在分离式多层环境之类的情景下(例如在[14]中)是有用的,因为这样的环境下,这个方法能够让纠缠导致的各种问题都自然而然地消解。然而,在许多例子里,集成模型的效果非常好是因为它的组成模型各自的误差是不相关的。依赖于这样的组合会导致严重的纠缠问题:改进一个组成模型可能实际上让整个系统的准确度变得糟糕了——如果余下的误差与其它组成模型的误差相关性变得更强烈。

第二种可能的策略是,关注预测行为发生的变化。[12]中提出,用一个高维度可视化工具来让研究者们可以快速看到许多维度和切片上的效果。以切片为基础进行操作的矩阵可能也会非常有用。

2.嵌套修正

经常会出现一种情况:针对问题A的模型ma已经有了,但现在需要一个针对稍有不同的问题A’的模型。在这样的情况下,将ma作为输入信息、并学习一个小改变的模型是非常诱人的,它可以很快地解决问题。

然而,这种修正模型带来了新的对于ma的系统依赖,让未来分析改进这个模型的代价变得更为昂贵。当修正模型多层嵌套——针对问题A’’的模型是基于m’a习得的之类——来适应几个有些许不同的测试分布时,成本会变得更为高昂。一旦存在,嵌套修正模型会让改进陷入僵局,因为改进任何一个单独的组成部分的准确性事实上都会带来系统层面的损害。缓解策略是扩充ma,通过增加辨别特征让ma直接在它所在的模型里习得修正;或者接受为A’单独创造一个模型的成本。

3.未声明的访问者

许多时候,来自一个机器学习模型ma的预测能被许多程序访问的,或者是在运行时、或者是通过写入文件或是日志来让其他系统可以在之后访问。不对访问进行控制的话,一些访问者可能是未声明的(undeclared),悄无声息地将一个模型的输出结果输入给另一个系统。在更经典的软件工程领域,这个问题被称为可见性债务(visibilitydebt)。

未声明的访问者往好了说会带来昂贵的成本,往坏了说更是危险的,因为它们在模型ma与堆栈其他部分之间创建了一个隐藏的紧耦合。对ma的改变将很有可能也影响到这些其它的部分,也许通过无意的、尚未被理解的、会造成损伤的方式。实际操作中,这种紧耦合会逐渐增加对ma做任何改变的成本和难度,即使这些改变是为了提升性能。不仅如此,未声明的访问者可能会创建隐藏的反馈循环,在第4部分我们会更详细地讨论这个问题。

未声明的访问者可能很难被发现,除非系统在设计时就特意针对这个问题作了防护,比如限制访问或是有严格的服务级别协议(strictservice-level agreements, SLAs)。在缺乏限制的情况下,工程师们自然会使用手头最方便的信号,特别是当需要面对截止时间的压力时。

Google 顶级论文:机器学习系统,隐藏多少技术债?相关推荐

  1. Paper:《Hidden Technical Debt in Machine Learning Systems—机器学习系统中隐藏的技术债》翻译与解读

    Paper:<Hidden Technical Debt in Machine Learning Systems-机器学习系统中隐藏的技术债>翻译与解读 导读:机器学习系统中,隐藏多少技术 ...

  2. Google 开源最新机器学习系统 TensorFlow

      Google CEO Sundar Pichai 刚刚在官方博客 宣布 开源自己的最新机器学习系统 TensorFlow ,并称希望此举有助于机器学习社区通过代码而不是论文来更快地交换想法,然后反 ...

  3. 收藏 | Google 发布关于机器学习工程的最佳实践

    来源:TensorFlow 本文约17800字,建议阅读10+分钟. 本文档旨在帮助已掌握机器学习基础知识的人员从 Google 机器学习的最佳实践中受益. 本文档旨在帮助已掌握机器学习基础知识的人员 ...

  4. 【技术分享】京东电商广告和推荐的机器学习系统实践

    讲师简介 ▲包勇军 2014年4月加入京东数字营销业务部,参与组建并带领模型团队,自主研发出京东大规模机器学习平台,同时还负责京东电商广告深度学习算法应用和优化的工作. 正文 大家好,我是来自京东的包 ...

  5. 探究论文检测系统抄袭的算法原理等技术研究

    以下转自:http://www.zaojiance.com/news/news-detail-2014-04-23-16-22-05.html 摘 要:论文抄袭的检测是知识产权保护中一项重要的内容,已 ...

  6. 计算机技术论文 系统,计算机络技术论文论文

    <计算机络技术论文论文>由会员分享,可在线阅读,更多相关<计算机络技术论文论文(13页珍藏版)>请在人人文库网上搜索. 1.计算机络技术论文论文篇一:计算机网络技术毕业论文专 ...

  7. AI 自动研发机器学习系统,DeepMind 让算法学习强化学习

    人工智能研发的一个大方向是用AI系统来自动化开发AI系统.虽然这一目标尚未实现,但目前的进展让已足够令人人震惊.本文介绍了最新的一些进展,包括伯克利让算法自我优化.MIT自动生成神经网络架构,以及在这 ...

  8. 直播预告 | 端云协同的淘宝机器学习系统

    2022年7月,被誉为「系统界的奥斯卡」国际顶会OSDI首次收录淘宝系统论文,自研端云协同机器学习系统Walle(瓦力)获得大会主旨发言者推荐. 8月25日,19:00-20:30,DataFun与大 ...

  9. [转]Google Linux Cluster的系统结构分析(余一娇)

    原PDF下载:http://hums.ccnu.edu.cn/teachers/yyjcai/TR/TR-2005-04.pdf Google Linux Cluster的系统结构分析 余一娇1,2 ...

最新文章

  1. JAVA取数两个数组交集,考虑重复和不重复元素
  2. python学习之----获取标签属性
  3. toolbar.netcraft.com查询域名等信息
  4. mysql 创建表_MySQL创建表(十一)
  5. timestamp 字段
  6. 使用代理进行界面之间的反向传值
  7. vue中this.init用法_Vue中的this.$options.data()和this.$data用法说明
  8. 别说普通的创业者,就是那些小有名气的创业者
  9. C#中不失真生成缩略图
  10. BZOJ 1492 货币兑换Cash
  11. java hashtable 数据结构_java Hashtable底层原理是怎样的?数据结构包括什么?
  12. 用一句话阐明epoll跟Windows IOCP之间的区别
  13. OSG仿真案例(3)——cmake创建工程
  14. 商城购物车php代码,php网上商城购物车代码一例
  15. 基于 IPIP.NET 进行公网故障排查
  16. linux游戏盒子恢复默认,dnf多玩补丁_多玩dnf盒子我用了补丁,怎么还原成默认?具体点,......
  17. ps基本操作以及常用快捷键
  18. uniapp-小程序与H5压缩图片上传
  19. C04-算法达人修炼营学习安排及方法指导
  20. wordpress 安装插件

热门文章

  1. 10个重要问题概览Transformer全部内容
  2. 【AAAI 2020】NAS+目标检测:SM-NAS 论文解读
  3. SAP RETAIL 商品主数据里的Contents
  4. 机器学习工程师正在失业,但学习依旧是唯一的出路
  5. 这应该是全网最好的「机器学习」科普文
  6. NASA艾姆斯研究中心将跟Uber团队展开合作
  7. 谷歌如何评估产品经理?
  8. 机器学习系列16:机器学习系统设计
  9. Google 全球员工围攻 Google!
  10. 对话吴恩达:AI火得还不够,997都满足不了我