导航:首页 > 网络问题 > 深度神经网络异常检测

深度神经网络异常检测

发布时间:2022-10-01 20:54:06

⑴ BP神经网络的原理的BP什么意思

原文链接:http://tecdat.cn/?p=19936

在本教程中,您将学习如何在R语言中创建神经网络模型。

神经网络(或人工神经网络)具有通过样本进行学习的能力。人工神经网络是一种受生物神经元系统启发的信息处理模型。它由大量高度互连的处理元件(称为神经元)组成,以解决问题。它遵循非线性路径,并在整个节点中并行处理信息。神经网络是一个复杂的自适应系统。自适应意味着它可以通过调整输入权重来更改其内部结构。

该神经网络旨在解决人类容易遇到的问题和机器难以解决的问题,例如识别猫和狗的图片,识别编号的图片。这些问题通常称为模式识别。它的应用范围从光学字符识别到目标检测。

本教程将涵盖以下主题:

⑵ 神经网络异常检测方法和机器学习异常检测方法对于入侵检测的应用

神经网络异常检测方法

神经网络入侵检测方法是通过训练神经网络连续的信息单元来进行异常检测,信息单元指的是命令。网络的输入为用户当前输入的命令和已执行过的W个命令;用户执行过的命令被神经网络用来预测用户输入的下一个命令,如下图。若神经网络被训练成预测用户输入命令的序列集合,则神经网络就构成用户的轮郭框架。当用这个神经网络预测不出某用户正确的后继命令,即在某种程度上表明了用户行为与其轮廓框架的偏离,这时表明有异常事件发生,以此就能作异常入侵检测。


上面式子用来分类识别,检测异常序列。实验结果表明这种方法检测迅速,而且误警率底。然而,此方法对于用户动态行为变化以及单独异常检测还有待改善。复杂的相似度量和先验知识加入到检测中可能会提高系统的准确性,但需要做进一步工作。

⑶ 算法太多挑花眼

算法太多挑花眼?教你如何选择正确的机器学习算法
机器学习算法虽多,却没有什么普适的解决方案。决策树、随机森林、朴素贝叶斯、深度网络等等等等,是不是有时候觉得挑花了眼呢?福利来啦~本文将教你慧眼识精,快速挑选出满意的算法!
机器学习既是一门科学,也是一种艺术。纵观各类机器学习算法,并没有一种普适的解决方案或方法。事实上,有几个因素会影响你对机器学习算法的选择。
有些问题是非常特别的,需要用一种特定的解决方法。例如,如果你对推荐系统有所了解,你会发现它是一类很常用的机器学习算法,用来解决一类非常特殊的问题。而其它的一些问题则非常开放,可能需要一种试错方法(例如:强化学习)。监督学习、分类、回归等问题都是非常开放的,可以被用于异常检测或建立更加广泛的预测模型。
此外,我们在选择机器学习算法时所做出的一些决定与算法的优化或技术层面关系并不大,而更多地与业务决策相关。下面,让我们一起来看看有哪些因素能帮你缩小机器学习算法的选择范围。
数据科学过程
在你开始研究不同的机器学习算法前,你需要对自己拥有的数据、面对的问题及相关约束有清晰的了解。
理解你的数据
当我们决定使用哪种算法时,我们所拥有的数据的类型和形态起着关键性的作用。有些算法可以利用较小的样本集合工作,而另一些算法则需要海量的样本。特定的算法对特定类型的数据起作用。例如,朴素贝叶斯算法对处理待分类的输入特别有效,但是对于缺失值则一点都不敏感。
因此,你需要做到:
了解你的数据
1. 查看总结统计和数据可视化的结
百分比可以帮助你识别大多数数据的范围
平均数和中位数可以描述集中趋势
相关系数可以指出强的关联性
2. 数据可视化
箱形图可以识别出异常值
密度图和直方图可以显示出数据的散布情况
散点图可以描述二元关
数据清洗
1. 处理缺失值。缺失的数据对于某些模型的影响比对其它模型更大。即使是对于那些被用于处理缺失数据的模型来说,它们也可能对缺失数据很敏感(某些变量的缺失数据可能导致预测性能变差)
2. 选择处理异常值的方法
异常值在多维数据中十分常见。
有些模型对异常值的敏感性比其它模型要低。通常而言,树模型对于异常值的存在不太敏感。然而回归模型、或者任何试图使用方程的模型都会受到异常值的严重影响。
异常值可能是糟糕的数据收集造成的,也可能是合理的极值。
3. 数据需要被聚合吗?
数据增强
1. 特征工程是从原始数据中产生能够被用于建模的数据的过程,可以起到以下几种作用:
使模型更容易被解释(如数据分箱(binning))
捕获更复杂的关系(如神经网络)
减少数据冗余并降低数据维度(如主成分分析(PCA))
重新缩放变量(如标准化或归一化)
2. 不同的模型可能有不同的特征工程的要求。有的模型有内置的特征工程。
对问题进行分类
下一步是对问题进行分类。这是一个需要分两步实现的过程。
1. 根据输入分类:
如果你拥有的是带标签的数据,那么这就是一个监督学习问题。
如果你拥有的是未标注过的数据,并且希望从中找到有用的结构,那么这就是一个无监督学习问题。
如果你想要通过与环境的交互来优化一个目标函数,那么这就是一个强化学习问题。
2. 根据输出分类:
如果模型的输出是一个(连续的)数字,那么这就是一个回归问题。
如果模型的输出是一个类别,那么这就是一个分类问题。
如果模型的输出是一组用输入数据划分出的簇,那么这就是一个聚类问题。
你想发现一个异常点吗?此时你面对的就是一个异常检测问题。
理解你要满足的约束条
你需要考虑你能够存储数据的容量有多大?这取决于系统的存储容量,你可能无法存储若干 GB 大小的分类、回归模型或者若干 GB 的用于聚类分析的数据。例如,在嵌入式系统中,你就会面临这种情况。
对预测过程的速度是否有要求?在实时应用中,很显然,尽快得出预测结果是十分重要的。例如,在自动驾驶问题中,应用必须尽可能快地对道路标志进行分类,以免发生交通事故。
对学习过程的速度是否有要求?在某些情况下,快速训练模型是十分必要的:有时,你需要使用不同的数据集快速地实时更新你的模型。
寻找可用的算法
当对自己的任务环境有了一个清晰的认识后,你就可以使用你所掌握的工具确定适用于待解决的问题并切实可行的算法。一些影响你选择模型的因素如下:
模型是否满足业务目标
模型需要多少数据预处理工作
模型有多准确
模型的可解释性如何
模型运行的速度有多快:构造模型需要多久?模型做出预测需要多长时间?
模型的可伸缩性如何
模型的复杂度是一个影响算法选择的重要标准。一般来说,一个更复杂的模型具备下列特征:
它依赖于更多的特征进行学习和预测(例如,使用十个而不是两个特征来预测目标)
它依赖于更复杂的特征工程(例如,使用多项式特征、交互特征或主成分)
它有更大的计算开销(例如,需要一个由 100 棵决策树组成的随机森林,而不是一棵单独的决策树)
除此之外,同样的机器学习算法可以基于参数的个数和某些超参数的选择而变得更加复杂。例如:
回归模型可以拥有更多的特征,或者多项式项和交互项。
决策树可以拥有更大或更小的深度。
将相同的算法变得更加复杂增加了发生过拟合的几率。

常用的机器学习算法
线性回归
这可能是机器学习中最简单的算法。例如,当你想要计算一些连续值,而不是将输出分类时,可以使用回归算法。因此,当你需要预测一个正在运行的过程未来的值时,你可以使用回归算法。然而,当特征冗余,即如果存在多重共线性(multicollinearity)时,线性回归就不太稳定。
在下列情况下可以考虑使用线性回归:
从一个地方移动到另一个地方所需的时间
预测下个月某种产品的销售情况
血液中的酒精含量对协调能力的影响
预测每个月礼品卡的销售情况,并改善年收入的估算
Logistic 回归
Logistic 回归执行二进制分类,因此输出二值标签。它将特征的线性组合作为输入,并且对其应用非线性函数(sigmoid),因此它是一个非常小的神经网络的实例。
logistic回归提供了许多方法对你的模型进行正则化处理,因此正如在朴素贝叶斯算法中那样,你不必担心你的特征是否相关。该模型还有一个很好的概率化的解释。不像在决策树或者支持向量机中那样,你可以很容易地更新你的模型以获取新的数据。如果你想要使用一个概率化的框架,或者你希望在未来能够快速地将更多的训练数据融合到你的模型中,你可以使用 logistic 回归算法。logistic 回归还可以帮助你理解预测结果背后起作用的因素,它不完全是一个黑盒方法。
在下列情况下可以考虑使用 logistic 回归算法:
预测客户流失
信用评分和欺诈检测
评价市场营销活动的效果
决策树
决策树很少被单独使用,但是不同的决策树可以组合成非常高效的算法,例如随机森林或梯度提升树算法。
决策树很容易处理特征交互,并且决策树是一种非参数模型,所以你不必担心异常值或者数据是否是线性可分的。决策树算法的一个缺点是,它们不支持在线学习,因此当你要使用新的样本时,你不得不重新构建决策树。决策树的另一个缺点是,它很容易发生过拟合,而这就是像随机森林(或提升树)这样的集成学习方法能够派上用场的地方。决策树也需要大量的内存空间(拥有的特征越多,你的决策树可能会越深、越大)
决策树能够很好地帮助你在诸多行动路径中做出选择:
做出投资决策
预测客户流失
找出可能拖欠银行贷款的人
在“建造”和“购买”两种选择间进行抉择
销售主管的资质审核
K-均值
有时,你完全没有数据的标签信息,并且你的目的是根据对象的特征来为其打上标签。这种问题被称为聚类任务。聚类算法可以在这种情况下被使用:例如,当你有一大群用户,你希望根据他们共有的一些属性将其划分到一些特定的组中。
如果在你的问题声明中有这样的问题:例如,找出一群个体的组织形式,或将某些东西分组,或找出特定的组。这时,你就应该使用聚类算法。
该方法最大的缺点是,K-均值算法需要提前知道你的数据会有多少簇,因此这可能需要进行大量的试验去“猜测”我们最终定义的簇的最佳个数——K。
主成分分析(PCA)
主成分分析能够对数据进行降维。有时,你拥有各种各样的特征,这些特征之间的相关性可能很高,而模型如果使用如此大量的数据可能会产生过拟合现象。这时,你可以使用主成分分析(PCA)技术。
主成分分析(PCA)能够起作用的关键因素是:除了低维的样本表征,它还提供了各种变量的一种同步的低维表征。同步的样本和变量的表征提供了一种能够可视化地找到能够表示一组样本的特征的变量的方法。
支持向量机
支持向量机(SVM)是一种在模式识别和分类问题中被广泛应用的监督机器学习技术——当你的数据恰好有两类时。
支持向量机准确率高,对于防止过拟合很好的理论保障。当你使用一个合适的核函数时,即使你的数据在基(低维)特征空间中是线性不可分的,他们也可以很好地工作。支持向量机在文本分类问题中非常流行,在该问题中,输入是一个维度非常高的空间是很正常的。然而,SVM 是一种内存密集型算法,它很难被解释,并且对其进行调优十分困难。
在下列现实世界的应用中,你可以使用支持向量机:
发现患有糖尿病等常见疾病的人
手写字符识别
文本分类——将文章按照话题分类
股票市场价格预测
朴素贝叶斯
这是一种基于贝叶斯定理的分类技术,它很容易构建,非常适用于大规模数据集。除了结构简单,据说朴素贝叶斯的表现甚至比一些复杂得多的分类方法更好。当 CPU 和内存资源有限时,朴素贝叶斯算法也是一个很好的选项。
朴素贝叶斯非常简单,你仅仅是在做大量的计数工作。如果朴素贝叶斯的条件独立假设确实成立,朴素贝叶斯分类器的收敛速度会比 logistic 回归这样的判别模型更快,因此需要的训练数据更少。即使朴素贝叶斯的假设不成立,朴素贝叶斯分类器往往也能很好地完成任务。如果你想使用一种快速的、简单的、性能也不错的模型,朴素贝叶斯是一个很好的选择。这种算法最大的缺点就是它不能学习到特征之间的相互作用。
在下列真实世界的应用中,你可以使用朴素贝叶斯:
情感分析和文本分类
类似于 Netflix、Amazon 这样的推荐系统
识别垃圾邮件
人脸识别
随机森林
随机森林是一种决策树的集成方法。它能够同时解决具有大规模数据集的回归问题和分类问题,还有助于从数以千计的输入变量中找出最重要的变量。随机森林具有很强的可伸缩性,它适用于任何维数的数据,并且通常具有相当不错的性能。此外,还有一些遗传算法,它们可以在具有最少的关于数据本身的知识的情况下,很好地扩展到任何维度和任何数据上,其中最简单的实现就是微生物遗传算法。然而,随机森林学习的速度可能会很慢(取决于参数设置),并且这种方法不能迭代地改进生成模型。
在下列现实世界的应用中,你可以使用随机森林:
预测高危患者
预测零件在生产中的故障
预测拖欠贷款的人
神经网络
神经网络中包含着神经元之间连接的权重。这些权重是平衡的,逐次对数据点进行学习。当所有的权重都被训练好后,如果需要对新给定的数据点进行回归,神经网络可以被用于预测分类结果或一个具体数值。利用神经网络,可以对特别复杂的模型进行训练,并且将其作为一种黑盒方法加以利用,而在训练模型之前,我们无需进行不可预测的复杂特征工程。通过与“深度方法”相结合,甚至可以采用更加不可预测的模型去实现新任务。例如,最近人们已经通过深度神经网络大大提升了物体识别任务的结果。深度学习还被应用于特征提取这样的非监督学习任务,也可以在人为干预更少的情况下,从原始图像或语音中提取特征。
另一方面,神经网络很难被解释清楚,其参数设置也复杂地让人难以置信。此外,神经网络算法也都是资源密集型和内存密集型的。
SCIKIT 参考手册
Scikit learning 为大家提供了一个非常深入的、解释地很清楚的流程图,它能够帮助你选择正确的算法。我认为此图十分方便。

结论
一般来说,你可以根据上面介绍的要点来筛选出一些算法,但是要想在一开始就知道哪种方法最好是很难的。你最好多迭代几次选择算法的过程。将你的数据输入给那些你确定的潜在优秀机器学习算法,通过并行或串行的方式运行这些算法,最终评估算法性能,从而选择出最佳的算法。
在最后,我想告诉你:为现实生活中的问题找到正确的解决方案,通常不仅仅是一个应用数学方法的问题。这要求我们对业务需求、规则和制度、相关利益者的关注点有所了解,并且具备大量的专业知识。在解决一个机器学习问题的同时,能够结合并平衡这些问题是至关重要的,那些能做到这一点的人可以创造最大的价值。

⑷ 聚众监测识别系统带来哪些在线功能上的实现

聚众监测识别系统基于智能视频分析,自动对视频图像信息进行分析识别,无需人工干预,能对监控区域进行实时检测,若检测到异常人员聚集时,立即触发报警,有效的协助管理人员工作,并最大限度地降低误报和漏报现象,减少人力监管的成本。
1.告警精确度高
智能视频分析系统内置智能算法,能排除气候与环境因素的干扰,有效弥补人工监控的不足,减少视频监控系统整体的误报率和漏报率。
2.实时识别报警
基于智能视频分析和深度学习神经网络技术,对监控区域内的人员异常聚集行为进行识别,报警信息可显示在监控客户端界面,也可将报警信息推送到移动端。
3.全天候运行稳定可靠
智能视频监控系统可对监控画面进行7×24不间断的分析,大大提高了视频资源的利用率,减少人工监控的工作强度。
4.告警存储功能
对监控区域内的人员异常聚集行为实时识别预警,并将报警信息存储到服务器数据库中,包括时间、地点、快照、视频等。

⑸ 什么是BP神经网络

BP算法的基本思想是:学习过程由信号正向传播与误差的反向回传两个部分组成;正向传播时,输入样本从输入层传入,经各隐层依次逐层处理,传向输出层,若输出层输出与期望不符,则将误差作为调整信号逐层反向回传,对神经元之间的连接权矩阵做出处理,使误差减小。经反复学习,最终使误差减小到可接受的范围。具体步骤如下:
1、从训练集中取出某一样本,把信息输入网络中。
2、通过各节点间的连接情况正向逐层处理后,得到神经网络的实际输出。
3、计算网络实际输出与期望输出的误差。
4、将误差逐层反向回传至之前各层,并按一定原则将误差信号加载到连接权值上,使整个神经网络的连接权值向误差减小的方向转化。
5、対训练集中每一个输入—输出样本对重复以上步骤,直到整个训练样本集的误差减小到符合要求为止。

⑹ 综述:广义的分布外检测(异常检测、开集识别、OOD检测)

Generalized Out-of-Distribution Detection: A Survey Jingkang Yang, Kaiyang Zhou, Yixuan Li, and Ziwei Liu https://github.com/Jingkang50/OODSurvey

分布外(Out-Of-Distribution,OOD)检测对确保机器学习系统的可靠性和安全性至关重要。例如,在自动驾驶中,当遇到它从未见过、无法给出安全决策的非常规情形或物体,我们需要驾驶系统发出警告并且将控制权交给人类。自2017年被提出起,这个问题越来越受研究者关注,各种解决方案层出不穷,大致包括:基于分类的、基于密度的、基于重构的、基于距离的方法。与此同时,其他几个问题在动机和方法上与分布外检测紧密相关,这些问题包括:异常检测(Anomaly Detection,AD)、新类检测(Novelty Detection)、开集识别(Open Set Recognition,OSR)和离群检测(Outlier Detection,OD)。尽管他们各自定义和问题设定不同,这些问题经常使读者和实践者感到困惑,这导致有些现有工作误用了这些术语。实际上,AD、ND、OSR、OOD、OD这五个问题能够统一在广义的分布外检测框架下,都可以视作分布外检测的特例或子任务,并且能够轻易地被区分。这篇综述通过总结最新的技术发展对这五个问题做了深入的回顾,并以该领域的开放挑战和潜在的研究方向作结。

可信的视觉识别系统不仅仅在已知的情境下能给出精确预测,还应该能检测到未知的样本并且丢弃或将它们交给用户来做安全地处理。

比如,一个训练良好的食物分类器应该丢弃像用户自拍照之类的非食物图片,而不是胡乱判定其属于某已知的食物类别。在安全要求极高的应用中,比如无人驾驶,系统应该在它碰到不寻常的、未在训练中见到的情形或物体时发出警告并将控制权交给司机。

大多数现有机器学习模型都基于封闭世界假设(the closed-world assumption)来训练,即测试集和训练集独立同分布,或者说两者来源于同一分布(in-distribution)。然而,当模型被部署在开放世界场景(open-world scenario)中,测试样本的分布可以是取自不同于训练集分布的分布的(out of distribution),因而需要被谨慎处理。分布的变化可能是语义漂移(比如,OOD样本取自别的类别)、协变量漂移(也称输入漂移,比如OOD样本取自其他领域??)。

只考虑语义漂移和协变量漂移两类漂移。

异常检测目的在于在测试阶段检测异常的样本,“异常”指的是偏离预定义的“正常”。这种偏离可能是协变量漂移或是语义漂移导致的。异常检测可以分为两个子任务:

与异常检测的区别 :1) 动机上,新类检测中并不像异常检测把没见过的“新”样本看做错误的或是有害的,而是将珍视这些新样本为后续模型的学习资源;2)新类检测首要关注的是语义漂移;3)新类检测中,没有限制ID样本属于单个类,在训练集中可以有多个类别的样本。

新类检测目的在于检测出不属于任何训练类别的测试样本。检测到的新奇样本通常预备用于未来程序的构建,比如特异性更强的分析、当前模型的增量学习等。依据训练类别数量的差异,新类检测分为:

OSR需要一个多类别分类器来同时1)精确地分类 训练类别的 测试样本(ID);2)识别出测试样本中 不属于训练类别 的样本(OOD)。

OSR = multi-class ND

需要模型拒绝标签迁移的样本以保证预测可靠性和安全性

分布外检测目的在于检测测试样本

当某个样本显着区别于其他的样本时,认为它是“离群”的。在异常检测、新类检测、开集识别、分布外检测的问题设定中,都存在这训练-测试的流程,要挑出测试中出现的不属于训练分布的样本。

而离群检测无“训练分布”、“测试分布”,而是直接挑出所有可见样本中显着区别于其他的那些样本。

给定同构的ID数据,最直接的方法是1)基于密度的方法,这些方法估计ID的密度,拒绝那些偏离估计的OOD的测试样本。其他的方法包括:2)依靠图片重构的质量来识别异常样本,3)直接学习一个决策边界来区分ID和OOD样本,4)基于距离的方法,5)基于元学习的方法

基于密度的方法尝试去建模正常数据(ID数据)的分布,这种做法基于一个实践假设:异常的测试样本在估计的密度模型下游较低的概率值,而正常样本概率值较高。

参数密度估计假设ID样本的密度能够被表示为某种定义好的分布。一种方法是在训练数据上拟合一个多变量高斯分布,并且度量测试样本与训练样本的期望之间的马氏距离(协方差距离,计算两个未知样本集的相似度的方法。与欧氏距离不同的是它考虑到各种特性之间的联系)。其他的工作采用了更复杂的假设,认为训练分布是混合的高斯分布或是泊松分布等。

非参数密度估计考虑了更贴合实际的情形:预定义的分布不能够建模真实分布。可以简单地用直方图对训练分布进行建模。核密度估计(KDE)进一步使用核函数作为离散直方图的连续替代版,它可以灵活地使用点权重和带宽去控制估计的分布。

虽然经典的密度估计方法在很多任务上获得了很好的AD性能,但它们更适合低维任务。
对于计算机视觉任务中的高维数据,这些方法的计算性和可伸缩性受到影响。为缓解维数灾难,有些方法通过特征工程降维[277],[278]。

通过由潜在嵌入重建出输入,自编码器能学到无标签数据的高效表达。变分自编码器将输入的图片编码为服从高斯分布的潜在向量。习得的潜在嵌入可被视为输入的低维表示。传统密度估计方法可以应用在这些深度表示之上。

生成对抗网络由一个生成网络和一个判别网络构成,两者在零和博弈中相互竞争。典型地,生成网络学习从潜在空间到所研究数据分布的映射,而判别网络试图分辨生成器生成的数据和真实数据。然而,不同于基于自编码器/变分自编码器的范式,少了一个编码器使得GAN难以直接为一张输入图片找到相应的嵌入。针对这个问题,ADGAN [90] 对一个给定的样本,在潜在空间搜索一个好的表示。如果找不到这样的表示,这个样本被认为是异常的。该方法计算代价极高。

规范化的流描述了一个概率分布经过一系列可逆映射的转化过程。通过重复施加变量变化的规则,初始的密度“流”过了一系列可逆映射。因此,使用规范化的流的方法能够直接估计输入空间的可能性。基于流的方法有优雅的数学表示,但是它们同样仅对低维特征敏感。若不进行降维,基于流的方法计算代价高。

除通过生成式模型获取可视化嵌入外,一些方法主要通过扩充模型容量来增加提取到的特征的表示能力,这或许可以让正常(ID)能被更精确地特征化为密度估计。这些策略包括数据增强,对抗训练,蒸馏,损失函数增强,使用浅表/局部特征。

基于能量的方法使用一个标量能量评分来表述变量概率密度,这个标量采用非标准化的负对数概率,

然而,和标准的深度学习模型相比,训练基于能量的方法代价昂贵,因为马尔可夫链蒙特卡罗法(MCMC,在概率空间,通过随机采样估算兴趣参数的后验分布)采样和估计需要积分运算。

为解决这个难题,研究者提出了评分匹配方法和随机梯度之类的方法来支持高效训练。

现有工作也探索了使用频域分析方法做异常检测。人类通过图片的低频信息来理解图片,而CNN更多依赖高频信息来做决策。人们提出了CNN核平滑和谱引导的数据增强之类的方法去抑制高频分量的影响。还有一些工作发现,对低频分量的对抗攻击也很难被检测到,因此提出

基于频率的方法专注于感官异常检测(尤其是检测对抗样本),或许不适用于语义异常检测。

基于重构的方法的核心在于在ID数据上训练得到的编解码器(encoder-decoder)框架通常对ID和OOD样本返回不同的效果。

模型表现的差异可以被用作异常检测的指标。模型表现的差异可以用特征空间的差异或是重构误差来度量。

系数重构假定每个正常样本都能被有限个基础函数精确重构,而异常数据的重构开销则更大,因此生成了稠密表示。稀疏表示的典型技巧包括基于L1正则的核PCA和低阶嵌入网络。

重构误差方法依赖于以下假设:在正常数据上训练得到的重构模型在输入为正常测试样本时会输出更高质量的结果。深度重构模型(包括自编码器AE、变分自编码器VAE、生成对抗网络GAN和U-Net等)都能够被用作这类方法的backbone。

除去这种结合AE/VAE和重构误差这种标准做法,其他方法使用了更加精细的策略,比如通过memorized normality重构,调整模型架构、部分/有条件的重构。

在半监督设定下的异常检测中,CoRA分别在ID样本和OOD样本上训练,得到两个自编码器。这两个自编码器的重构误差被用作异常检测的指标。

GAN中的判别器本质上是 通过计算重构误差 实现异常检测。更进一步,GAN的变种,比如去噪声的GAN和类别-条件GAN通过 增加重构难度 获得了更好的性能。有些方法 利用重构图片在下游任务中的表现来进一步放大异常样本的重构误差 。集成也能够优化模型性能。

异常检测、单类别的新类检测通常被形式化为无监督学习问题,将所有的ID样本看做一类。

【283】做了完全有监督的异常检测

半监督的异常检测中,模型训练时用到了无标签数据。

PU学习针对这个问题被提出

自监督方法3.3.3

单个类别分类直接学到一个决策边界

未完成

共性:ID样本的类别(训练类别)为多个。

差异:开集识别还需要精确地给ID样本分类,而新类检测只需得到区分ID/OOD的二分类器。

由于开集识别和多类别新类检测的训练类别为多个,大多数方法都是基于分类的。其余方法包括基于ID原型的以及基于重构的。极少数模型是基于密度的。

为了解决

开集识别和多类新类检测都关注ID样本包含多个类别的情形。分类问题中,一般采用独热编码来编码类别信息。然而,独热编码忽略了类别间的内在联系。举例来说,“狗”-“猫”,“狗”-“车”之间有相同的距离显然不合情理。有些工作考虑这一点,尝试利用新类的标签空间上的信息来解决这个新类检测问题。重分配大的语义空间,形成已知类别的层次化分类

基于标签组织重设,自上而下的分类策略和分组softmax训练被证实有效。应一组工作使用词向量嵌入来自动地构建标签空间。【169】中稀疏独热标签被几组产生自不同NLP模型的稠密词向量替代,形成了多个回归头来做鲁棒的训练。

测试时,标签(同所有不同头给出的嵌入向量距离最小的标签被作为预测结果输出,

如果这个最小距离超出阈值,这个样本被分类为“新”。近期工作进一步采用语言-图片预训练模型输出的特征来更好地检测新类,图片编码空间中也包含来自标签空间的丰富特征。)

基于距离的开集识别方法需要“原型”来实现class-conditional。维持ID样本的分类性能。

基于类别的聚类和原型(prototyping)操作在分类器提取到的视觉特征上进行。

OOD样本能够通过计算样本与聚类之间的距离而被识别。

有些方法还引入了对比学习来为已知类别学到更加紧密的聚类,从而拉远ID和OOD样本之间的距离。

CROSR【177】通过拼接分类器和用于距离计算的重构模型给出的可视化嵌入来在拓展的特征空间中得到强化的特征。除了使用分类器给出的特征,GMVAE【178】使用重构VAE来提取特征,将训练集的嵌入建模为一个多中心的混合高斯分布以便后续基于距离的操作。使用最近邻的分类器也适用于开集识别问题。通过存储训练样本,最近邻距离比值被用于在测试中识别未知样本。

基于重构的方法希望ID和OOD样本被重构时表现不同。这种差异能够在潜在特征空间或重构图片的像素空间中被捕捉到。

通过将已知类别的图片转化为稀疏表示,开集样本由于相对稠密能被识别出。用于稀疏编码的技巧包括:疏密指数(sparsity concentration index)【180】和核虚空间方法(kernel null space method)【181,182】。

通过固定在ID样本训练得到的多分类视觉编码器来维持在ID样本上的分类性能,C2AE训练一个以表情按向量为条件的解码器,使用极值理论估计重构后的图片来区分未知类别。后续的工作使用条件高斯分布,使得不同潜在特征逼近类内(class-wise)高斯模型,以达到在分类已知类别样本的同时能拒绝未知类别样本。其他方法生成反事实(counterfactual)图片来帮助模型更关注语义。对抗防御【186】也以这种思路去增强模型鲁棒性。

后处理检测的方法优点在于无需修改训练程序和目标就可以轻易应用。这一点对现实生产环境中的OOD检测方法很重要。早期的ODIN是一个使用temperature scaling和输入扰动来放大ID/OOD差别的后处理方法。该方法中,一个足够大的temperature有很强的平滑作用,能够将softmax值转换到logit空间(),从而有效区分ID和OOD样本。注意这种方式与信心校准不同,它采用了更温和的T

而校准更关注表达ID样本真实的正确概率

ODIN的评分最大化了ID和OOD样本之间的差异,可能从预测信心的角度看不再有意义。

基于这个见解,近期【189】提出使用能量分值来做OOD检测,该方法不需要超参数并且性能与ODIN相当甚至更好。能量函数将logit输出通过便捷的 logsumexp 运算符映射为标量。能量值相对低的测试样本被认为是ID的,反之为OOD。

【55】进一步提出了联合能量值(JointEnergy score)

为OOD检测定制的基于信心的方法能够通过设计信心估计分支和类别数据增强(结合leaving-out留一策略、对抗训练、更强的数据增强、不确定性建模、利用理想深度的特征)来实现。

特别地,为了增强对协变量偏移的敏感性,一些方法关注神经网络中间层的隐藏表示。泛化的ODIN通过使用DeConf-C作为训练目标来扩展ODIN,选择ID数据上的扰动尺度作为超参。

由于ODIN需要模型训练过程,它未被归类到后处理方法。

为了得到质量更优的隐藏层特征以便进行密度估计,分层的 Mahalanobis距离、 Gram Matrix等技巧被引入。

OOD检测的另一分支利用收集到的OOD样本集(离群样本集),在训练中帮助模型学到ID和OOD的差异。

总的来说,采用离群点暴露的OOD检测能达到明显更优的性能。然而,其性能受给定OOD样本和真实OOD样本间相关性强弱影响明显,如何将OOD由已经暴露的OOD泛化到更广泛的OOD还需进一步探索。

离群点暴露方法依赖于OOD训练数据可获取这一强假设,该条件在实际可能不成立。在OOD数据不可获取时,一些方法尝试去合成OOD样本从而让ID和OOD可区分。现有工作利用GAN来生成OOD训练样本并使模型输出均匀(uniform 正态???)的预测,从而在低密度区域生成边界样本,或者类似地,生成高置信度的OOD样本。

现有的OOD检测方法主要依赖输出或特征空间来给出OOD评分,而忽视了梯度空间的信息。ODIN【188】首次探索了使用梯度信息检测OOD。ODIN使用经过预处理的输入,其预处理为施加由输入梯度得来的细微扰动。ODIN扰动的目标在于增强模型对预测标签的信心从而增加任何给定输入的softmax值。最终,可以找到能使ID和OOD输入的softmax评分差异更大的扰动,从而使得它们更能被区分,使得OOD检测性能更好。ODIN仅隐式地通过扰动来利用梯度。GradNorm则使用梯度向量的范数,从softmax输出和正态概率分布的KL散度反向传播。

贝叶斯模型是一类统计模型,应用贝叶斯法则来推测模型中所有的不确定性。其中,最有代表性的是贝叶斯神经网络,该方法通过马尔可夫链蒙特卡洛方法、拉普拉斯方法、变分推断来构成模型的认知不确定性,从模型的后验分布中采样。它们最明显的缺陷在于预测不精确,计算代价高使得它们难以用于实际。近期工作尝试了几种less principled(理论性较弱??)的近似,包括 MC-dropout [224] 和深度融合 [225],299] 用于更快、更好地估计不确定性。这些方法在OOD不确定性估计上不太有竞争力。更进一步的探索需要在保留贝叶斯原理的优势的同时,采用自然梯度变分推理,从而能够采用实用且可负担的现代深度学习训练。狄利克雷先验网络Dirichlet Prior Network (DPN) 也在OOD检测中被运用,使用对模型不确定性、数据不确定性以及分布不确定性三个不同来源的不确定性进行不确定性建模,出现了一系列工作 [227], [228], [229]。

近期工作推进了更贴近实际应用的大规模OOD检测。研究的两个方向是:将OOD检测扩展到大的语义空间、利用大型的预训练模型。例如,【168】指出,在基于CIFAR benchmark数据得到的方法在语义空间更大的benchmark ImageNet上并不奏效,这强调了在大型真实设定下评估OOD检测的必要性。为解决上述挑战,MOS的关键理念是将大的语义空间解构为有相似概念的更小的群组,这简化了已知和未知数据之间的决策边界。强有力的预训练模型在各种任务、模态都达到了惊人的性能。同期的工作 [171], [230], [231] 证实预训练过的transformer在特定的困难的OOD任务上性能显着改善。

OOD检测领域中,基于密度的方法用一些概率模型显式地建模分布内数据,并将低密度区域的测试数据标记为OOD。即使OOD检测在分布内数据为多类别的情形下和异常检测不同,3.1.2节中的密度估计方法能够通过将分布内数据统一成一个整体而直接适用于OOD检测。当分布内含多个类别时,class-conditional高斯分布能够显式地建模分布内数据,因而分布外样本能够根据输出的预测概率而被识别【207】。基于流的方法 [92], [232], [233], [234]也可被用于概率建模。直接估计OOD概率似乎是一种自然的解决方法,也有一些方法 [235], [236], [237] 通过给OOD样本输出更高的概率预测值来实现OOD检测。【238】尝试使用likelihood ratio来解决这个问题。【239】发现,对输入复杂度,概率值存在明显偏差,提出了一种基于概率值比例的方法来削减输入复杂度的影响。近期的方法转而使用新的评分,例如likelihood regret【240】或是集成多个密度模型【236】。整体上,生成式模型的训练和优化难度几乎是不可接受的,它们的性能也往往落后于基于分类的方法(3.3)

基于距离的方法基本理念在于,测试中OOD样本应当相对远离分布内类别的中心(centroid)或原型(prototype)。【207】使用相对所有类别中心的最小Mahalanobis距离来检测。一个后续工作【241】将图片分为前景和背景,再计算这两个空间间的Mahalanobis距离比例。一些工作使用测试样本特征和类别特征间的余弦相似度来确定OOD样本【242】、【243】。被训练特征的的第一奇异向量一维的子空间

更进一步,其他工作利用了径向基函数核距离(distance with radial basis function kernel)、输入的嵌入向量到类别中心的欧拉距离。

OOD检测领域自出现以来发展迅速,其解决方案从基于分类的、基于密度的、再到基于距离的。在多类别设定下,典型的OOD检测是开集识别问题(第4节),在类别空间Y中精确分类分布内的测试样本,并且丢弃语义不被Y所支持的分布外样本。然而,OOD检测包含了更广泛的学习任务(比如,多标签分类)和解法(比如,密度估计和离群点暴露)。一些方法放宽了开集检测的限制条件,并且达到了更强的性能。

离群检测需要所有样本可见,其目标是检测出那些显着偏离大多数的分布的样本。离群检测方法通常是转导式的,而不是归纳式的。 [13], [14], [15], [16]综述主要回顾了数据挖掘领域的离群检测方法。以下主要回顾离群检测方法,尤其是为计算机视觉设计的使用深度神经网络的方法。即使深度学习方法极少能直接解决离群检测问题,数据清洗程序(从开集脏数据学习的先决条件)和开集半监督学习的方法也在解决离群检测问题。

离群检测模型的基本理念是将整个数据集建模为一个高斯分布,将偏离均值超过三杯标准差的样本标记为离群【300】【301】。其他带参数的概率方法利用Mahalanobis距离[266] 和高斯混合模型 [302]来建模数据密度。和“三倍标准偏离”规则类似,四分位距也可通过构建传统的无参数概率模型来检测离群样本【247】。为了鲁棒和简化,局部离群因子(local outlier factor)方法【248】借助给定点的邻居和它自身局部可达性的比值,去估计给定点的密度。RANSAC【252】迭代地估计数学模型的参数来拟合数据并且找到对估计贡献较少的样本作为离群点。

总体上,经典的异常检测的密度方法比如,核密度估计(3.1节),也可应用于离群检测。即便这些方法由于图片数据维度太高而应用困难,也可以通过降维方法【253,254】和基于最近邻的密度方法(3.1节)来缓解。

检测离群的一个简易方法是计数某特定半径内的邻居数量,或者度量第k近邻居的距离【303,304】。以下主要介绍基于聚类的方法和基于图的方法。

DBSCAN【255】依照基于距离的密度来积聚样本构成聚类。处在主要聚类之外的样本被识别为离群样本。后续工作通过考虑聚类标签的信心改良了聚类的方式【256】。

另一类方法利用数据点之间的关系,并构造邻域图[305], [306](或其变体[307]),利用图的属性和图挖掘技巧来找到异常的样本【257,258】,比如图聚类[259], [260]、图分割【308】、使用图神经网络的标签传播【261】。

⑺ 大数据科学家需要掌握的几种异常值检测方法

引言

异常值检测与告警一直是工业界非常关注的问题,自动准确地检测出系统的异常值,不仅可以节约大量的人力物力,还能尽早发现系统的异常情况,挽回不必要的损失。个推也非常重视大数据中的异常值检测,例如在运维部门的流量管理业务中,个推很早便展开了对异常值检测的实践,也因此积累了较为丰富的经验。本文将从以下几个方面介绍异常值检测。

1、异常值检测研究背景

2、异常值检测方法原理

3、异常值检测应用实践

异常值检测研究背景

异常值,故名思议就是不同于正常值的值。 在数学上,可以用离群点来表述,这样便可以将异常值检测问题转化为数学问题来求解。

异常值检测在很多场景都有广泛的应用,比如:

1、流量监测

互联网上某些服务器的访问量,可能具有周期性或趋势性:一般情况下都是相对平稳的,但是当受到某些黑客攻击后,其访问量可能发生显着的变化,及早发现这些异常变化对企业而言有着很好的预防告警作用。

2、金融风控

正常账户中,用户的转账行为一般属于低频事件,但在某些金融诈骗案中,一些嫌犯的账户就可能会出现高频的转账行为,异常检测系统如果能发现这些异常行为,及时采取相关措施,则会规避不少损失。

3、机器故障检测

一个运行中的流水线,可能会装有不同的传感器用来监测运行中的机器,这些传感器数据就反应了机器运行的状态,这些实时的监测数据具有数据量大、维度广的特点,用人工盯着看的话成本会非常高,高效的自动异常检测算法将能很好地解决这一问题。

异常值检测方法原理

本文主要将异常值检测方法分为两大类:一类是基于统计的异常值检测,另一类是基于模型的异常值检测。

基于统计的方法  

基于模型的方法

1、基于统计的异常值检测方法

常见的基于统计的异常值检测方法有以下2种,一种是基于3σ法则,一种是基于箱体图。

3σ法则  

箱体图

3σ法则是指在样本服从正态分布时,一般可认为小于μ-3σ或者大于μ+3σ的样本值为异常样本,其中μ为样本均值,σ为样本标准差。在实际使用中,我们虽然不知道样本的真实分布,但只要真实分布与正太分布相差不是太大,该经验法则在大部分情况下便是适用的。

箱体图也是一种比较常见的异常值检测方法,一般取所有样本的25%分位点Q1和75%分位点Q3,两者之间的距离为箱体的长度IQR,可认为小于Q1-1.5IQR或者大于Q3+1.5IQR的样本值为异常样本。

基于统计的异常检测往往具有计算简单、有坚实的统计学基础等特点,但缺点也非常明显,例如需要大量的样本数据进行统计,难以对高维样本数据进行异常值检测等。

2、基于模型的异常值检测

通常可将异常值检测看作是一个二分类问题,即将所有样本分为正常样本和异常样本,但这和常规的二分类问题又有所区别,常规的二分类一般要求正负样本是均衡的,如果正负样本不均匀的话,训练结果往往会不太好。但在异常值检测问题中,往往面临着正(正常值)负(异常值)样本不均匀的问题,异常值通常比正常值要少得多,因此需要对常规的二分类模型做一些改进。

基于模型的异常值检测一般可分为有监督模型异常值检测和无监督模型异常值检测,比较典型的有监督模型如oneclassSVM、基于神经网络的自编码器等。 oneclassSVM就是在经典的SVM基础上改进而来,它用一个超球面替代了超平面,超球面以内的值为正常值,超球面以外的值为异常值。

经典的SVM  

1

 基于模型的方法

2

基于神经网络的自编码器结构如下图所示。

自编码器(AE)

将正常样本用于模型训练,输入与输出之间的损失函数可采用常见的均方误差,因此检测过程中,当正常样本输入时,均方误差会较小,当异常样本输入时,均方误差会较大,设置合适的阈值便可将异常样本检测出来。但该方法也有缺点,就是对于训练样本比较相近的正常样本判别较好,但若正常样本与训练样本相差较大,则可能会导致模型误判。

无监督模型的异常值检测是异常值检测中的主流方法,因为异常值的标注成本往往较高,另外异常值的产生往往无法预料,因此有些异常值可能在过去的样本中根本没有出现过, 这将导致某些异常样本无法标注,这也是有监督模型的局限性所在。 较为常见的无监督异常值检测模型有密度聚类(DBSCAN)、IsolationForest(IF)、RadomCutForest(RCF)等,其中DBSCAN是一种典型的无监督聚类方法,对某些类型的异常值检测也能起到不错的效果。该算法原理网上资料较多,本文不作详细介绍。

IF算法最早由南京大学人工智能学院院长周志华的团队提出,是一种非常高效的异常值检测方法,该方法不需要对样本数据做任何先验的假设,只需基于这样一个事实——异常值只是少数,并且它们具有与正常值非常不同的属性值。与随机森林由大量决策树组成一样,IsolationForest也由大量的树组成。IsolationForest中的树叫isolation tree,简称iTree。iTree树和决策树不太一样,其构建过程也比决策树简单,因为其中就是一个完全随机的过程。

假设数据集有N条数据,构建一颗iTree时,从N条数据中均匀抽样(一般是无放回抽样)出n个样本出来,作为这颗树的训练样本。

在样本中,随机选一个特征,并在这个特征的所有值范围内(最小值与最大值之间)随机选一个值,对样本进行二叉划分,将样本中小于该值的划分到节点的左边,大于等于该值的划分到节点的右边。

这样得到了一个分裂条件和左、右两边的数据集,然后分别在左右两边的数据集上重复上面的过程,直至达到终止条件。 终止条件有两个,一个是数据本身不可再分(只包括一个样本,或者全部样本相同),另外一个是树的高度达到log2(n)。 不同于决策树,iTree在算法里面已经限制了树的高度。不限制虽然也可行,但出于效率考虑,算法一般要求高度达到log2(n)深度即可。

把所有的iTree树构建好了,就可以对测试数据进行预测了。预测的过程就是把测试数据在iTree树上沿对应的条件分支往下走,直到达到叶子节点,并记录这过程中经过的路径长度h(x),即从根节点,穿过中间的节点,最后到达叶子节点,所走过的边的数量(path length)。最后,将h(x)带入公式,其中E(.)表示计算期望,c(n)表示当样本数量为n时,路径长度的平均值,从而便可计算出每条待测数据的异常分数s(Anomaly Score)。异常分数s具有如下性质:

1)如果分数s越接近1,则该样本是异常值的可能性越高;

2)如果分数s越接近0,则该样本是正常值的可能性越高;

RCF算法与IF算法思想上是比较类似的,前者可以看成是在IF算法上做了一些改进。针对IF算法中没有考虑到的时间序列因素,RCF算法考虑了该因素,并且在数据样本采样策略上作出了一些改进,使得异常值检测相对IF算法变得更加准确和高效,并能更好地应用于流式数据检测。

IF算法

RCF算法

上图展示了IF算法和RCF算法对于异常值检测的异同。我们可以看出原始数据中有两个突变异常数据值,对于后一个较大的突变异常值,IF算法和RCF算法都检测了出来,但对于前一个较小的突变异常值,IF算法没有检测出来,而RCF算法依然检测了出来,这意味着RCF有更好的异常值检测性能。

异常值检测应用实践

理论还需结合实践,下面我们将以某应用从2016.08.16至2019.09.21的日活变化情况为例,对异常值检测的实际应用场景予以介绍:

从上图中可以看出该应用的日活存在着一些显着的异常值(比如红色圆圈部分),这些异常值可能由于活动促销或者更新迭代出现bug导致日活出现了比较明显的波动。下面分别用基于统计的方法和基于模型的方法对该日活序列数据进行异常值检测。

基于3σ法则(基于统计)

RCF算法(基于模型)

从图中可以看出,对于较大的突变异常值,3σ法则和RCF算法都能较好地检测出来, 但对于较小的突变异常值,RCF算法则要表现得更好。

总结

上文为大家讲解了异常值检测的方法原理以及应用实践。综合来看,异常值检测算法多种多样 ,每一种都有自己的优缺点和适用范围,很难直接判断哪一种异常检测算法是最佳的, 具体在实战中,我们需要根据自身业务的特点,比如对计算量的要求、对异常值的容忍度等,选择合适的异常值检测算法。

接下来,个推也会结合自身实践,在大数据异常检测方面不断深耕,继续优化算法模型在不同业务场景中的性能,持续为开发者们分享前沿的理念与最新的实践方案。

⑻ 吴恩达 卷积神经网络 CNN

应用计算机视觉时要面临的一个挑战是数据的输入可能会非常大。例如一张 1000x1000x3 的图片,神经网络输入层的维度将高达三百万,使得网络权重 W 非常庞大。这样会造成两个后果:

神经网络结构复杂,数据量相对较少,容易出现过拟合;
所需内存和计算量巨大。
因此,一般的神经网络很难处理蕴含着大量数据的图像。解决这一问题的方法就是使用卷积神经网络

我们之前提到过,神经网络由浅层到深层,分别可以检测出图片的边缘特征、局部特征(例如眼睛、鼻子等),到最后面的一层就可以根据前面检测的特征来识别整体面部轮廓。这些工作都是依托卷积神经网络来实现的。

卷积运算(Convolutional Operation)是卷积神经网络最基本的组成部分。我们以边缘检测为例,来解释卷积是怎样运算的。

图片最常做的边缘检测有两类:垂直边缘(Vertical Edges)检测和水平边缘(Horizontal Edges)检测。

比如检测一张6x6像素的灰度图片的vertical edge,设计一个3x3的矩阵(称之为filter或kernel),让原始图片和filter矩阵做卷积运算(convolution),得到一个4x4的图片。 具体的做法是,将filter矩阵贴到原始矩阵上(从左到右从上到下),依次可以贴出4x4种情况。 让原始矩阵与filter重合的部分做element wise的乘积运算再求和 ,所得的值作为4x4矩阵对应元素的值。如下图是第一个元素的计算方法,以此类推。

可以看到,卷积运算的求解过程是从左到右,由上到下,每次在原始图片矩阵中取与滤波器同等大小的一部分,每一部分中的值与滤波器中的值对应相乘后求和,将结果组成一个矩阵。

下图对应一个垂直边缘检测的例子:

如果将最右边的矩阵当作图像,那么中间一段亮一些的区域对应最左边的图像中间的垂直边缘。

下图3x3滤波器,通常称为垂直 索伯滤波器 (Sobel filter):

看看用它来处理知名的Lena照片会得到什么:

现在可以解释卷积操作的用处了:用输出图像中更亮的像素表示原始图像中存在的边缘。

你能看出为什么边缘检测图像可能比原始图像更有用吗?

回想一下MNIST手写数字分类问题。在MNIST上训练的CNN可以找到某个特定的数字。比如发现数字1,可以通过使用边缘检测发现图像上两个突出的垂直边缘。

通常,卷积有助于我们找到特定的局部图像特征(如边缘),用在后面的网络中。

假设输入图片的大小为 n×n,而滤波器的大小为 f×f,则卷积后的输出图片大小为 (n−f+1)×(n−f+1)。

这样就有两个问题:

为了解决这些问题,可以在进行卷积操作前,对原始图片在边界上进行填充(Padding),以增加矩阵的大小。通常将 0 作为填充值。

设每个方向扩展像素点数量为 p,则填充后原始图片的大小为 (n+2p)×(n+2p),滤波器大小保持 f×f不变,则输出图片大小为 (n+2p−f+1)×(n+2p−f+1)。

因此,在进行卷积运算时,我们有两种选择:

在计算机视觉领域,f通常为奇数。原因包括 Same 卷积中 p=(f−1)/ 2 能得到自然数结果,并且滤波器有一个便于表示其所在位置的中心点。

卷积过程中,有时需要通过填充来避免信息损失,有时也需要通过设置 步长(Stride) 来压缩一部分信息。

步长表示滤波器在原始图片的水平方向和垂直方向上每次移动的距离。之前,步长被默认为 1。而如果我们设置步长为 2,则卷积过程如下图所示:

设步长为 s,填充长度为p, 输入图片大小为n x n, 滤波器大小为f x f, 则卷积后图片的尺寸为:

注意公式中有一个向下取整的符号,用于处理商不为整数的情况。向下取整反映着当取原始矩阵的图示蓝框完全包括在图像内部时,才对它进行运算。

如果我们想要对三通道的 RGB 图片进行卷积运算,那么其对应的滤波器组也同样是三通道的。过程是将每个单通道(R,G,B)与对应的滤波器进行卷积运算求和,然后再将三个通道的和相加,将 27 个乘积的和作为输出图片的一个像素值。

如果想同时检测垂直和水平边缘,或者更多的边缘检测,可以增加更多的滤波器组。例如设置第一个滤波器组实现垂直边缘检测,第二个滤波器组实现水平边缘检测。设输入图片的尺寸为 n×n×nc(nc为通道数),滤波器尺寸为 f×f×nc,则卷积后的输出图片尺寸为 (n−f+1)×(n−f+1)×n′c,n′c为滤波器组的个数。

与之前的卷积过程相比较,卷积神经网络的单层结构多了激活函数和偏移量;而与标准神经网络相比,滤波器的数值对应着权重 W[l],卷积运算对应着 W[l]与 A[l−1]的乘积运算,所选的激活函数变为 ReLU。

对于一个 3x3x3 的滤波器,包括偏移量 b(27+1)在内共有 28 个参数。不论输入的图片有多大,用这一个滤波器来提取特征时,参数始终都是 28 个,固定不变。即选定滤波器组后,参数的数目与输入图片的尺寸无关。因此,卷积神经网络的参数相较于标准神经网络来说要少得多。这是 CNN 的优点之一。

图像中的相邻像素倾向于具有相似的值,因此通常卷积层相邻的输出像素也具有相似的值。这意味着,卷积层输出中包含的大部分信息都是冗余的。如果我们使用边缘检测滤波器并在某个位置找到强边缘,那么我们也可能会在距离这个像素1个偏移的位置找到相对较强的边缘。但是它们都一样是边缘,我们并没有找到任何新东西。池化层解决了这个问题。这个网络层所做的就是通过减小输入的大小降低输出值的数量。池化一般通过简单的最大值、最小值或平均值操作完成。以下是池大小为2的最大池层的示例:

在计算神经网络的层数时,通常只统计具有权重和参数的层,因此池化层通常和之前的卷积层共同计为一层。

图中的 FC3 和 FC4 为全连接层,与标准的神经网络结构一致。

个人推荐 一个直观感受卷积神经网络的网站 。

相比标准神经网络,对于大量的输入数据,卷积过程有效地减少了 CNN 的参数数量,原因有以下两点:

-参数共享(Parameter sharing):特征检测如果适用于图片的某个区域,那么它也可能适用于图片的其他区域。即在卷积过程中,不管输入有多大,一个特征探测器(滤波器)就能对整个输入的某一特征进行探测。

-稀疏连接(Sparsity of connections):在每一层中,由于滤波器的尺寸限制,输入和输出之间的连接是稀疏的,每个输出值只取决于输入在局部的一小部分值。

池化过程则在卷积后很好地聚合了特征,通过降维来减少运算量。

由于 CNN 参数数量较小,所需的训练样本就相对较少,因此在一定程度上不容易发生过拟合现象。并且 CNN 比较擅长捕捉区域位置偏移。即进行物体检测时,不太受物体在图片中位置的影响,增加检测的准确性和系统的健壮性。

在神经网络可以收敛的前提下,随着网络深度增加,网络的表现先是逐渐增加至饱和,然后迅速下降

需要注意,网络退化问题不是过拟合导致的,即便在模型训练过程中,同样的训练轮次下,退化的网络也比稍浅层的网络的训练错误更高,如下图所示。

这一点并不符合常理:如果存在某个 K层网络是当前F的最优的网络,我们构造更深的网络。那么K之后的层数可以拟合成恒等映射,就可以取得和F一直的结果。如果K不是最佳层数,那么我们比K深,可以训练出的一定会不差于K的。总而言之,与浅层网络相比,更深的网络的表现不应该更差。因此,一个合理的猜测就是, 对神经网络来说,恒等映射并不容易拟合。

也许我们可以对网络单元进行一定的改造,来改善退化问题?这也就引出了残差网络的基本思路

既然神经网络不容易拟合一个恒等映射,那么一种思路就是构造天然的恒等映射。

实验表明,残差网络 很好地解决了深度神经网络的退化问题 ,并在ImageNet和CIFAR-10等图像任务上取得了非常好的结果,同等层数的前提下残差网络也 收敛得更快 。这使得前馈神经网络可以采用更深的设计。除此之外, 去除个别神经网络层,残差网络的表现不会受到显着影响 ,这与传统的前馈神经网络大相径庭。

2018年的一篇论文,The Shattered Gradients Problem: If resnets are the answer, then what is the question,指出了一个新的观点,尽管残差网络提出是为了解决梯度弥散和网络退化的问题, 它解决的实际上是梯度破碎问题

作者通过可视化的小型实验(构建和训练一个神经网络发现,在浅层神经网络中,梯度呈现为棕色噪声(brown noise),深层神经网络的梯度呈现为白噪声。在标准前馈神经网络中,随着深度增加, 神经元梯度的相关性(corelation)按指数级减少 (1 / 2^L) ;同时, 梯度的空间结构也随着深度增加被逐渐消除 。这也就是梯度破碎现象。

梯度破碎为什么是一个问题呢?这是因为许多优化方法假设梯度在相邻点上是相似的,破碎的梯度会大大减小这类优化方法的有效性。另外,如果梯度表现得像白噪声,那么某个神经元对网络输出的影响将会很不稳定。

相较标准前馈网络, 残差网络中梯度相关性减少的速度从指数级下降到亚线性级 ) (1 / sqrt(L)) ,深度残差网络中,神经元梯度介于棕色噪声与白噪声之间(参见上图中的c,d,e);残差连接可以 极大地保留梯度的空间结构 。残差结构缓解了梯度破碎问题。

1x1 卷积指滤波器的尺寸为 1。当通道数为 1 时,1x1 卷积意味着卷积操作等同于乘积操作。
而当通道数更多时,1x1 卷积的作用实际上类似全连接层的神经网络结构,从而降低(或升高,取决于滤波器组数)数据的维度。

池化能压缩数据的高度(nH)及宽度(nW),而 1×1 卷积能压缩数据的通道数(nC)。在如下图所示的例子中,用 filters个大小为 1×1×32 的滤波器进行卷积,就能使原先数据包含的 32个通道压缩为 filters 个。

在这之前,网络大都是这样子的:

也就是卷积层和池化层的顺序连接。这样的话,要想提高精度,增加网络深度和宽度是一个有效途径,但也面临着参数量过多、过拟合等问题。(当然,改改超参数也可以提高性能)

有没有可能在同一层就可以提取不同(稀疏或不稀疏)的特征呢(使用不同尺寸的卷积核)?于是,2014年,在其他人都还在一味的增加网络深度时(比如vgg),GoogleNet就率先提出了卷积核的并行合并(也称Bottleneck Layer),如下图。

和卷积层、池化层顺序连接的结构(如VGG网络)相比,这样的结构主要有以下改进:

按照这样的结构来增加网络的深度,虽然可以提升性能,但是还面临计算量大(参数多)的问题。为改善这种现象,GooLeNet借鉴Network-in-Network的思想,使用1x1的卷积核实现降维操作(也间接增加了网络的深度),以此来减小网络的参数量(这里就不对两种结构的参数量进行定量比较了),如图所示。

最后实现的inception v1网络是上图结构的顺序连接

由于卷积这门课的其他内容和计算机视觉关系比较密切。对我理解推荐系统帮助不大。所以这个系列就到这里。吴恩达的课还是很好的,作业和课和测验我都认真做啦。

⑼ 人工神经网络概念梳理与实例演示

人工神经网络概念梳理与实例演示
神经网络是一种模仿生物神经元的机器学习模型,数据从输入层进入并流经激活阈值的多个节点。
递归性神经网络一种能够对之前输入数据进行内部存储记忆的神经网络,所以他们能够学习到数据流中的时间依赖结构。
如今机器学习已经被应用到很多的产品中去了,例如,siri、Google Now等智能助手,推荐引擎——亚马逊网站用于推荐商品的推荐引擎,Google和Facebook使用的广告排名系统。最近,深度学习的一些进步将机器学习带入公众视野:AlphaGo 打败围棋大师李世石事件以及一些图片识别和机器翻译等新产品的出现。
在这部分中,我们将介绍一些强大并被普遍使用的机器学习技术。这当然包括一些深度学习以及一些满足现代业务需求传统方法。读完这一系列的文章之后,你就掌握了必要的知识,便可以将具体的机器学习实验应用到你所在的领域当中。
随着深层神经网络的精度的提高,语音和图像识别技术的应用吸引了大众的注意力,关于AI和深度学习的研究也变得更加普遍了。但是怎么能够让它进一步扩大影响力,更受欢迎仍然是一个问题。这篇文章的主要内容是:简述前馈神经网络和递归神经网络、怎样搭建一个递归神经网络对时间系列数据进行异常检测。为了让我们的讨论更加具体化,我们将演示一下怎么用Deeplearning4j搭建神经网络。
一、什么是神经网络?
人工神经网络算法的最初构思是模仿生物神经元。但是这个类比很不可靠。人工神经网络的每一个特征都是对生物神经元的一种折射:每一个节点与激活阈值、触发的连接。
连接人工神经元系统建立起来之后,我们就能够对这些系统进行训练,从而让他们学习到数据中的一些模式,学到之后就能执行回归、分类、聚类、预测等功能。
人工神经网络可以看作是计算节点的集合。数据通过这些节点进入神经网络的输入层,再通过神经网络的隐藏层直到关于数据的一个结论或者结果出现,这个过程才会停止。神经网络产出的结果会跟预期的结果进行比较,神经网络得出的结果与正确结果的不同点会被用来更正神经网络节点的激活阈值。随着这个过程的不断重复,神经网络的输出结果就会无限靠近预期结果。
二、训练过程
在搭建一个神经网络系统之前,你必须先了解训练的过程以及网络输出结果是怎么产生的。然而我们并不想过度深入的了解这些方程式,下面是一个简短的介绍。
网络的输入节点收到一个数值数组(或许是叫做张量多维度数组)就代表输入数据。例如, 图像中的每个像素可以表示为一个标量,然后将像素传递给一个节点。输入数据将会与神经网络的参数相乘,这个输入数据被扩大还是减小取决于它的重要性,换句话说,取决于这个像素就不会影响神经网络关于整个输入数据的结论。
起初这些参数都是随机的,也就是说神经网络在建立初期根本就不了解数据的结构。每个节点的激活函数决定了每个输入节点的输出结果。所以每个节点是否能够被激活取决于它是否接受到足够的刺激强度,即是否输入数据和参数的结果超出了激活阈值的界限。
在所谓的密集或完全连接层中,每个节点的输出值都会传递给后续层的节点,在通过所有隐藏层后最终到达输出层,也就是产生输入结果的地方。在输出层, 神经网络得到的最终结论将会跟预期结论进行比较(例如,图片中的这些像素代表一只猫还是狗?)。神经网络猜测的结果与正确结果的计算误差都会被纳入到一个测试集中,神经网络又会利用这些计算误差来不断更新参数,以此来改变图片中不同像素的重要程度。整个过程的目的就是降低输出结果与预期结果的误差,正确地标注出这个图像到底是不是一条狗。
深度学习是一个复杂的过程,由于大量的矩阵系数需要被修改所以它就涉及到矩阵代数、衍生品、概率和密集的硬件使用问题,但是用户不需要全部了解这些复杂性。
但是,你也应该知道一些基本参数,这将帮助你理解神经网络函数。这其中包括激活函数、优化算法和目标函数(也称为损失、成本或误差函数)。
激活函数决定了信号是否以及在多大程度上应该被发送到连接节点。阶梯函数是最常用的激活函数, 如果其输入小于某个阈值就是0,如果其输入大于阈值就是1。节点都会通过阶梯激活函数向连接节点发送一个0或1。优化算法决定了神经网络怎么样学习,以及测试完误差后,权重怎么样被更准确地调整。最常见的优化算法是随机梯度下降法。最后, 成本函数常用来衡量误差,通过对比一个给定训练样本中得出的结果与预期结果的不同来评定神经网络的执行效果。
Keras、Deeplearning4j 等开源框架让创建神经网络变得简单。创建神经网络结构时,需要考虑的是怎样将你的数据类型匹配到一个已知的被解决的问题,并且根据你的实际需求来修改现有结构。
三、神经网络的类型以及应用
神经网络已经被了解和应用了数十年了,但是最近的一些技术趋势才使得深度神经网络变得更加高效。
GPUs使得矩阵操作速度更快;分布式计算结构让计算能力大大增强;多个超参数的组合也让迭代的速度提升。所有这些都让训练的速度大大加快,迅速找到适合的结构。
随着更大数据集的产生,类似于ImageNet 的大型高质量的标签数据集应运而生。机器学习算法训练的数据越大,那么它的准确性就会越高。
最后,随着我们理解能力以及神经网络算法的不断提升,神经网络的准确性在语音识别、机器翻译以及一些机器感知和面向目标的一些任务等方面不断刷新记录。
尽管神经网络架构非常的大,但是主要用到的神经网络种类也就是下面的几种。
3.1前馈神经网络
前馈神经网络包括一个输入层、一个输出层以及一个或多个的隐藏层。前馈神经网络可以做出很好的通用逼近器,并且能够被用来创建通用模型。
这种类型的神经网络可用于分类和回归。例如,当使用前馈网络进行分类时,输出层神经元的个数等于类的数量。从概念上讲, 激活了的输出神经元决定了神经网络所预测的类。更准确地说, 每个输出神经元返回一个记录与分类相匹配的概率数,其中概率最高的分类将被选为模型的输出分类。
前馈神经网络的优势是简单易用,与其他类型的神经网络相比更简单,并且有一大堆的应用实例。
3.2卷积神经网络
卷积神经网络和前馈神经网络是非常相似的,至少是数据的传输方式类似。他们结构大致上是模仿了视觉皮层。卷积神经网络通过许多的过滤器。这些过滤器主要集中在一个图像子集、补丁、图块的特征识别上。每一个过滤器都在寻找不同模式的视觉数据,例如,有的可能是找水平线,有的是找对角线,有的是找垂直的。这些线条都被看作是特征,当过滤器经过图像时,他们就会构造出特征图谱来定位各类线是出现在图像的哪些地方。图像中的不同物体,像猫、747s、榨汁机等都会有不同的图像特征,这些图像特征就能使图像完成分类。卷积神经网络在图像识别和语音识别方面是非常的有效的。
卷积神经网络与前馈神经网络在图像识别方面的异同比较。虽然这两种网络类型都能够进行图像识别,但是方式却不同。卷积神经网络是通过识别图像的重叠部分,然后学习识别不同部分的特征进行训练;然而,前馈神经网络是在整张图片上进行训练。前馈神经网络总是在图片的某一特殊部分或者方向进行训练,所以当图片的特征出现在其他地方时就不会被识别到,然而卷积神经网络却能够很好的避免这一点。
卷积神经网络主要是用于图像、视频、语音、声音识别以及无人驾驶的任务。尽管这篇文章主要是讨论递归神经网络的,但是卷积神经网络在图像识别方面也是非常有效的,所以很有必要了解。
3.3递归神经网络
与前馈神经网络不同的是,递归神经网络的隐藏层的节点里有内部记忆存储功能,随着输入数据的改变而内部记忆内容不断被更新。递归神经网络的结论都是基于当前的输入和之前存储的数据而得出的。递归神经网络能够充分利用这种内部记忆存储状态处理任意序列的数据,例如时间序列。
递归神经网络经常用于手写识别、语音识别、日志分析、欺诈检测和网络安全
递归神经网络是处理时间维度数据集的最好方法,它可以处理以下数据:网络日志和服务器活动、硬件或者是医疗设备的传感器数据、金融交易、电话记录。想要追踪数据在不同阶段的依赖和关联关系需要你了解当前和之前的一些数据状态。尽管我们通过前馈神经网络也可以获取事件,随着时间的推移移动到另外一个事件,这将使我们限制在对事件的依赖中,所以这种方式很不灵活。
追踪在时间维度上有长期依赖的数据的更好方法是用内存来储存重要事件,以使近期事件能够被理解和分类。递归神经网络最好的一点就是在它的隐藏层里面有“内存”可以学习到时间依赖特征的重要性。
接下来我们将讨论递归神经网络在字符生成器和网络异常检测中的应用。递归神经网络可以检测出不同时间段的依赖特征的能力使得它可以进行时间序列数据的异常检测。
递归神经网络的应用
网络上有很多使用RNNs生成文本的例子,递归神经网络经过语料库的训练之后,只要输入一个字符,就可以预测下一个字符。下面让我们通过一些实用例子发现更多RNNs的特征。
应用一、RNNs用于字符生成
递归神经网络经过训练之后可以把英文字符当做成一系列的时间依赖事件。经过训练后它会学习到一个字符经常跟着另外一个字符(“e”经常跟在“h”后面,像在“the、he、she”中)。由于它能预测下一个字符是什么,所以它能有效地减少文本的输入错误。
Java是个很有趣的例子,因为它的结构包括很多嵌套结构,有一个开的圆括号必然后面就会有一个闭的,花括号也是同理。他们之间的依赖关系并不会在位置上表现的很明显,因为多个事件之间的关系不是靠所在位置的距离确定的。但是就算是不明确告诉递归神经网络Java中各个事件的依赖关系,它也能自己学习了解到。
在异常检测当中,我们要求神经网络能够检测出数据中相似、隐藏的或许是并不明显的模式。就像是一个字符生成器在充分地了解数据的结构后就会生成一个数据的拟像,递归神经网络的异常检测就是在其充分了解数据结构后来判断输入的数据是不是正常。
字符生成的例子表明递归神经网络有在不同时间范围内学习到时间依赖关系的能力,它的这种能力还可以用来检测网络活动日志的异常。
异常检测能够使文本中的语法错误浮出水面,这是因为我们所写的东西是由语法结构所决定的。同理,网络行为也是有结构的,它也有一个能够被学习的可预测模式。经过在正常网络活动中训练的递归神经网络可以监测到入侵行为,因为这些入侵行为的出现就像是一个句子没有标点符号一样异常。
应用二、一个网络异常检测项目的示例
假设我们想要了解的网络异常检测就是能够得到硬件故障、应用程序失败、以及入侵的一些信息。
模型将会向我们展示什么呢?
随着大量的网络活动日志被输入到递归神经网络中去,神经网络就能学习到正常的网络活动应该是什么样子的。当这个被训练的网络被输入新的数据时,它就能偶判断出哪些是正常的活动,哪些是被期待的,哪些是异常的。
训练一个神经网络来识别预期行为是有好处的,因为异常数据不多,或者是不能够准确的将异常行为进行分类。我们在正常的数据里进行训练,它就能够在未来的某个时间点提醒我们非正常活动的出现。
说句题外话,训练的神经网络并不一定非得识别到特定事情发生的特定时间点(例如,它不知道那个特殊的日子就是周日),但是它一定会发现一些值得我们注意的一些更明显的时间模式和一些可能并不明显的事件之间的联系。
我们将概述一下怎么用 Deeplearning4j(一个在JVM上被广泛应用的深度学习开源数据库)来解决这个问题。Deeplearning4j在模型开发过程中提供了很多有用的工具:DataVec是一款为ETL(提取-转化-加载)任务准备模型训练数据的集成工具。正如Sqoop为Hadoop加载数据,DataVec将数据进行清洗、预处理、规范化与标准化之后将数据加载到神经网络。这跟Trifacta’s Wrangler也相似,只不过它更关注二进制数据。
开始阶段
第一阶段包括典型的大数据任务和ETL:我们需要收集、移动、储存、准备、规范化、矢量话日志。时间跨度的长短是必须被规定好的。数据的转化需要花费一些功夫,这是由于JSON日志、文本日志、还有一些非连续标注模式都必须被识别并且转化为数值数组。DataVec能够帮助进行转化和规范化数据。在开发机器学习训练模型时,数据需要分为训练集和测试集。
训练神经网络
神经网络的初始训练需要在训练数据集中进行。
在第一次训练的时候,你需要调整一些超参数以使模型能够实现在数据中学习。这个过程需要控制在合理的时间内。关于超参数我们将在之后进行讨论。在模型训练的过程中,你应该以降低错误为目标。
但是这可能会出现神经网络模型过度拟合的风险。有过度拟合现象出现的模型往往会在训练集中的很高的分数,但是在遇到新的数据时就会得出错误结论。用机器学习的语言来说就是它不够通用化。Deeplearning4J提供正则化的工具和“过早停止”来避免训练过程中的过度拟合。
神经网络的训练是最花费时间和耗费硬件的一步。在GPUs上训练能够有效的减少训练时间,尤其是做图像识别的时候。但是额外的硬件设施就带来多余的花销,所以你的深度学习的框架必须能够有效的利用硬件设施。Azure和亚马逊等云服务提供了基于GPU的实例,神经网络还可以在异构集群上进行训练。
创建模型
Deeplearning4J提供ModelSerializer来保存训练模型。训练模型可以被保存或者是在之后的训练中被使用或更新。
在执行异常检测的过程中,日志文件的格式需要与训练模型一致,基于神经网络的输出结果,你将会得到是否当前的活动符合正常网络行为预期的结论。
代码示例
递归神经网络的结构应该是这样子的:
MultiLayerConfiguration conf = new NeuralNetConfiguration.Builder(
.seed(123)
.optimizationAlgo(OptimizationAlgorithm.STOCHASTIC_GRADIENT_DESCENT).iterations(1)
.weightInit(WeightInit.XAVIER)
.updater(Updater.NESTEROVS).momentum(0.9)
.learningRate(0.005)
.gradientNormalization(GradientNormalization.ClipElementWiseAbsoluteValue)
.(0.5)
.list()
.layer(0, new GravesLSTM.Builder().activation("tanh").nIn(1).nOut(10).build())
.layer(1, new RnnOutputLayer.Builder(LossFunctions.LossFunction.MCXENT)
.activation("softmax").nIn(10).nOut(numLabelClasses).build())
.pretrain(false).backprop(true).build();
MultiLayerNetwork net = new MultiLayerNetwork(conf);
net.init();
下面解释一下几行重要的代码:
.seed(123)
随机设置一个种子值对神经网络的权值进行初始化,以此获得一个有复验性的结果。系数通常都是被随机的初始化的,以使我们在调整其他超参数时仍获得一致的结果。我们需要设定一个种子值,让我们在调整和测试的时候能够用这个随机的权值。
.optimizationAlgo(OptimizationAlgorithm.STOCHASTIC_GRADIENT_DESCENT).iterations(1)
决定使用哪个最优算法(在这个例子中是随机梯度下降法)来调整权值以提高误差分数。你可能不需要对这个进行修改。
.learningRate(0.005)
当我们使用随机梯度下降法的时候,误差梯度就被计算出来了。在我们试图将误差值减到最小的过程中,权值也随之变化。SGD给我们一个让误差更小的方向,这个学习效率就决定了我们该在这个方向上迈多大的梯度。如果学习效率太高,你可能是超过了误差最小值;如果太低,你的训练可能将会永远进行。这是一个你需要调整的超参数。

阅读全文

与深度神经网络异常检测相关的资料

热点内容
网络安全言论自由 浏览:243
华为设置app网络访问 浏览:909
无线网络证书设置 浏览:159
登录至wifi网络失败 浏览:477
网络病毒是干什么用的 浏览:92
网络软件有监管部门吗 浏览:543
数字媒体网络技术软件设计 浏览:957
中石化非油pos机怎么连接网络 浏览:750
苹果手表更新后微信没有网络 浏览:221
网络免费通话软件 浏览:830
苹果手机老是显示一格网络 浏览:330
怎样让软件晚上不能用网络 浏览:333
网络电视怎么更新新内容 浏览:157
wifi已连接网络拒绝连接 浏览:473
路由器要显示什么才有网络 浏览:313
网络公开无线怎么设置 浏览:67
小米智能锁如何设置网络 浏览:960
苹果手机如何免费连接wifi网络 浏览:515
网络老是掉网要不要换路由器 浏览:766
网络安全管理规划 浏览:799

友情链接