如何基于 Flink 与 TensorFlow 构建实时智能异常检测平台?

Flink项目实战篇 基于Flink的城市交通监控平台(下) Flink项目实战篇 基于Flink的城市交通监控平台(上)Flink项目实战篇 基于Flink的城市交通监控平台(下) 阅读详情

 Flink 已经渐渐成为实时计算引擎的首选之一,从简单的实时 ETL 到复杂的 CEP 场景,Flink 都能够很好的驾驭。本文整理自携程实时计算负责人潘国庆在 QCon 全球软件开发大会(北京站)2019 的演讲,他介绍了携程如何基于 Flink 与 TensorFlow 构建实时智能异常检测平台,以解决规则告警系统准确率低、时效性低、规则配置复杂与耗费人力等诸多问题,实现了业务指标毫秒级延迟与智能化检测,同时依托 Flink 实现了强大的容错机制。

1.前言

Python学习交流群:1004391443

随着互联网的迅速发展,各个公司都建立了自己的监控体系,用于提前发现问题降低损失,携程亦是如此。然而携程的监控体系存在以下三个问题:

  • 监控系统繁多
  • 监控告警配置复杂
  • 没有统一规范

首先携程目前光公司级别的监控系统就有三套,各个 BU 为了满足自己的业务监控需求也陆续开发了许多自己的监控系统。其次这些监控系统都是基于规则来判断是否存在异常,比如当满足同环比连续几个点上升或下降到用户配置的阈值时触发告警。最后是没有统一的规范,这里指的是两个规范,第一,没有统一的规则告警配置规范,不同的监控系统都带有不同的规则告警配置方式;第二,没有统一的异常判断规范,研发人员或 QA 人员都是根据自己对业务的理解,通过主观判断指标达到一定阀值时监控系统需要进行告警。

基于以上的三点问题给用户带来了诸多不便,首先是规则告警维护成本高,用户时常需要基于多个监控系统以不同的方式配置规则告警,而且还需要根据告警的情况持续调整阈值,导致一个规则告警从配置到最终能够产生较好的效果需要一个很长的周期。其次,基于规则告警往往表现不尽如人意,会导致准确率低、覆盖率低和时效性低的三低状况。用户很多情况下为了提高异常的覆盖率降低漏报的情况,不得不将规则告警的阀值设置的非常敏感,虽然这样能够覆盖更多的异常场景,却导致了大量的误报,规则告警的准确性也就大大折扣。

 

 

 

 

为了应对上述的诸多问题,携程打造了自己的实时智能异常检测平台 Prophet。简单概括,Prophet 是一个基于时序类型数据、以平台为接入对象、去规则化为目标的异常检测系统,基于深度学习算法实现异常的智能检测,基于实时计算引擎实现异常的实时检测,提供了统一的异常检测解决方案。接下来的文章会详细介绍我们是如何依次实现了异常的智能化、实时化检测以及平台的构建。

2. 智能化

2.1 深度学习算法选择

目前业界采用比较多的方式是引入统计分析的各种方法,框定一个滑动的样本集,对这个样本集进行一些数据处理和转化,经过归一化,去周期,去趋势,再将最新采集到的数据点经过同样的转换,和样本集的残差序列的统计量进行比较,比如距离、方差、移动平均、分位数等,超出一定的范围就判断为异常,或是综合各种离群点计算的方法来做个投票,多数算法认为异常则报异常。起初我们也借鉴了这种做法,却发现虽然可以不用维护告警规则了,但报警的质量并没有提升。

我们需要设计一套新的算法,降低报警总量到可以人工逐个处理的程度,同时不能以增加漏报真正的生产订单故障为代价,并且这套算法的设计还不能太复杂,影响到告警的实时性,最好还能做到算法即服务,有较强的可移植性,提供给其他的监控系统使用。自然而然的, 基于神经网络的深度学习算法 成为我们进一步探索的工具。

RNN 算法比较适合处理序列变化的数据,符合我们时序特征的场景,但是存在梯度消失和过拟合的现象。而他的改进版 LSTM 算法,能够通过控制传输状态来选择性地记住较重要的长期数据,能在更长的序列上有良好的表现,业界也有很多成功的应用。LSTM 算法的异常检测方式是基于指标的历史数据训练出模型并基于现有数据预测指标未来的走势,基于预测数据与现实数据各种偏差来判断指标是否有异常。这样好处在于每个指标都会训练一个自己的模型,能够达到很高的精度,但是也带来了一定的弊端,需要消耗较多的训练与检测资源。

DNN 算法的检测方式与 LSTM 的方式不同,我们基于小波变换算法提取监控指标不同频域的特征喂给 DNN 模型,直接输出是否存在异常。这种的好处在于一个 DNN 模型就能够满足所有异常检测场景的需求,但是相对的特征工程也要复杂很多,我们需要大量的人工标记数据来提高模型的精度。

最后无论是基于 LSTM 算法还是 DNN 算法实现的异常检测需要根据各自所需的不同场景来决定使用哪个。在携程,对于最重要的订单、支付类指标,我们都是采取 LSTM 算法,单个指标训练单个模型,对于其他一些非重要的指标可以使用 DNN 算法。

 

 

 

 

2.2 模型训练

选定好深度学习算法之后,我们也就开始尝试模型的训练。我们首先取得监控指标的历史数据对其进行清洗,其中需要对一些空值进行插补,节假日数据对于数据模型的影响很大,导致训练出来的数据有偏差,我们也选择性的剔除节假日期间的数据;如果历史数据中的某个区间数据是异常区间,我们也需要使用预测值替换异常区间的数值。

做完数据清洗之后,也就需要实现特征工程。我们使用了多尺度滑动窗口时序特征的方法,将一个滑动窗口内的数据和前 n 个周期做统计量上的对比,均值、方差、变化率等这些,这样基本上就可以把明显的周期性和平稳型数据给分离出来。剩下的时序中,有些是波动很大的随机序列,有的则是带有趋势的周期性序列,通过时序分析法把周期性去掉,再用频域分析尝试分解成频谱。对于带有明显频谱的,则归类为周期型时序,而频谱杂乱的,则归类为非周期性。

在做完特征提取与指标分类之后,我们也就根据指标的类型使用不同的算法进行模型训练。我们根据线上的人工标注数据持续性的优化我们的模型。我们经历过初期不停的调参和验证之后,我们将模型训练的频率设为了两周,我们每两周重新走下图中的整个流程,这个也是根据我们业务变更的频率所做的考虑。

 

 

 

 

3. 实时化

3.1 Why Flink?

在解决了智能化异常检测的问题后,我们开始考虑提高我们的时效性。以往的规则告警,从数据产生到落地到监控系统,再到触发规则判断,期间已经经历了一定延迟。并且很多规则告警往往需要连续 3 个点或则 5 个点触发下跌或上升规则判断才会告警,这样如果一个指标的采集粒度是一分钟,那么异常往往需要过好几分钟才会被发现。为了解决时效性的问题,我们尝试引入实时计算引擎。现在常见的实时计算引擎有 Storm、Spark Streaming 以及 Flink,那么为什么我们最终选择了 Flink?

首先第一点就是 Flink 提供了强大的容错保障,所有的实时作业无论提供了多么繁多的功能,如果在作业的容错保障上做的不好,对于用户都是不可接受的。我们的数据源是 Kafka,基于 Flink 的 Checkpoint 与 Kafka 的 Offset 回溯功能能够实现数据源到执行引擎层面的 Exactly Once 的语义保证,基于幂等或事物保证最终输出的 Exactly Once 语义。第二点,Flink 提供了高效的状态管理,我们在做异常检测的时候需要保存异常区间的预测数据用于下一轮的异常检测,这个后续会讲到。第三点与第四点放在一起讲就是,Flink 提供了基于 Event Time 的丰富窗口函数,Spark Streaming 虽然也提供了对窗口的支持,但是其本质上还都是基于 Processing Time 的数据处理。终上所述,我们最终选择了 Flink 作为我们的实时计算引擎。

 

 

 

 

3.2 实时检测

在选择好实时计算引擎后,我们也就开始尝试在 Flink 中加载 Tensorflow 的模型用来实时做异常检测。首先我们将所有训练好的 Tensorflow 模型以.pb 的格式上传到 HDFS 并将新增或更新的模型配置更新到配置中心 QConfig 上。Flink 作业在启动或运行中时,监听配置中心中需要监控的指标并尝试从 HDFS 上加载模型。由于后期模型较多,为了避免重复加载和负载均衡,所有指标会先根据 id keyBy 分发到不同的 TaskManager 上,每个 TaskManager 只加载属于自己那部分的模型。

 

 

 

 

模型加载完毕后,我们基于 Flink 滑动窗口与 Event Time 实现数据实时消费与预测。窗口滑动的时间为指标的时间粒度(下图中为 1 分钟),窗口长度为十个指标时间粒度(下图中为 10 分钟)。一个窗口中总计 10 条数据,我们采用前面 5 条数据预测第 6 个位置的数据,然后基于 2 到 4 的实际数值加上第 6 条的预测数据预测第 7 个数据。依此类推,最终我们获取到了窗口中后 5 位的预测值与实际值,基于 5 个预测值与实际值对比检测是否存在异常。

 

 

 

 

然而实际的消费过程中并不会像上面说的那么简单,首先一个窗口内可能存在缺失数据的情况,我们采用窗口内其余数据的均值与标准差补齐。其次,在上个时间段如果存在异常,我们无法直接使用原始的值去预测数值,因为这个原始值可能是一个异常值,我们需要使用上个时间段的预测值来替换这个异常值,这样能够保证我们的预测线不被带跑偏。上一个窗口的预测值我们采用 flink 中的 state 来存储。

 

 

 

 

在取得当前窗口后 5 个预测值与实际值之后,我们就开始进异常检测了。我们会根据异常的类型(比如上升或下降)与敏感度来做不同的判断,下图中的三个异常曲线分别对应了高中低三个敏感的场景,在使用高敏度时,可能只要有一个下跌的抖动,我们可能就认为其是一个潜在的异常,中敏感度需要连续两个下跌的情况,低敏感度则需在下降幅度非常大的情况下才会认定为潜在异常。

我们会基于预测值与实际数据的偏差来先做一个潜在判断,当认定它是一个潜在异常时,我们会在基于预测值与历史同期数据的均值与标准差做判断,这样最终得出当前的窗口是否存在异常。我们这边在异常判断的时候还是采用了统计学作为判断方式,如果在样本足够的情况下,完全可以使用机器学习,训练一个异常检测模型来判断是否存在异常。

 

 

 

 

4. Prophet

4.1 Prophet 系统架构

在讲述完如何实现智能化与实时化异常检测之后,相信大家对于 Prophet 已经有了一定的认知。下图展示了整个 Prophet 平台的系统架构,首先是最底层的 Hadoop 集群承担了分布式存储与资源调度的功能,HDFS 用来存储 Tensorflow 训练好的模型,所有 Flink 作业运行在 Yarn 集群上。中间层的消息队列承担了实时数据源的作用,所有指标的历史数据存储在时序数据库中,实时化与智能化检测依托于 Flink 与 Tensorflow 两套引擎实现。最上层的 Prophet 以平台的方式对外提供服务,Clog 用于日志存储与排障,Muise 是我们的实时计算平台,Qconfig 用于存储于监控指标相关的配置信息,最后 Hickwall 用于监控作业的各项指标。

 

 

 

 

4.2 Prophet 操作流程

一个用户想要配置智能告警只需要做两件事,首先在我们的平台上配置智能告警,由于我们大部分对接的是监控平台,所以用户大多是在各个监控平台上配置智能告警,然后监控平台调用我们的服务注册监控指标。然后用户需要按照我们定义好的格式将原始数据发送到我们的 Kafka 消息队列,这一步在对接平台时,也由平台做了,所以直接在我们平台上配置监控指标的用户很少。当一个用户注册好监控指标后,我们平台会先检测该指标的历史数据是否足够,如果足够则触发模型训练的流程,训练好的模型会上传到 HDFS。如果历史数据不足,Prophet 会持续实时存储用户指标的数据,当满足数据量的需求时,重新触发模型训练。当模型训练完成后,我们会更新配置中心,告知 Flink 作业有新的或更新的指标模型已经就位。

实时这块的流程是 Flink 启动或运行中一旦监听到有新的或更新的模型,作业会重新加载模型。另外 Flink 会实时从 Kafka 中消费数据,实时的过模型做异常检测,最终将异常告警回吐到 Kafka,各个平台消费自己的异常告警数据并给相关的负责人发送告警通知。

 

 

 

 

4.3 平台现状

目前 Prophet 已经覆盖了携程所有的业务线,接入了十余个监控平台,其中包含公司级的监控系统 Sitemon 与 Hickwall,监控了 7000+ 个业务指标,包含订单、支付、应用、服务等多种业务类型指标。

 

 

 

 

在平台运行的半年时间内,我们的算法能够达到 90% 的召回率(也就是异常覆盖率);由于我们业务方需求是尽量覆盖更多的异常,不要漏报,所以我们的准确率保持在 75% 左右;在引入了 Flink 实时消费数据与检测,极大的降低了我们告警的延迟,达到了毫秒级的延迟;对比规则告警,我们帮助用户降低了 10 倍的告警数量,提升了 10 倍的用户效率。

 

 

 

 

下图展示了从 18 年 10 月 Prophet 上线以来至 19 年 4 月底,智能告警与规则告警对异常的覆盖率对比。总计发生 176 起异常,其中 Prophet 图表中显示的是覆盖了 90% 的异常,但其实真正的覆盖率要高于 90%,其中 18 个未覆盖异常有 15 个是由于初期算法一直处于调整阶段导致了漏报。在 19 年之后,我们的异常覆盖率能够达到接近 100%。相比较规则告警,我们的覆盖率上升了 22%,及时的帮助用户降低损失。

 

 

 

 

下图展示了智能告警与规则告警在告警数量上的对比,规则告警的数量基本是智能告警的 2 到 5 倍,但是这并非是站在同一层面上的对比,其中智能告警的数量是基于 800 监控指标,而规则告警是基于 200 个监控,如果规则告警的指标数量与智能告警的持平,那智能告警降低的告警数量会更为显著。告警数量对于用户的效率提升是十分明显的,以往用户每天需要花费大量的精力去排查每一个告警邮件,在使用了智能告警后,这部分帮助用户减少的时间是实实在在的效率提升。

 

 

 

 

5. 挑战与展望

Prophet 在携程投入生产使用已有半年之久,在这期间我们也遇到过形形色色的挑战。首先,基于 LSTM 算法的异常检测方式存在一个明显的弊端,我们需要对每一个指标训练一个模型,这样无论是模型训练所需的资源以及实时作业加载模型所需的资源都消耗比较大。其次,LSTM 算法对于波动剧烈的非周期型指标表现不是十分良好,有一些业务会不定期的做一些活动导致业务指标的突增或突减,这种趋势是无法从历史数据中学习到。然后,对于一些系统性能指标类型的数据也无需使用智能告警,规则告警可能更加方便,比如当服务器的 cpu 使用率达到 95% 的时候就告警。最后,节假日对于智能告警的影响十分之大,业务指标通常会在节假日前呈倍数的增长,假日期间又曾倍数的下降,这样导致了大量漏报或误报。

针对以上的问题,我们也在持续的改进之中。首先,基于 DNN 算法的通用模型已经在线下陪跑了数月之久,虽然在精度上比 LSTM 算法的异常检测方式稍有逊色,但在我们持续优化之后已经基本能够 hold 住线上非重要指标的告警需求,实现单个模型监控数千个指标的功能,大大降低了资源损耗。我们在应对节假日对智能检测影响时引入了增长系数的概念,用来拉升或降低预测值,并且采用一定方式将增长系数持续衰减,防止增长系数导致预测值的跑偏。 关于算法的细节以及各种场景下的应对方式由于篇幅关系无法在本篇文章中一一展开,如果对算法相关细节感兴趣的朋友可以在评论区留言,我们这边也会考虑让算法同事另起炉灶,详细的介绍算法、特征工程等相关话题。

Prophet 后续也会陆续的接入携程所有的监控系统,这也是我们一直努力在做的事。实时计算与人工智能不光在异常检测这个场景下有很好的发挥,在很多其他的场景下也能够有亮眼的表现,比如风控、个性化推荐、排序等,本篇文章也算是抛砖引玉,希望给大家能够带来一些其法,这样可以将这套方式更多的使用在其他的场景下。

TensorFlow On Flink:深入解析 TensorFlow On Flink 结合了 TensorFlow 和 Flink 的优势,使得用户可以在 Flink 的流式处理能力下,使用 TensorFlow 进行机器学习和深度学习任务。本文将深入探讨 TensorFlow On Flink 的原理,并提供相应的源代码示例。通过以上示例,我们可以看到 TensorFlow On Flink 的使用方法,以及如何将 TensorFlow 的计算任务嵌入到 Flink 的任务流中,从而实现在分布式环境下进行大规模机器学习和深度学习的能力。 阅读详情

相关推荐

如何基于Flink+TensorFlow打造实时智能异常检测平台

AI前线导读:Flink已经渐渐成为实时计算引擎的首选之一,从简单的实时ETL到复杂的CEP场景,Flink都能够很好地驾驭。本文整理自携程实时计算负责人潘国庆在QCon全球软件开发大会(北京站)2019的演讲,他介绍了携程如何基于Flink与TensorFlow构建实时智能异常检测平台,以解决规则告警系统准确率低、时效性低、规则配置复杂与耗费人力等诸多问题,实现了业务指标毫秒级延迟与智能化检测,同时依托Flink实现了强大的容错机制。随着互联网的迅速发展,各个公司都建立了自己的监控体系,用于提前发现问题降低损失,携程亦是如此。然而携程的监控体系存在以下三个问题:监控系统繁多监控告警配置复杂没

基于实时计算(Flink)与高斯模型构建实时异常检测系统 ...

案例与解决方案汇总页:阿里云实时计算产品案例&解决方案汇总 1. 概述 异常检测(anomaly detection)指的是对不符合预期模式或数据集(英语:dataset)中其他项目的项目、事件或观测值的识别。实际应用包括入侵检测、欺诈检测、故障检测、系统健康监测、传感器网络事件检测和生态系统干扰检测等。 之前我曾经介绍过一种异常检测的解决方案《...

weixin_33804582的博客 680

GradNorm:Gradient Normalization for Adaptive Loss Balancing in Deep Multitask Networks,梯度归一化

文章目录引言gradnorm   gradnorm论文地址:https://arxiv.org/abs/1711.02257   gradnorm是一种优化方法,在多任务学习(Multi-Task Learning)中,解决 1. 不同任务loss梯度的量级(magnitude)不同,造成有的task在梯度反向传播中占主导地位,模型过分学习该任务而忽视其它任务;2. 不同任务收敛速度不一致;这两个...

Leon_winter的博客 2万+

Flink+TensorFlow打造实时智能异常检测平台

Flink大数据流式计算 1.前言 随着互联网的迅速发展,各个公司都建立了自己的监控体系,用于提前发现问题降低损失,携程亦是如此。然而携程的监控体系存在以下三个问题: Flink 已经渐渐成为实时计算引擎的首选之一,从简单的实时 ETL 到复杂的 CEP 场景,Flink 都能够很好地驾驭。本文整理自携程实时计算负责人潘国庆在 QCon 全球软件开发大会(北京站)2019 的演讲,他介绍了携程如何基于 Flink 与 TensorFlow 构建实时智能异常检测平台,以解决规则告警系统准确率低、时效性低、规则

xingdianp的博客 1257

多核系统核间通信(IPC)设计:从硬件机制到软件实现

在多核处理器与嵌入式系统设计中,核间通信(IPC)是实现计算资源协同工作的核心技术。其原理基于共享内存、硬件邮箱与中断等底层硬件机制,通过构建结构化的消息传递通道,实现核间高效、可靠的数据交换。该技术的核心价值在于打破多核间的壁垒,将分散的计算单元整合为有机整体,从而显著提升系统整体性能与响应能力。在工程实践中,IPC广泛应用于智能座舱、边缘AI网关、实时控制系统等场景,用于处理如仪表显示、AI推理、实时控制等复杂任务。本文聚焦于基于共享内存与VRING的消息队列实现,深入剖析缓存一致性、内存屏障等关键问题

weixin_27006759的博客 600

Spark数据倾斜问题+解决方案

1、数据倾斜 数据倾斜指的是,并行处理的数据集中,某一部分(如Spark或Kafka的一个Partition)的数据显著多于 其它部分,从而使得该部分的处理速度成为整个数据集处理的瓶颈 数据倾斜俩大直接致命后果 1)数据倾斜直接会导致一种情况:Out Of Memory 2)运行速度慢 主要是发生在Shuffle阶段。同样Key的数据条数太多了。导致了某个key(下图中的80亿条)所在的Task数 据量太大了。远远超过其他Task所处理的数据量 一个经验结论是:一般情况下,OOM的原因都是数据倾斜 2、如

诸葛搏毅 6772

easyui datagrid重新加载detailview异常_如何基于 Flink 与 TensorFlow 构建实时智能异常检测平台?...

Flink 已经渐渐成为实时计算引擎的首选之一,从简单的实时 ETL 到复杂的 CEP 场景,Flink 都能够很好的驾驭。本文整理自携程实时计算负责人潘国庆在QCon 全球软件开发大会(北京站)2019的演讲,他介绍了携程如何基于 Flink 与 TensorFlow 构建实时智能异常检测平台,以解决规则告警系统准确率低、时效性低、规则配置复杂与耗费人力等诸多问题,实现了业务指标毫秒级延迟与智能...

weixin_39845221的博客 68

从业10年的AI应用架构师:企业AI平台运营的4个核心经验,值得收藏

去年年底,我在某大型制造企业做AI咨询时,遇到了这样的场景:这不是个例。我接触过的10家企业中,有7家的AI平台都陷入了“技术自嗨”的陷阱——技术团队追求模型精度、功能完备性,却忽略了业务到底需要什么。如果你也遇到过类似问题:比如“模型准确率很高,但业务不买账”“AI项目上线后没人用”“投入产出比极低”,那么这篇文章的4个经验,可能会帮你避开这些坑。很多企业认为,AI平台就是“买一套工具+部署几个模型”。但实际上,企业AI平台的本质是“技术与业务的连接生态”:根据Gartner的报告,80%的企业AI项目失

AI 原生应用开发的博客 709

如何基于Flink+TensorFlow打造实时智能异常检测平台?只看这一篇就够了

作者 | 潘国庆编辑 | NatalieAI 前线导读:Flink 已经渐渐成为实时计算引擎的首选之一,从简单的实时 ETL 到复杂的 CEP 场景,Flink 都能够很...

http://www.54tianzhisheng.cn/ 4426

MacBook用户必看:用Homebrew一键搞定frp内网穿透(含阿里云配置模板)

本文为MacBook用户提供基于Homebrew的frp内网穿透实战指南,详细介绍了从环境准备到阿里云服务器配置的全过程。通过Homebrew一键安装frp客户端,结合阿里云配置模板,实现高效稳定的内网穿透,适用于远程开发、IoT设备调试等多种场景。

weixin_28692817的博客 321

数字图像处理 基于OpenCV的景深融合算法

还有的思路是对图像序列中的每一张图像分别进行拉普拉斯金字塔拆分,提取出每一张图像的高频信息和低频信息,得到所述图像序列对应的高频信息集合和低频信息集合。然后根据所述高频信息集合得到合成后的高频信息,对所述低频信息集合进行导向滤波处理得到合成后的低频信息,根据所述合成后的高频信息和低频信息做拉普拉斯金字塔重构,得到一张超景深图像。这里声明了几个变量,ImMer是最终合成的图像,coll是中间处理的变量,Coll_Ori是保存原图像数据的变量,dstWidth目标图像宽度(一般都是与原始图像大小一致)。

学以致用 知行合一 3904

如何基于Flink+TensorFlow打造实时智能异常检测平台?

参考文章:如何基于Flink+TensorFlow打造实时智能异常检测平台? Flink 已经渐渐成为实时计算引擎的首选之一,从简单的实时 ETL 到复杂的 CEP 场景,Flink 都能够很好地驾驭。本文整理自携程实时计算负责人潘国庆在 QCon 全球软件开发大会(北京站)2019 的演讲,他介绍了携程如何基于 Flink 与 TensorFlow 构建实时智能异常检测平台,以解决规则告警系...

justlpf的专栏 1112

手把手教你学Simulink--基础储能管理场景实例:基于Simulink的扩展卡尔曼滤波(EKF)SOC估计算法仿真

本文介绍了基于Simulink的扩展卡尔曼滤波(EKF)在电池SOC估算中的应用。通过Thevenin等效电路建立非线性电池模型,详细阐述了EKF的状态预测和更新过程。在Simulink中搭建了完整的仿真系统,包括电池模型、EKF核心算法模块和误差分析模块。通过脉冲放电和变电流充放电两种工况测试,验证了EKF算法在短期误差(<0.8%)、长期累积误差(<1.5%)和动态响应时间(30ms)方面的优越性能,相比传统安时积分法显著提高了估算精度。文章还提出了自适应EKF、多模型融合等进阶优化方向,为

MHD0815的博客 100

easyui datagrid重新加载detailview异常_如何基于Flink+TensorFlow打造实时智能异常检测平台?只看这一篇就够了...

作者 | 潘国庆编辑 | NatalieAI 前线导读:Flink 已经渐渐成为实时计算引擎的首选之一,从简单的实时 ETL 到复杂的 CEP 场景,Flink 都能够很好地驾驭。本文整理自携程实时计算负责人潘国庆在 QCon 全球软件开发大会(北京站)2019 的演讲,他介绍了携程如何基于 Flink 与 TensorFlow 构建实时智能异常检测平台,以解决规则告警系统准确率低、时效...

weixin_39759182的博客 83

我用 Python 把 Claude 变成了 “代码审查员“:每次提交前 AI 先 Review,Bug 漏网率降了 80%

这是成败的关键。我们需要给 Claude 立规矩,让它像一个严格的架构师那样思考。你是一名资深的首席软件架构师和安全专家。请审查以下 Git Diff 代码变更。你的任务是:1. **安全性检查**:寻找 SQL 注入、XSS、硬编码密钥、敏感信息泄露等。2. **潜在 Bug**:空指针、资源未关闭、竞态条件、逻辑死循环。3. **代码质量**:命名规范、冗余代码、可读性差、缺乏注释。4. **性能优化**:不必要的数据库查询、低效算法。

BUG猿的博客 146

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

携程实时智能检测平台建设实践

前言 首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计算准备计算资源,并以弹性伸缩的方式运行用户代码,而用户只需根据实际代码运行所消耗的资源进行付费。函数计算更多信息参考。 Fun: Fun 是一个用于支持 Serverless 应用部署的工具...

xt1233的博客 223

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Flink 在人工智能领域的应用实践

人工智能是未来十年最重要的技术革命与驱动力,在各行各业产生着日益重要的作用,它与大数据的发展相辅相成,不仅推动人类社会迈入更智慧的世界,也为数据的应用带来无可估量的价值。 11 月 28 - 30 日,Flink Forward Asia 2019 人工智能专场将聚焦于 Flink 在机器学习上的新技术与新应用,内容包含: Flink 机器学习进度几何? 如何将 Flink 与 Tens...

数据库技术 238

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

当journalctl遇见AI:结构化日志分析的未来可能性

本文探讨了journalctl与AI结合在结构化日志分析中的未来潜力。通过systemd-journald的结构化日志存储和JSON输出,结合机器学习模型,实现了异常检测、服务依赖图谱构建等高级分析。文章还介绍了实时日志处理架构和安全审计技术,展示了智能日志分析平台的实际应用场景。

tree8的博客 228

告警数下降10倍,携程实时智能检测平台实践

将实时计算和深度学习相结合,可解决某种特定的业务场景。本次将分享基于tensorflow和flink构建携程的实时智能检测平台。 今天分享的主要内容分为四个部分: Background What is Prophet AI and Real Time Challenges and Future 一、背景介绍 每个公司都会有监控平台...

Liyiming 1404

sparkstreaming监听hdfs目录如何终止_如何基于Flink+TensorFlow打造实时智能异常检测平台?...

1.前言随着互联网的迅速发展,各个公司都建立了自己的监控体系,用于提前发现问题降低损失,携程亦是如此。然而携程的监控体系存在以下三个问题:监控系统繁多监控告警配置复杂没有统一规范首先携程目前光公司级别的监控系统就有三套,各个 BU 为了满足自己的业务监控需求也陆续开发了许多自己的监控系统。其次这些监控系统都是基于规则来判断是否存在异常,比如当满足同环比连续几个点上升或下降到用户配置的阈值时触发告警...

weixin_39655362的博客 141

Flink与AI的完美融合:深入解析Flink ML库及TensorFlow/PyTorch联动

与此同时,人工智能(AI)技术,尤其是机器学习和深度学习,正以前所未有的速度渗透到各行各业,从智能推荐到风险预测,从工业物联网到医疗健康,AI 正在重新定义数据驱动的决策方式。Flink的分布式架构和状态管理能力使其非常适合用于联邦学习场景,未来Flink可能会提供更完善的联邦学习支持,例如通过Flink ML库集成差分隐私、安全多方计算等技术,在保护用户数据的前提下实现多方协同建模。未来的Flink可能会加强对边缘设备的支持,通过优化模型序列化、网络通信和资源管理,实现在边缘节点上的高效模型推理。

zuiyuelong的博客 1537
上一篇: 如何使用python进行数据表的合并 !
下一篇: 图解python中赋值、浅拷贝、深拷贝的区别!
普通网友
博客等级 码龄7年 438粉丝 263原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值