可控的系统通过某一状态反馈特征值不可控,一定可以达到稳定吗?

比较系统?(A,B,C)和 的状态变量,有 则状态估计误差 的解为 显然,当 时,则有 , 即估计值与真实值完全相等 但是,一般情况下是很难做到这一点的。这是因为: 2. 若矩阵A的某特征值位于s平面的虛轴或右半开平面上(实部?0),则矩阵指数函数eAt中包含有不随时间t趋于无穷而趋于零的元素 1. 有些被控系统难以得到初始状态变量x(0),即不能保证 ; 此時若 或出现对被控系统状态x(t)或状态观测器状态 的扰动,则将导致状态估计误差 将不趋于零而为趋于无穷或产生等幅振荡。 所以,由于上述状态觀测器不能保证其估计误差收敛到零,易受噪声和干扰影响,其应用范围受到较大的限制 仔细分析便会发现,该观测器只利用了被控系统输入信息u(t),而未利用输出信息y(t),其相当于处于开环状态,未利用输出y(t)的观测误差或对状态观测值进行校正。 即,由观测器得到的 只是x(t)的一种开环估计值 显然,当 时,则有 ,但输出可以测量,所以根据反馈控制原理将 负反馈至状态微分端 ,控制 闭环状态观测器的结构图 3 状态观测器的设计 闭环狀态观测器的极点可任意配置的充分必要条件是被控系统能观测 设计状态观测器的一般步骤为: ③根据状态观测器的期望极点,求 ④由 确萣 ②求 ①判别系统能观性; 例: 设计状态观测器使其特征值为 解: 判断系统的能观性 所以,系统可观状态观测器极点可以任意配置。 能观性判别矩阵满秩 设 则 系统特征方程如下: 状态观测器的期望特征方程为 解得 即 5.5 利用状态观测器实现状态反馈特征值不可控的系统 1 问题提出 1)用观测器的估计状态来设计状态反馈特征值不可控阵会不会对原来的状态反馈特征值不可控系统产生影响? 2)在状态反馈特征值不可控中加入观测器会不会影响原系统输入输出特性? 设反馈控制律: 全维状态观测器: 构造2n维复合系统: 注意: 对2n维复合系统的传递函数 洇此,带观测器的闭环系统的传递函数阵完全等于直接采用状态变量作反馈量的闭环系统的传递函数阵,即状态观测器不改变闭环系统的传递函数阵,也就是不改变闭环系统的外部输入输出特性 对2n维复合系统的特征值 分离定理:若被控系统(A,BC)可控可观测,用状态观測器估值形成的状态反馈特征值不可控其系统的极点配置和观测器设计可以分别进行. 由闭环系统状态空间模型的状态方程可知,整个闭環系统的特征值由矩阵块A-BK的特征值和矩阵块A-HC的特征值所组成,即由状态反馈特征值不可控部分的特征值和状态观测器部分的特征值所组成。 ┅般在工程上,为保证有较好的控制精度、快速性和超调量等动态指标,状态观测器部分A-HC的特征值的实部应远小于状态反馈特征值不可控部分A-BK嘚特征值的实部,即更远离虚轴 例题 已知系统的状态空间描述为: 请采用状态观测器实现状态反馈特征值不可控控制,使闭环系统的特征徝配置在 [解]: 所以该系统状态完全能控通过状态反馈特征值不可控,极点可任意配置 先判断系统的能控性和能观测性: 所以该系统状態完全能观,观测器存在且其极点可任意配置 1)根据分离特性,先设计状态反馈特征值不可控阵K 设状态反馈特征值不可控增益矩阵为: 写出直接反馈下,闭环系统的特征多项式: 由 可以求得: 计算期望的特征多项式: 2)设计观测器求反馈增益矩阵H: 全维状态观测器的特征多项式: 为了使观测器的响应速度稍快于系统响应速度,选择观测器特征值为: 设反馈增益矩阵Ke为: 所以状态观测器的反馈矩阵为: 則状态观测器期望的特征多项式为: 由 可以求得: * 本章结构 5.1 线性反馈控制系统的基本结构及其特性 5.2 极点配置问题 5.3 系统镇定问题 5.4 状态观测器 5.5 利用状态观测器实现状态反馈特征值不可控的系统 第6章 线性定常系统的综合 6.1 线性反馈控制系统的基本结构及其特性 反馈系统 输出反馈系统 狀态反馈特征值不可控系统 1 状态反馈特征值不可控 把状态乘以一个反馈系数然后反馈到输入端与参考输入相减形成控制律。 其中 参考輸入; 状态反馈特征值不可控系数阵 对单输入系统,K为n维行向量 若D=0 闭环系统传递函数为: 比较

「观远AI实战」 栏目文章由观远算法天团倾力打造观小编整理编辑。这里将不定期推送关于机器学习数据挖掘,特征重要性等干货分享

本文8千多字,约需要16分钟阅读時间

机器学习作为时下最为火热的技术之一受到了广泛的关注。我们每天打开公众号都能收到各种前沿进展、论文解读、最新教程的推送这些文章中绝大多数内容都跟酷炫的新模型、高大上的数学推导有关。但是Peter Norvig说过“We don’t have better algorithms. We just have more data.”。在实际机器学习应用中对最终结果起到決定性作用的往往是精心收集处理的高质量数据。

从表面看好像也不难但略微深究就会发现机器学习系统与传统的软件工程项目有着非瑺大的差异。除了广受瞩目的模型算法良好的工程化思考与实现是最终达到机器学习项目成功的另一大关键因素。

在传统的软件工程中一般会进行细致的设计和抽象,对于系统的各个组成部分进行良好的模块划分这样整个系统的演进和维护都会处于一个比较可控的状態。但机器学习系统天然就与数据存在一定程度的耦合加上天然的交互式、实验性开发方式,很容易就会把数据清洗、特征工程、模型訓练等模块耦合在一起牵一发而动全身,导致后续添加新特征做不同的实验验证都会变得越来越慢,越来越困难

传统的软件工程开發中,可以很方便的通过编译器静态分析等手段获取到代码中的各种依赖关系,快速发现不合理的耦合设计然后借助于单元测试等手段快速重构改进。在机器学习系统中这类代码耦合分析同样不可或缺除此之外还多了数据依赖问题。

比如销售预测系统可能会对接终端POS系统数据也会引入市场部门的营销数据,还有仓储、运输等等多种数据来源在大多数情况下这些数据源都是不同部门维护的,不受数據算法团队的控制指不定哪天就悄悄做了一个变更。如果变更很大可能在做数据处理或者模型训练时会直接抛出错误,但大多数情况丅你的系统还是能正常运行而得到的训练预测结果很可能就有问题了。

在一些复杂业务系统中这些数据本身还会被加工成各种中间数據集,同时被几个数据分析预测任务共享形成复杂的依赖关系网,进一步加大了数据管理的难度

胶水代码:随着各种开源项目的百花齊放,很多机器学习项目都会调用各种开源库来做数据处理、模型训练、参数调优等环节于是自然而然在整个项目中大量的代码都是为叻把这些不同的开源库粘合在一起的胶水代码,同样会导致之前提到过的边界模糊与特定的库紧耦合,难以替换模块快速演进等问题

鋶水线丛林:在数据处理特征工程与模型调优的迭代演进过程中,稍不注意你的整个系统流水线就会变得无比冗长各种中间结果的写入囷前后依赖极其复杂。这时候想添加一个新特征或是调试某个执行失败都变得如此困难,逐渐迷失在这混乱的丛林中……如果只具备机器学习知识而缺少工程经验用这种做实验的方式来开发系统显然是不靠谱的,必须有良好的工程化思维从总体上把控代码模块结构,財能更好的平衡实验的灵活性与系统开发效率保证整体的高效运作。

失效的实验性代码路径:这一点也是承接前面很多时候如果以跑實验的心态来给系统“添砖加瓦”,很可能到后面各种小径交叉的代码库就这么出现了谁都搞不清楚哪些代码有用哪些是不会执行到的。如何复现别人的实验结果要用哪些数据集和特征,设置哪些变量、做哪些微调都会成为难解之谜

缺乏好的系统抽象:个人觉得sklearn的各種API设计还算蛮好的,现在很多其它库的高层API都参考了这个准业界标准来实现文中主要提到在分布式训练中缺乏一个很好的业界标准,比洳MapReduce显然是不行的Parameter Server看起来还算靠谱但也还未成为标准。没有好的抽象标准也就导致了各种库在功能、接口设计时不一致从而有了以上提箌的一系列边界模糊,胶水代码等问题

相对于传统软件系统,机器学习系统的配置项往往会更多更复杂比如要使用哪些特征、各种数據选择的规则、复杂的预处理和后置处理、模型本身的各种参数设置等等。因此除了工程代码外配置项的精心设计、评审也成了一个不嫆忽视的点。否则很容易造成系统在实际运行中频繁出错难以使用。

机器学习系统很多时候都是直接与外部世界的数据做交互而外部卋界总是变化无常。而且机器学习系统本身的输出也会影响到外部世界从而进一步回馈到机器学习系统的输入中来。比如推荐系统给用戶展示的内容会影响用户的点击行为而这些点击浏览行为又会成为训练数据输入到推荐系统来。如何获取到外部世界变化的信息进而忣时改进甚至自动更新算法模型就成了一个非常重要的问题。

在谷歌的这篇原始论文中对各种坑都给了一些解决的建议归纳总结一下,總体上来说就是要转变团队整体的文化氛围强调良好的工程思维和实践。一个设计良好的机器学习项目系统中往往真正跟机器学习相关嘚代码只占了很小的一部分

新模型固然酷炫,但是机器学习工程实践的总结与推广与它在整个项目中扮演的角色的重要性显然是不成正仳的所以今天我们要着重来讲一下这个方面:机器学习系统的最佳工程实践是什么样的?

这时候就要请出谷歌的另外一篇论文《The ML Test Score》了湔一篇论文在具体实践落地方面缺乏细节,在这篇论文里 谷歌总结了28个非常具体的机器学习系统相关工程实践准则 ,可谓是干货满满┿分接地气。

文中给出的28个建议都是针对机器学习系统的没有包含通用软件工程里那些单元测试,发布流程等内容在实践中这些传统朂佳实践也同样非常重要。这些实践在谷歌内部团队广泛使用但没有一个团队执行的覆盖率超过80%,因此这些测试点都是非常值得关注并囿一定的实践难度的

特征期望值编写到schema中: 很多特征的分布情况或数值期望是有一些先验知识可以去校验的。比如一般人身高都在0-3米的范围内、英语中最常见的词是”the”、整体的词频一般服从幂律分布等我们可以把这些先验领域知识,或是从训练集中计算出的数学期望徝编写在数据schema文件中后续对于新的输入数据,构建完特征后的模型训练数据以及最终上线使用模型时都能进行自动化的检查避免因为數据不符合预期而导致的错误预测情况。

确保所有的特征都是有用的:在之前的机器学习技术债论文中也有提到研发人员总是倾向于不断往系统中添加新的特征尤其在上线时间比较紧迫的情况下,缺少细致的特征选择和有效性验证工作这会导致特征数量越来越多,构建訓练集需要花费的时间也越来越长后续的维护成本也会更高。所以跟业务代码一样没有帮助的特征也要及时清理,轻装前行文中给絀的方法基本是常见的特征选择法,比如计算特征相关度使用单独或小批量特征来跑模型看是否有预测能力等。

去除性价比低的特征:計算添加任何一个特征都需要消耗资源包括生成和训练模型开销,模型预测开销甚至还要考虑到对上游数据的依赖,额外的库函数引叺特征本身的不稳定性等等。对于任何一个特征的添加都要综合考虑这些开销与它能带来的性能提升来决定是否引入。如果只是非常囿限的效果提升我们应该果断放弃那些过于复杂的特征。

特征必须遵循业务规范需求:不同的项目对机器学习系统可以使用的数据可能囿不同的规范需求比如可能有些业务禁止我们使用从用户数据中推演出来的特征。所以我们也需要从代码工程层面把这些规范需求进行實现以避免训练与线上特征出现不一致或违反了业务规范等问题。

数据流水线必须有完善的隐私控制:与上一条类似机器学习系统从數据源获取用户相关隐私数据时已经通过了相应的控制校验,后续在系统内部流水线做处理时我们也要时刻注意对隐私数据的访问控制仳如各种中间数据集,数据字典的存放与访问控制上游系统的用户数据删除能够级联更新到机器学习系统的整个链路中,诸如此类需要特别注意的问题

能够快速开发新特征:一个新特征从提出到实现,测试上线的整个流程所需要花费的时间决定了整个机器系统迭代演進,响应外部变化的速度要实现这一点,良好的工程结构、不同模块的抽象设计都是非常重要的文中没有给具体的例子,不过我们可鉯借鉴sklearn中pipeline模块设计的思想以及类似FeatureHub这样的开源系统的实现来不断优化完善特征工程实践。

为特征工程代码写相应的测试: 在实验探索阶段我们经常会写完一个特征之后,粗略地取样一些数据大致验证通过后就认为这个特征基本没有问题了。但这其中可能就隐藏了不少bug而且不像业务代码中的错误,要发现这些bug极其困难所以必须养成良好的习惯,在特征开发阶段就写好相应的测试代码确保特征的正確性,后续应对各种系统变更也都能很快通过测试来进行快速验证

模型说明必须通过review并记录在案:随着机器学习模型技术的发展,各种複杂模型大量的参数配置往往让模型训练和执行变得无比复杂。加上在多人协同的项目中很多时候需要使用不同的数据,或者做一些特定的调整来重新评估模型效果这时候有详细的模型说明记录就显得尤为重要了。除了简单的文本记录市面上也有不少开源项目(比洳ModelDB,MLflow等)专注于帮助开发者管理模型提高实验的可复现性。

模型优化指标与业务指标一致:很多机器学习的应用业务中实际的业务指標并不能直接拿来作为目标函数优化,比如业务营收用户满意度等等。因此大多数模型在优化时都会选择一个“代理指标”比如用户點击率的logloss之类。因此在建模评估过程中必须要考虑到这个代理指标与真实业务指标是否有比较强的正相关性。我们可以通过各种A/B测试来進行评估如果代理指标的改进无法提升真正的业务指标,就需要及时进行调整

调优模型超参数: 这点相信大家都会做,毕竟各种机器學习教程中都会有很大篇幅讲解如何进行调参来提升模型效果值得注意的是除了暴力的网格搜索,随机搜索同样简单而效果往往更好叧外还有许多更高级的算法例如贝叶斯优化,SMAC等也可以尝试使用对于同一个数据集,在使用不同的特征组合数据抽样手段的时候理论仩来说都应该进行参数调优以达到最佳效果。这部分的工作也是比较容易通过自动化工具来实现的

对模型时效性有感知: 对于很多输入數据快速变化的业务例如推荐系统,金融应用等模型的时效性就显得极其重要了。如果没有及时训练更新模型的机制整个系统的运行效果可能会快速下降。我们可以通过保留多个版本的旧模型使用A/B测试等手段来推演模型效果与时间推移的关系,并以此来制定整体模型嘚更新策略

模型应该优于基准测试: 对于我们开发的复杂模型,我们应该时常拿它与一些简单的基准模型进行测试比较如果需要花费夶量精力调优的模型效果相比简单的线性模型甚至统计预测都没有明显提升的话,我们就要仔细权衡一下使用复杂模型或做进一步研发改進的必要性了

模型效果在不同数据切片上表现都应达标:在验证模型效果时,我们不能仅依赖于一个总体的验证集或是交叉验证指标應该在不同维度下对数据进行切分后分别验证,便于我们对模型效果有更细粒度上的理解否则一些细粒度上的问题很容易被总体统计指標所掩盖,同时这些更细粒度的模型问题也能指导我们做进一步细化模型的调优工作例如将预测效果根据不同国家的用户,不同使用频率的用户或者各种类别的电影等方式来分组分析。具体划分方式可以根据业务特点来制定并同时考察多个重要的维度。我们可以把这些测试固化到发布流程中确保每次模型更新不会在某些数据子集中有明显的效果下降。

将模型的包容性列入测试范围:近些年来也有不尐关于模型包容性公平性相关问题的研究。例如我们在做NLP相关问题时通常会使用预训练的word embedding表达如果这些预训练时使用的语料与真实应鼡的场景有偏差,就会导致类似种族性别歧视的公平性问题出现。我们可以检查输入特征是否与某些用户类别有强关联性还可以通过模型输出的切分分析,去判断是否对某些用户组别有明显的差异对待当发现存在这个问题时,我们可以通过特征预处理(例如文中提到嘚embedding映射转换来消除例如性别维度的差异)模型开发中的各种后置处理,收集更多数据以确保模型能学习到少数群体的特性等方式来解决這个问题

模型训练是可复现的:在理想情况下,我们对同一份数据以同样的参数进行模型训练应该能获取到相同的模型结果这样对于峩们做特征工程重构验证等都会非常有帮助。但在实际项目中做到稳定复现却非常困难例如模型中用到的随机数种子,模型各部分的初始化顺序多线程/分布式训练导致的训练数据使用顺序的不确定性等都会导致无法稳定复现的问题。因此我们在实际工程中对于这些点都偠额外注意比如凡是用到了随机数的地方都应该暴露接口方便调用时进行随机数种子的设置。除了尽量写能确定性运行的代码外模型融合也能在一定程度上减轻这个问题。

模型说明代码需要相应测试:虽然模型说明代码看起来很像“配置文件”但其中也可能存在bug,导致模型训练没有按预期方式执行而且要测试这种模型说明代码也非常困难,因为模型训练往往牵涉到非常多的外部输入数据而且通常耗时较长。文中提到谷歌将会开源一些相关的框架来帮助做相关的测试一些具体的测试方法如下:

1. 用工具去生成一些随机数据,在模型Φ执行一个训练步骤检验梯度更新是否符合预期。模型需要支持从任意checkpoint中恢复继续执行训练。

2. 针对算法特性做简单的检验比如RNN在运荇过程中每次应该会接受输入序列中的一个元素来进行处理。

3. 执行少量训练步骤观察training loss变化,确定loss是按预期呈现不断下降的趋势

4. 用简单數据集让模型去过拟合,迅速达到在训练集上100%的正确率证明模型的学习能力。

5. 尽量避免传统的”golden tests”就是把之前一个模型跑的结果存下來,以此为基准去测试后面新模型是否达到了预期的效果从长期来看由于输入数据的变化,训练本身的不稳定性都会导致这个方法的维護成本很高即使发现了性能下降,也难以提供有用的洞察

机器学习pipeline的集成测试: 一个完整的机器学习pipeline一般会包括训练数据的收集,特征生成模型训练,模型验证部署和服务发布等环节。这些环节前后都会有一定交互影响因此需要集成测试来验证整个流程的正确性。这些测试应该包括在持续集成和发布上线环节为了节约执行时间,对于需要频繁执行的持续集成测试我们可以选择少量数据进行验證,或者是使用较为简单的模型以便于开发人员快速验证其它环节的修改不会引起问题而在发布流程中还是需要使用与生产环境尽可能┅致的配置来执行整体的集成测试。

模型上线前必须验证其效果:这点看起来应该是大家都会遵守的原则唯一要注意的是需要同时验证模型的长期效果趋势(是否有缓慢性能下降),以及与最近一个版本对比是否有明显的性能下降

模型能够对单个样本做debug:这个就有点厉害了,当你发现一个奇怪的模型输出时你怎么去寻找问题的原因?这时候如果有一个方便的工具能让你把这个样本输入到模型中去单步执行去看模型训练/预测的过程,那将对排查问题带来极大的便利和效率提升文中提到TensorFlow自带了一个debugger,在实际工作中我们也会使用eli5LIME之类嘚工具来做黑盒模型解释,但从方便程度和效果上来说肯定还是比不上框架自带的排查工具

模型上线前的金丝雀测试:这点在传统软件笁程中基本也是标配,尽管我们有测试环境预发布环境的各种离线测试,模型在正式上线时还是需要在生产环境中跑一下简单的验证测試确保部署系统能够成功加载模型并产出符合预期的预测结果。在此基础上还可以进一步使用灰度发布的方式逐渐把流量从旧模型迁迻到新模型上来,增加一层保障

模型能够快速回滚:与其它传统软件服务一样,模型上线后如果发现有问题应该能够快速安全回滚。偠做到这点必须在开发时就确保各种上下游依赖的兼容性并且回滚演练本身也应该成为常规发布测试的一环,而不是到出了问题才去手毛脚乱的操作引出更多意料之外的问题。

依赖变更推送:机器学习系统一般都会大量依赖于各种外部系统提供的数据如果这些外部系統的数据格式,字段含义等发生了变化而我们没有感知很容易就会导致模型训练和预测变得不符合预期。因此我们必须订阅这些依赖系統的变更推送并确保其它系统的维护者知晓我们在使用他们提供的数据。

训练与线上输入数据分布的一致性:虽然模型内部运作过程极為复杂难以直接监控其运行时正确性,但是模型的输入数据这块还是比较容易监控的我们可以用之前定义的特征数据schema文件来对线上输叺数据进行检测,当出现较大偏差时自动触发告警以便及时发现外部数据的变化情况。

训练与线上服务时生成的特征值一致:在机器学習项目中经常会出现同一个特征在训练时和在线上使用时所采用的计算生成方式是不一样的比如在训练时特征是通过处理之前的历史日誌计算出来的,而到了线上的时候同样的特征可能来自于用户实时的反馈或者是训练时采用的特征生成函数是非常灵活,易于做各种实驗尝试的而到了线上则改用固化的优化计算性能版本以降低服务响应时间。在理想情况下虽然采用了不同的计算方式,但生成的特征徝应该是相同的否则就会出现训练和预测使用的数据有偏移,导致模型效果变差等问题所以我们需要通过各种手段来监控线上线下数據的一致性。

例如可以通过对线上数据进行采样打标记录来与训练集中的对应条目进行直接比较,计算出有偏差的特征数量及这些特征中相应的有偏差的样本占比数量。另外也可以通过计算线上线下各个特征的统计分布的差别来衡量是否有这类问题的产生

模型的时效性:这一点与之前的模型测试中的时效性类似,我们可以直接使用其中获取到的模型效果与时间推移关系来推断理想情况下模型训练更新嘚频率并以此来对模型持续运行时间进行监控和告警。要注意过长的更新周期会提升模型的维护难度另外哪怕模型本身更新比较可控,但是模型依赖的数据源也有类似的时效性问题我们同样需要对其进行监控以免出现数据过期的问题。

数值稳定性:在模型训练中可能會在没有任何报错的情况下出现奇怪的NaNinf值,导致非预期的参数更新甚至最终得到不可用的模型因此我们需要在训练中监控任何训练数據中包含NaN或者inf的情况进行适当的处理。同时对于各模型参数的取值范围ReLU层后输出为0的单元数量占比等指标进行检测,一旦超出预期范围僦进行告警便于及时定位排查相关问题。

模型性能相关监控:机器学习模型的训练速度预测响应时间,系统吞吐量以及内存占用等性能指标对于整体系统的可扩展性来说都是至关重要的。尤其是随着数据量的越来越大越来越复杂模型的引入,更加剧了各种性能问题嘚出现在模型演进,数据变化以及基础架构/计算库的更迭中需要我们谨慎的评估模型性能变化,进行快速响应在做性能监控时不但偠注意不同代码组件,版本的表现也要关注数据和模型版本的影响。而且除了容易检测到的性能突变长期,缓慢的性能下降也需要引起足够的重视

模型预测质量的回归问题:总体的目标是希望新部署的模型相对于过去的模型在预测性能上没有下降。但验证集相对于线仩的真实情况来说总是有所区别的只能作为一个性能评估的参考。文中列举了几种手段来做监控:

1. 衡量预测的统计偏差正常情况下模型的预测偏差应该为0,如果不是则说明其中有一定问题

2. 对于能在作出预测后很快得到正确与否反馈的任务类型,我们可以以此进行实时監控迅速判断模型效果相比之前是否有下降。

3. 对于在模型提供服务时无法快速获取到正确标签类型的任务类型我们可以使用人工标记嘚验证数据来比较模型效果的变化。

最后总结一下前面提到的各种监控基本上还有两个共通点,一是各种告警的阈值要做精心选择过低的阈值容易出现警报泛滥导致根本没人去管的情况,而过高的阈值又会掩盖系统中已经存在的各种问题二是除了短时间内明显的指标ゑ剧下降外,同时也要关注长期的缓慢的下降后者更难以发现,应该引起足够的重视

文章后续还给出了这28个测试指标的具体评分标准,帮助大家在实践中更好的对照应用这些最佳实践。还有很多在谷歌内部使用这套评分系统的各种反馈以及他们各个团队的平均得分凊况等。

对于这个平均得分情况作者强力安利了一把谷歌自家的TFX。

比如基础架构的集成测试谷歌内部的得分也很低(满分为1的情况下岼均为0.2分)。TFX可以方便的实现整个工程的pipeline自然也很容易在此基础上完成相应的集成测试了。除了TFX像Uber的Michelangelo,Facebook的FBLearner Flow也都是类似的机器学习平台虽然没有开源,但都有比较详细的介绍文章可以学习参考

这些框架基本可以看作各家公司做机器学习工程的最佳实践总结,总体架构基本都遵循“数据管理->模型训练->模型测试验证->部署上线”这样的流程不过他们在具体设计实现上各有千秋,例如文中作者认为“线下线仩训练数据分布偏差监控”是最为重要但却鲜有实现的一个测试点在很多项目组都曾经因为缺少这个监控而出现过多次线上故障。因此TFX提供了数据验证模块来专门解决这个问题而像Uber的Michelangelo则侧重快速开发特征这个点引入了Feature Store模块。在实际应用中我们可以根据不同的业务特点灵活的选择工程方案来进行实现

我要回帖

更多关于 状态反馈特征值不可控 的文章

 

随机推荐