A. 什么是BP神经网络
BP算法的基本思想是:学习过程由信号正向传播与误差的反向回传两个部分组成;正向传播时,输入样本从输入层传入,经各隐层依次逐层处理,传向输出层,若输出层输出与期望不符,则将误差作为调整信号逐层反向回传,对神经元之间的连接权矩阵做出处理,使误差减小。经反复学习,最终使误差减小到可接受的范围。具体步骤如下:
1、从训练集中取出某一样本,把信息输入网络中。
2、通过各节点间的连接情况正向逐层处理后,得到神经网络的实际输出。
3、计算网络实际输出与期望输出的误差。
4、将误差逐层反向回传至之前各层,并按一定原则将误差信号加载到连接权值上,使整个神经网络的连接权值向误差减小的方向转化。
5、対训练集中每一个输入—输出样本对重复以上步骤,直到整个训练样本集的误差减小到符合要求为止。
B. 写一篇3千字左右的异常入侵检测方法的小论文
2: 入侵检测系统(IDS)概念
1980年,James P.Anderson 第一次系统阐述了入侵检测的概念,并将入侵行为分为外部渗透、内部渗透和不法行为三种,还提出了利用审计数据监视入侵活动的思想[1]。即其之后,1986年Dorothy E.Denning提出实时异常检测的概念[2]并建立了第一个实时入侵检测模型,命名为入侵检测专家系统(IDES),1990年,L.T.Heberlein等设计出监视网络数据流的入侵检测系统,NSM(Network Security Monitor)。自此之后,入侵检测系统才真正发展起来。
Anderson将入侵尝试或威胁定义为:潜在的、有预谋的、未经授权的访问信息、操作信息、致使系统不可靠或无法使用的企图。而入侵检测的定义为[4]:发现非授权使用计算机的个体(如“黑客”)或计算机系统的合法用户滥用其访问系统的权利以及企图实施上述行为的个体。执行入侵检测任务的程序即是入侵检测系统。入侵检测系统也可以定义为:检测企图破坏计算机资源的完整性,真实性和可用性的行为的软件。
入侵检测系统执行的主要任务包括[3]:监视、分析用户及系统活动;审计系统构造和弱点;识别、反映已知进攻的活动模式,向相关人士报警;统计分析异常行为模式;评估重要系统和数据文件的完整性;审计、跟踪管理操作系统,识别用户违反安全策略的行为。入侵检测一般分为三个步骤:信息收集、数据分析、响应。
入侵检测的目的:(1)识别入侵者;(2)识别入侵行为;(3)检测和监视以实施的入侵行为;(4)为对抗入侵提供信息,阻止入侵的发生和事态的扩大;
3: 入侵检测系统模型
美国斯坦福国际研究所(SRI)的D.E.Denning于1986年首次提出一种入侵检测模型[2],该模型的检测方法就是建立用户正常行为的描述模型,并以此同当前用户活动的审计记录进行比较,如果有较大偏差,则表示有异常活动发生。这是一种基于统计的检测方法。随着技术的发展,后来人们又提出了基于规则的检测方法。结合这两种方法的优点,人们设计出很多入侵检测的模型。通用入侵检测构架(Common Intrusion Detection Framework简称CIDF)组织,试图将现有的入侵检测系统标准化,CIDF阐述了一个入侵检测系统的通用模型(一般称为CIDF模型)。它将一个入侵检测系统分为以下四个组件:
事件产生器(Event Generators)
事件分析器(Event analyzers)
响应单元(Response units)
事件数据库(Event databases)
它将需要分析的数据通称为事件,事件可以是基于网络的数据包也可以是基于主机的系统日志中的信息。事件产生器的目的是从整个计算机环境中获得事件,并向系统其它部分提供此事件。事件分析器分析得到的事件并产生分析结果。响应单元则是对分析结果做出反应的功能单元,它可以做出切断连接、修改文件属性等强烈反应。事件数据库是存放各种中间和最终数据的地方的通称,它可以是复杂的数据库也可以是简单的文本文件。
4: 入侵检测系统的分类
现有的IDS的分类,大都基于信息源和分析方法。为了体现对IDS从布局、采集、分析、响应等各个层次及系统性研究方面的问题,在这里采用五类标准:控制策略、同步技术、信息源、分析方法、响应方式。
按照控制策略分类
控制策略描述了IDS的各元素是如何控制的,以及IDS的输入和输出是如何管理的。按照控制策略IDS可以划分为,集中式IDS、部分分布式IDS和全部分布式IDS。在集中式IDS中,一个中央节点控制系统中所有的监视、检测和报告。在部分分布式IDS中,监控和探测是由本地的一个控制点控制,层次似的将报告发向一个或多个中心站。在全分布式IDS中,监控和探测是使用一种叫“代理”的方法,代理进行分析并做出响应决策。
按照同步技术分类
同步技术是指被监控的事件以及对这些事件的分析在同一时间进行。按照同步技术划分,IDS划分为间隔批任务处理型IDS和实时连续性IDS。在间隔批任务处理型IDS中,信息源是以文件的形式传给分析器,一次只处理特定时间段内产生的信息,并在入侵发生时将结果反馈给用户。很多早期的基于主机的IDS都采用这种方案。在实时连续型IDS中,事件一发生,信息源就传给分析引擎,并且立刻得到处理和反映。实时IDS是基于网络IDS首选的方案。
按照信息源分类
按照信息源分类是目前最通用的划分方法,它分为基于主机的IDS、基于网络的IDS和分布式IDS。基于主机的IDS通过分析来自单个的计算机系统的系统审计踪迹和系统日志来检测攻击。基于主机的IDS是在关键的网段或交换部位通过捕获并分析网络数据包来检测攻击。分布式IDS,能够同时分析来自主机系统日志和网络数据流,系统由多个部件组成,采用分布式结构。
按照分析方法分类
按照分析方法IDS划分为滥用检测型IDS和异常检测型IDS。滥用检测型的IDS中,首先建立一个对过去各种入侵方法和系统缺陷知识的数据库,当收集到的信息与库中的原型相符合时则报警。任何不符合特定条件的活动将会被认为合法,因此这样的系统虚警率很低。异常检测型IDS是建立在如下假设的基础之上的,即任何一种入侵行为都能由于其偏离正常或者所期望的系统和用户活动规律而被检测出来。所以它需要一个记录合法活动的数据库,由于库的有限性使得虚警率比较高。
按照响应方式分类
按照响应方式IDS划分为主动响应IDS和被动响应IDS。当特定的入侵被检测到时,主动IDS会采用以下三种响应:收集辅助信息;改变环境以堵住导致入侵发生的漏洞;对攻击者采取行动(这是一种不被推荐的做法,因为行为有点过激)。被动响应IDS则是将信息提供给系统用户,依靠管理员在这一信息的基础上采取进一步的行动。
5: IDS的评价标准
目前的入侵检测技术发展迅速,应用的技术也很广泛,如何来评价IDS的优缺点就显得非常重要。评价IDS的优劣主要有这样几个方面[5]:(1)准确性。准确性是指IDS不会标记环境中的一个合法行为为异常或入侵。(2)性能。IDS的性能是指处理审计事件的速度。对一个实时IDS来说,必须要求性能良好。(3)完整性。完整性是指IDS能检测出所有的攻击。(4)故障容错(fault tolerance)。当被保护系统遭到攻击和毁坏时,能迅速恢复系统原有的数据和功能。(5)自身抵抗攻击能力。这一点很重要,尤其是“拒绝服务”攻击。因为多数对目标系统的攻击都是采用首先用“拒绝服务”攻击摧毁IDS,再实施对系统的攻击。(6)及时性(Timeliness)。一个IDS必须尽快地执行和传送它的分析结果,以便在系统造成严重危害之前能及时做出反应,阻止攻击者破坏审计数据或IDS本身。
除了上述几个主要方面,还应该考虑以下几个方面:(1)IDS运行时,额外的计算机资源的开销;(2)误警报率/漏警报率的程度;(3)适应性和扩展性;(4)灵活性;(5)管理的开销;(6)是否便于使用和配置。
6: IDS的发展趋
随着入侵检测技术的发展,成型的产品已陆续应用到实践中。入侵检测系统的典型代表是ISS(国际互联网安全系统公司)公司的RealSecure。目前较为着名的商用入侵检测产品还有:NAI公司的CyberCop Monitor、Axent公司的NetProwler、CISCO公司的Netranger、CA公司的Sessionwall-3等。国内的该类产品较少,但发展很快,已有总参北方所、中科网威、启明星辰等公司推出产品。
人们在完善原有技术的基础上,又在研究新的检测方法,如数据融合技术,主动的自主代理方法,智能技术以及免疫学原理的应用等。其主要的发展方向可概括为:
(1)大规模分布式入侵检测。传统的入侵检测技术一般只局限于单一的主机或网络框架,显然不能适应大规模网络的监测,不同的入侵检测系统之间也不能协同工作。因此,必须发展大规模的分布式入侵检测技术。
(2)宽带高速网络的实时入侵检测技术。大量高速网络的不断涌现,各种宽带接入手段层出不穷,如何实现高速网络下的实时入侵检测成为一个现实的问题。
(3)入侵检测的数据融合技术。目前的IDS还存在着很多缺陷。首先,目前的技术还不能对付训练有素的黑客的复杂的攻击。其次,系统的虚警率太高。最后,系统对大量的数据处理,非但无助于解决问题,还降低了处理能力。数据融合技术是解决这一系列问题的好方法。
(4)与网络安全技术相结合。结合防火墙,病毒防护以及电子商务技术,提供完整的网络安全保障。
C. 人工神经网络概念梳理与实例演示
人工神经网络概念梳理与实例演示
神经网络是一种模仿生物神经元的机器学习模型,数据从输入层进入并流经激活阈值的多个节点。
递归性神经网络一种能够对之前输入数据进行内部存储记忆的神经网络,所以他们能够学习到数据流中的时间依赖结构。
如今机器学习已经被应用到很多的产品中去了,例如,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给我们一个让误差更小的方向,这个学习效率就决定了我们该在这个方向上迈多大的梯度。如果学习效率太高,你可能是超过了误差最小值;如果太低,你的训练可能将会永远进行。这是一个你需要调整的超参数。
D. 求一个“基于小波神经网络的模拟电路故障诊断仿真程序”
智能网络管理系统分析与系统设计
4.1需求分析
随着网络技术的不断发展,5G时代的来临,网络设备数量的迅增导致网络管理难度的增大,系统管理人员的工作压力繁重,特别是目前大量的基于Web环境的各个业务系统对企业的网络提出了更高的要求,除了要保证网络的安全性、稳定性、保密性、可靠性外,还要确保网络速度、服务质量、使用方便等各个因素。网络管理系统面临网络设备运行环境是否安全、设备运行是否平稳、设备故障能否快速发现并解决等问题。本文采用B/S架构可以更大程度上跨平台使用此系统,结合web技术和人工智能技术根据实际情况实现具有故障诊断的智能网络管理系统,在一定程度上实现传统网络管理系统的自动化。图4.1为系统模块用例图:
4.1.1功能需求
(1)从用例图中可以看到,本系统分为两种角色,超级管理员和普通用户。超级管理员拥有最高权限,可以对普通用户进行添加、修改、删除操作,用户管理本质就是通过赋予用户角色对系统操作权限不同,使得用户角色分工不同更加网络管理工作更加细致和明确。同时,超级管理员可以升级普通用户为超级管理员也可以根据人员不同赋予不同的权限。(2)用户可以在系统中添加和删除网络设备,在实际企业当中网络设备资源数量众多,针对设备资源进行有针对性行的管理可以满足企业日益增加的设备需求。用户可以通过在系统中填写设备详情添加相应网络设备;选取相应设备填写对应标签、地址、流量类型可以掌握设备端口流量流入流出情况和连接状态以及查看设备信息;选取某设备端口,输入修改后的ip地址、子网掩码、登录密码、特权密码等可以通过telnet协议对设备端口进行配置;如果某设备已经损坏或者不再需要时,可以点击删除按钮对设备进行删除;可以查看个人详细信息对个人信息进行修改。(3)网络故障是是网络管理系统中的重要模块,网络可以平稳运行是评价网络管理系统的重要指标。网络虚拟环境下,复杂的资源关系以及各资源之间的互相干扰,一旦某个接口发生故障,故障数据隐藏在底层网络可能会蔓延到整个网络,导致整个网络无法运行,这样无疑给网络恢复带来了更大困难,增加了企业成本。本系统故障模块针对以太网中的接口故障,在现有智能故障诊断技术中,BP神经网络具有良好的非线性能力和自学习和自适应能力,因此,本系统故障模块引入BP神经网络,采集接口故障数据经过BP神经网络训练可以实现对目标接口进行故障诊断,并判断故障类型。同时用户可以查看历史告警记录表对故障信息进行统计。
4.1.2非功能性需求
系统应具有实用性,能够满足实际业务需求,各个功能模块业务可以高效正确的运转。要求设计简单、架构和层次设计清晰,便于维护和扩展具有一定的可靠性和易用性。系统安全是网络管理系统的必要条件之一,防止sql注入等安全问题出现,对前后端数据传输进行验证防止前端传输不安全数据到后台服务器当中。在监控模块中系统可以对设备数据进行实时监控并展示,应具有实时性。
4.2系统总体架构设计
本文研究利用Django、Vue等开发技术,并结合人工智能网络故障智能诊断技术设计并实现了智能网络网络管理系统。系统总体架构分为视图层、应用服务层和设备层三层。系统的设计总体架构如图所示:
1)视图层使用前端相关技术如Vue, ECharts开发系统界面包括界面的布局与美化、用户交互设计等。
2)应用服务器层包括Web服务器和NMS两部分。Web服务器可以处理浏览器的请求并返回相应。在此系统中接收前端传来的数据请求,经过后台程序解析处理完成对应操作。NMS是网络管理工程当中的核心,通过代理向设备发送指令,管理被管设备,可以通过oid查询MIB库保存对应项获取目标设备网络数据。
3)在网络设备层,被管设备代理是网络上被管设备代理的集合,主要工作是采集数据和分析数据。系统首先服务层通过Telnet协议连接网络设备,通过SNMP协议实现对网络设备运行状态的监控,将采集到的数据进行计算处理之后存储到Mysql数据库中。
4)Mysql数据库是系统开发功能模块的基础,用于存储用户数据、网络运行数据以及故障数据等。用户通过对数据库进行新增、查询、更新、删除操作对系统数据进行管理。
4.3系统主要功能模块设计
本系统分为用户管理、配置管理、设备监控管理、故障诊断四个功能模块,下面将对这四个模块的设计进行详细说明。
4.3.1系统功能模块
1)用户管理:系统管理员使用该模块可以完成查看、添加、修改和删除系统全体用户账号的管理操作以及用户登录功能,该模块的设计类似于RBAC(基于角色的访问控制),不同的管理员拥有不同的系统操作权限。
2)配置管理:通过web界面对设备进行相关配置即命令下发,管理员可以通过该模块远程连接目标设备并且对设备端口进行ip和子网掩码修改以及置。
3)设备监控管理:对通讯设备接口进行实时流量监控,返回数据便于管理员及时查看设备运行状态查看资源并且统计流量数据。
4)故障诊断:及时发现通讯网络接口中发生的故障,并判断故障类型便于管理员及时处理故障,以免造成更大损失。
4.3.2用户管理模块设计
用户管理模块是管理系统中较基础同时也是非常重要的一个模块,主要负责对该系统用户进行统一有效管控,用户管理模块活动图如图4.4所示:
1)用户登录:系统部署在服务器之后,Django框架可以使用命令创建一个超级管理员。超级管理员和普通用户可以通过用户名和密码登录到该系统当中。
2)用户添加:超级管理员拥有该系统的最高权限,可以添加普通用户无需注册,添加信息主要包括,用户名、密码、头像、邮箱等信息,普通用户可以根据超级管理员分配的权限参与管理系统。
3)用户删除:超级管理员界面可以删除当前普通用户角色,删除之后原普通用户用户名好密码作废。
4)用户信息修改:超级管理员和普通用户都可以对自己信息进行修改包括密码、个人资料,超级管理员可以赋予普通用户权限等。
4.3.3配置管理模块设计
网络设备配置模块主要用于对设备参数进行设置和修改和对设备进行添加和删除,从而对设备进行管理。该系统主要针对设备端口ip地址和子网掩码进行修改,配置管理结构示意图如下:
1)设备参数配置:首先在被管设备开启端口并配置Telnet协议,同时设置登录名和登录密码以及特权密码,用户在浏览器通过表单填写相关目标设备信息,通过HTTP协议传输给服务器,服务将前端传过来的信息解析成设备可以识别的指令,代替管理员在终端直接对设备的操作,自动下发对应指令到设备上完成配置。
2)设备添加:用户可以添加某个设备,并给予相应标识,网络设备列表当中就会出现当前所有设备,设备信息也会存储在数据库当中。
3)设备删除:当某一项设备不再使用管理员可以在浏览器的设备列表当中将其删除。
4.3.4设备监控模块
设备监控模块主要监控设备运行状态以及资源消耗情况,存储到Mysql数据库当中,通过前端组件以图表的格式将其可视化,可以让管理员更加直观的观测到网络设备的运行状态。设备监控模块结构示意图如下:展示设备是否在线,以及展示当前运行设备列表,通过SNMP协议可以判断目标设备是否在线,如果在线前端提示目标设备当前正在运行,否在提示当前设备不在运行或者未正确安装SNMP协议,因为监控模块主要通过SNMP协议访问设备获取MIB变量得到目标值并测试其连通性。
1)实时展示目标设备端口流量流入和流出情况,管理员在前端添加监控目标,通过SNMP协议和目标设备通信,如果当前设备在线也就是服务器可以通过SNMP和目标设备通信,服务器查询目标设备的MIB对象,找到请求的数据,将返回的网络数据存入数据库,前端利用Echarts进行绘图,为了更加直观,流量图采用曲线图的方式展示时间段内某端口流入或者流出网络总流量,单位按照每秒总传输量来计算。此外,管理员可以切换目标设备查看。
4.3.5故障诊断模块
故障诊断模块就是协助管理员及时发现并处理网络设备突发的故障,本模块引入了BP神经网络故障诊断技术,目的是高效快速的判断网络设备接口故障类型。基于BP神经网络的网络故障诊断流程示意图如图4.6所示:
故障发现及时与否对网络设备能否持续提供服务至关重要。通过SNMP协议主动轮询和异步警告可以获取到设备发生的故障信息,服务器获取到网络状态故障信息后,经过分析,如果可以直接判断故障类型,则直接发送到前端界面,这类故障类型一般具有较明显的特征。如果某接口发生故障不可以直接判断其故障类型则通过基于BP神经网络的故障诊断模型进行判断,将获取到的接口相关数据自动进行预处理后作为故障诊断模型的输入数据,故障诊断模型会输出相应结果对应相应故障可视化到前端提示管理员,管理员可以通过前端查看故障信息进行修复。4.4数据库设计
4.4.1系统E-R图
系统数据库包含多个实体,实体之间具体包含一对多和对多对的关系。系统E-R图如图4.8所示:
4.4.2数据库表结构设计
根据需求分析的结果数据库表设计如下:
(1)用户表用于记录用户相关信息,其中用户ID(userId)作为用户表的主键自增。
(1)设备监控表,存储监控的目标设备信息。
4.5 本章小结
本章节主要内容:首先对基于用例图进行系统需求分析,对系统整体总结构进行了设计,其次根据需求设计了系统整体功能模块图,接着针对各个功能模块结合活动图进行详述,最后对整个系统的数据库表设计进行了简要概述。
E. 入侵检测技术基础的异常检测技术
●概率统计异常检测
原理:每一个轮廓保存记录主体当前行为,并定时将当前轮廓与历史轮廓合并形成统计轮廓(更新),通过比较当前轮廓与统计轮廓来判定异常行为。
优点:可应用成熟的概率统计理论
缺点:①由于用户行为的复杂性,要想准确地匹配一个用户的历史行为非常困难,容易造成系统误报和漏报;
②定义入侵阈值比较困难,阈值高则误报率提高,阈值低则漏报率增高。
●神经网络异常检测
原理:对下一事件的预测错误率在一定程度上反映了用户行为的异常程度。
优点:①更好地表达了变量间的非线性关系,能更好地处理原始数据的随机特征,即不需要对这些数据做任何统计假设,并且能自动学习和更新;②有较好的抗干扰能力
缺点:网络拓扑结构以及各元素的权重很难确定
F. 神经网络异常检测方法和机器学习异常检测方法对于入侵检测的应用
神经网络异常检测方法神经网络入侵检测方法是通过训练神经网络连续的信息单元来进行异常检测,信息单元指的是命令。网络的输入为用户当前输入的命令和已执行过的W个命令;用户执行过的命令被神经网络用来预测用户输入的下一个命令,如下图。若神经网络被训练成预测用户输入命令的序列集合,则神经网络就构成用户的轮郭框架。当用这个神经网络预测不出某用户正确的后继命令,即在某种程度上表明了用户行为与其轮廓框架的偏离,这时表明有异常事件发生,以此就能作异常入侵检测。
上面式子用来分类识别,检测异常序列。实验结果表明这种方法检测迅速,而且误警率底。然而,此方法对于用户动态行为变化以及单独异常检测还有待改善。复杂的相似度量和先验知识加入到检测中可能会提高系统的准确性,但需要做进一步工作。
G. 用机器学习检测异常点击流
用机器学习检测异常点击流
本文内容是我学习ML时做的一个练手项目,描述应用机器学习的一般步骤。该项目的目标是从点击流数据中找出恶意用户的请求。点击流数据长下图这样子,包括请求时间、IP、平台等特征:
该项目从开始做到阶段性完成,大致可分为两个阶段:算法选择和工程优化。算法选择阶段挑选合适的ML模型,尝试了神经网络、高斯分布、Isolation Forest等三个模型。由于点击流数据本身的特性,导致神经网络和高斯分布并不适用于该场景,最终选择了Isolation Forest。工程优化阶段,最初使用单机训练模型和预测结果,但随着数据量的增加,最初的单机系统出现了性能瓶颈;然后开始优化性能,尝试了分布化训练,最终通过单机异步化达到了性能要求。
1 算法选择
1.1 神经网络
刚开始没经验,受TensorFlow热潮影响,先尝试了神经网络。选用的神经网络是MLP(Multilayer Perceptron,多层感知器),一种全连接的多层网络。MLP是有监督学习,需要带标签的样本,这里“带标签”的意思是样本数据标注了哪些用户请求是恶意的、哪些是正常的。但后台并没有现成带标签的恶意用户样本数据。后来通过安全侧的一些数据“间接”给用户请求打上了标签,然后选择IP、平台、版本号、操作码等数据作为MLP的输入数据。结果当然是失败,想了下原因有两个:
1, 样本的标签质量非常差,用这些样本训练出来的模型性能当然也很差;
2, 输入的特征不足以刻画恶意用户。
数据的质量问题目前很难解决,所以只能弃用MLP。
1.2 高斯分布
然后尝试其他模型。通过搜索发现,有一类ML模型专门用于异常检测,找到了Andrew Ng介绍的基于高斯分布的异常检测算法:高斯分布如下图所示:
这个算法的思想比较简单:与大部分样本不一致的样本就是异常;通过概率密度量化“不一致”。具体做法是:选择符合高斯分布或能转换为高斯分布的特征,利用收集到的数据对高斯分布做参数估计,把概率密度函数值小于某个阈值的点判定为异常。
所谓的参数估计是指,给定分布数据,求分布的参数。对高斯分布来说,就是求μ和σ。用极大似然估计可以得到高斯分布参数的解析解:
得到高斯分布参数后,用下式计算概率密度:
X表示一个特征输入。若有多个特征x0、x1、…、xn,一种简单的处理方法是将其结果连乘起来即可:f(x) = f(x0)f(x1)…f(xn)。
然后选定一个阈值ε,把f(x) < ε的样本判定为异常。ε值需根据实际情况动态调整,默认可设定ε = f(μ- 3σ)。
把这个模型初步应用于点击流异常检测时,效果还不错,但在进一步实施过程中碰到一个棘手问题:样本中最重要的一个特征是操作码,当前操作码在微信后台的取值范围是[101,1000],每个操作码的请求次数是模型的基础输入,对900个特征计算概率密度再相乘,非常容易导致结果下溢出,以致无法计算出精度合适的概率密度值。这个现象被称为维度灾难(Dimension Disaster)。
解决维度灾难的一个常见做法是降维,降维的手段有多种,这里不展开讨论了。在点击流分析的实践中,降维的效果并不好,主要原因有两个:
1, 正常用户和恶意用户的访问模式并不固定,导致很难分解出有效的特征矩阵或特征向量;
2, 降维的本质是有损压缩,有损压缩必定导致信息丢失。但在本例中每一维的信息都是关键信息,有损压缩会极大破坏样本的有效性。
高斯分布模型的维度灾难在本例中较难解决,只能再尝试其他模型了
1.3 Isolation Forest
Isolation Forest,可翻译为孤异森林,该算法的基本思想是:随机选择样本的一个特征,再随机选择该特征取值范围中的一个值,对样本集做拆分,迭代该过程,生成一颗Isolation Tree;树上叶子节点离根节点越近,其异常值越高。迭代生成多颗Isolation Tree,生成Isolation Forest,预测时,融合多颗树的结果形成最终预测结果。Isolation Forest的基础结构有点类似经典的随机森林(Random Forest)。
这个异常检测模型有效利用了异常样本“量少”和“与正常样本表现不一样”的两个特点,不依赖概率密度因此不会导致高维输入的下溢出问题。提取少量点击流样本测试,它在900维输入的情况下也表现良好,最终选择它作为系统的模型。
2 工程优化
工程实现经历了单机训练、分布式训练、单机异步化训练3个方案,下面内容介绍实现过程中碰到的问题和解决方法。
2.1 单机训练
整个系统主要包括收集数据、训练模型、预测异常、上报结果四个部分。
2.1.1 收集数据
刚开始尝试该模型时,是通过手工方式从mmstreamstorage获取样本的:
1,通过logid 11357,得到手工登录成功用户的uin和登录时间;
2,利用mmstreamstorage提供的接口,得到用户登录后10分钟的点击流;
但这样做有两个缺点:
1,上述步骤1是离线手工操作的,需要做成自动化;
2,mmstreamstorage的接口性能较差,只能提供2万/min的查询性能,上海IDC登录的峰值有9万/min。
改进办法是复用点击流上报模块mmstreamstorage,增加一个旁路数据的逻辑:
1,手工登录时在presence中记录手工登录时间,mmstreamstorage基于该时间旁路一份数据给mmguardstore。由于mmstreamstorage每次只能提供单挑点击流数据,所以需要在mmguardstore中缓存;
2,mmguardstore做完数据清洗和特征提取,然后把样本数据落地,最后利用crontab定期将该数据同步到Hadoop集群中。
最终的数据收集模块结构图如下所示:
点击流数据提供了IP、平台、版本号、操作码等特征,经过多次试验,选定用户手工登录后一段时间内操作码的访问次数作为模型的输入。
上面我们提到过点击流的操作码有900个有效取值,所以一个显然的处理方法是,在mmguardstore中把用户的点击流数据转化为一个900维的向量,key是cgi id,value是对应cgi的访问次数。该向量刻画了用户的行为,可称为行为特征向量。
2.1.2 训练模型
初起为了控制不确定性,只输入1万/分钟的样本给模型训练和预测。系统的工作流程是先从Hadoop加载上一分钟的样本数据,然后用数据训练Isolation Forest模型,最后用训练好的模型做异常检测,并将检测结果同步到tdw。
在1万/分钟输入下取得较好的检测结果后,开始导入全量数据,全量数据数据的峰值为20万/分钟左右。出现的第一个问题是,一分钟内无法完成加载数据、训练模型、预测结果,单加载数据就耗时10分钟左右。这里先解释下为什么有“一分钟”的时间周期限制,主要原因有两个:
1, 想尽快获取检测结果;
2, 由于点击流异常检测场景的特殊性,模型性能有时效性,需要经常用最新数据训练新的模型。
解决性能问题的第一步是要知道性能瓶颈在哪里,抽样发现主要是加载数据和训练模型耗时较多,预测异常和上报结果的耗时并没有随数据量的增加而快速上涨。
加载数据的耗时主要消耗在网络通信上:样本文件太大了,导致系统从Hadoop同步样本数据时碰到网络带宽瓶颈。但由于样本是文本类数据,对数据先压缩再传输可极大减少通信量,这里的耗时比较容易优化。
训练模型的耗时增加源于输入数据量的增加。下图是1万样本/min的输入下,系统个阶段的耗时:
其中:
加载程序: 2s
加载数据: 6s
训练模型:11s
分类异常: 2s
保存结果: 4s
单轮总耗时:25s
需处理全量数据时,按线性关系换算,“训练模型”耗时为:11s * 24 = 264s,约为4.4分钟,单机下无法在1分钟内完成计算。
最先想到的优化训练模型耗时的办法是分布式训练。
2.2 分布式训练
由于scikit-learn只提供单机版的Isolation Forest实现,所以只能自己实现它的分布式版本。了解了下目前最常用的分布式训练方法是参数服务器(Parameter Server,PS)模式,其想法比较简单:训练模型并行跑在多机上,训练结果在PS合并。示意图如下所示:
分布式训练对算法有一定要求,而Isolation Forest正好适用于分布式训练。
然后尝试在TensorFlow上实现Isolation Forest的分布式训练版本。选择TensorFlow的原因有主要两个:
1, TensorFlow已经实现了一个分布式训练框架;
2, TensorFlow的tf.contrib.learn包已经实现的Random Forest可作参考(Isolation Forest在结构上与Random Forest类似),只需对Isolation Forest定制一个Operation即可。
写完代码测试时,发现了个巨坑的问题:TenforFlow内部的序列化操作非常频繁、性能十分差。构造了110个测试样本,scikit-learn耗时只有0.340秒,29万次函数调用;而TensorFlow耗时达207.831秒,有2.48亿次函数调用。
TensorFlow性能抽样:
Scikit-learn性能抽样:
从TensorFlow的性能抽样数据可以看到,耗时排前排的函数都不是实现Isolation Forest算法的函数,其原因应该与TensorFlow基于Graph、Session的实现方式有关。感觉这里坑比较深,遂放弃填坑。
也了解了下基于Spark的spark-sklearn,该项目暂时还未支持Isolation Forest,也因为坑太深,一时半会搞不定而放弃了。
2.3 单机异步化训练
没搞定分布式训练,只能回到单机场景再想办法。单机优化有两个着力点:优化算法实现和优化系统结构。
首先看了下scikit-learn中Isoaltion Forest的实现,底层专门用Cython优化了,再加上Joblib库的多CPU并行,算法实现上的优化空间已经很小了,只能从系统结构上想办法。
系统结构上的优化有两个利器:并行化和异步化。之前的单机模型,加载数据、训练模型、预测异常、上报结果在单进程中串行执行,由此想到的办法是启动4个工作进程分别处理相应的四个任务:异步训练模型、预测异常和上报结果,并行加载数据。工作进程之间用队列通信,队列的一个优势是容易实现流量控制。
写完代码测试,却发现YARD环境中的Python HDFS库在多进程并发下直接抛异常。尝试多个方法发现这个问题较难解决,暂时只能想办法规避。经测试发现,直接从Hadoop同步所有压缩过的样本数据只需2秒左右,由此想到规避方法是:先单进程同步所有样本数据,再多进程并发解压、加载和预测。
按上述想法修改代码测试,效果较好,处理所有样本只需20秒左右,达到了1分钟处理完所有样本的要求。然后提交YARD作业线上跑,处理所有样本耗时却达到200~400秒:
咨询YARD侧同学,得知YARD对提交的离线作业有CPU配额的硬限制,分时段配额如下表:
00:00~09:00 80%
09:00~19:00 50%
19:00~23:00 15%
23:00~24:00 50%
晚高峰时段的配额只有15%。
与YARD侧同学沟通,他们答应后续会支持scikit-learn库的在线服务。目前通过手工方式在一台有scikit-learn的mmguardstore机器上运行在线服务,晚高峰时段处理全量数据耗时为20秒左右。
最终的系统结构图如下图所示:
模型训练进程定期训练最新的模型,并把模型通过队列传给预测进程。预测进程每分钟运行一次,检查模型队列上是否有新模型可使用,然后加载数据、检测异常,将检测结果通过上报队列传给上报进程。上报进程block在上报队列上,一旦发现有新数据,就根据数据类型执行上报监控、上报tdw等操作。
2.4 评估性能
安全侧将异常用户分为以下几类:盗号、LBS/加好友、养号、欺诈、外挂/多开等。由于这些分类的异常打击是由不同同学负责,不便于对Isolation Forest的分类结果做评估,因此需要在Isolation Forest的基础上,再加一个分类器,标记“异常样本”的小类。利用操作码实现了该分类器。
接入全量数据后,每天准实时分析1亿量级的样本,检测出500万左右的异常,精确分类出15万左右的恶意请求。恶意请求的uin、类型、发生时间通过tdw中转给安全侧。安全侧通过线下人工分析和线上打击,从结果看检测效果较好。
2.5 持续优化
再回过头观察点击流数据,我们使用的Isolation Forest模型只利用了操作码的统计数据。可以明显看到,点击流是一个具备时间序列信息的时序数据。而自然语言处理(Natural LanguageProcessing,NLP)领域已经积累了非常多的处理时序数据的理论和实战经验,如LSTM、word2vec等模型。后续期望能引入NLP的相关工具挖掘出更多恶意用户。
H. 基于神经网络的故障诊断
神经网络的是我的毕业论文的一部分
4.人工神经网络
人的思维有逻辑性和直观性两种不同的基本方式。逻辑性的思维是指根据逻辑规则进行推理的过程;它先将信息化成概念,并用符号表示,然后,根据符号运算按串行模式进行逻辑推理。这一过程可以写成串行的指令,让计算机执行。然而,直观性的思维是将分布式存储的信息综合起来,结果是忽然间产生想法或解决问题的办法。这种思维方式的根本之点在于以下两点:1.信息是通过神经元上的兴奋模式分布在网络上;2.信息处理是通过神经元之间同时相互作用的动态过程来完成的。
人工神经网络就是模拟人思维的第二种方式。这是一个非线性动力学系统,其特色在于信息的分布式存储和并行协同处理。虽然单个神经元的结构极其简单,功能有限,但大量神经元构成的网络系统所能实现的行为却是极其丰富多彩的。
4.1人工神经网络学习的原理
人工神经网络首先要以一定的学习准则进行学习,然后才能工作。现以人工神经网络对手写“A”、“B”两个字母的识别为例进行说明,规定当“A”输入网络时,应该输出“1”,而当输入为“B”时,输出为“0”。
所以网络学习的准则应该是:如果网络做出错误的判决,则通过网络的学习,应使得网络减少下次犯同样错误的可能性。首先,给网络的各连接权值赋予(0,1)区间内的随机值,将“A”所对应的图像模式输入给网络,网络将输入模式加权求和、与门限比较、再进行非线性运算,得到网络的输出。在此情况下,网络输出为“1”和“0”的概率各为50%,也就是说是完全随机的。这时如果输出为“1”(结果正确),则使连接权值增大,以便使网络再次遇到“A”模式输入时,仍然能做出正确的判断。
如果输出为“0”(即结果错误),则把网络连接权值朝着减小综合输入加权值的方向调整,其目的在于使网络下次再遇到“A”模式输入时,减小犯同样错误的可能性。如此操作调整,当给网络轮番输入若干个手写字母“A”、“B”后,经过网络按以上学习方法进行若干次学习后,网络判断的正确率将大大提高。这说明网络对这两个模式的学习已经获得了成功,它已将这两个模式分布地记忆在网络的各个连接权值上。当网络再次遇到其中任何一个模式时,能够做出迅速、准确的判断和识别。一般说来,网络中所含的神经元个数越多,则它能记忆、识别的模式也就越多。
4.2人工神经网络的优缺点
人工神经网络由于模拟了大脑神经元的组织方式而具有了人脑功能的一些基本特征,为人工智能的研究开辟了新的途径,神经网络具有的优点在于:
(1)并行分布性处理
因为人工神经网络中的神经元排列并不是杂乱无章的,往往是分层或以一种有规律的序列排列,信号可以同时到达一批神经元的输入端,这种结构非常适合并行计算。同时如果将每一个神经元看作是一个小的处理单元,则整个系统可以是一个分布式计算系统,这样就避免了以往的“匹配冲突”,“组合爆炸”和“无穷递归”等题,推理速度快。
(2)可学习性
一个相对很小的人工神经网络可存储大量的专家知识,并且能根据学习算法,或者利用样本指导系统来模拟现实环境(称为有教师学习),或者对输入进行自适应学习(称为无教师学习),不断地自动学习,完善知识的存储。
(3)鲁棒性和容错性
由于采用大量的神经元及其相互连接,具有联想记忆与联想映射能力,可以增强专家系统的容错能力,人工神经网络中少量的神经元发生失效或错误,不会对系统整体功能带来严重的影响。而且克服了传统专家系统中存在的“知识窄台阶”问题。
(4)泛化能力
人工神经网络是一类大规模的非线形系统,这就提供了系统自组织和协同的潜力。它能充分逼近复杂的非线形关系。当输入发生较小变化,其输出能够与原输入产生的输出保持相当小的差距。
(5)具有统一的内部知识表示形式,任何知识规则都可以通过对范例的学习存储于同一个神经网络的各连接权值中,便于知识库的组织管理,通用性强。
虽然人工神经网络有很多优点,但基于其固有的内在机理,人工神经网络也不可避免的存在自己的弱点:
(1)最严重的问题是没能力来解释自己的推理过程和推理依据。
(2)神经网络不能向用户提出必要的询问,而且当数据不充分的时候,神经网络就无法进行工作。
(3)神经网络把一切问题的特征都变为数字,把一切推理都变为数值计算,其结果势必是丢失信息。
(4)神经网络的理论和学习算法还有待于进一步完善和提高。
4.3神经网络的发展趋势及在柴油机故障诊断中的可行性
神经网络为现代复杂大系统的状态监测和故障诊断提供了全新的理论方法和技术实现手段。神经网络专家系统是一类新的知识表达体系,与传统专家系统的高层逻辑模型不同,它是一种低层数值模型,信息处理是通过大量的简单处理元件(结点) 之间的相互作用而进行的。由于它的分布式信息保持方式,为专家系统知识的获取与表达以及推理提供了全新的方式。它将逻辑推理与数值运算相结合,利用神经网络的学习功能、联想记忆功能、分布式并行信息处理功能,解决诊断系统中的不确定性知识表示、获取和并行推理等问题。通过对经验样本的学习,将专家知识以权值和阈值的形式存储在网络中,并且利用网络的信息保持性来完成不精确诊断推理,较好地模拟了专家凭经验、直觉而不是复杂的计算的推理过程。
但是,该技术是一个多学科知识交叉应用的领域,是一个不十分成熟的学科。一方面,装备的故障相当复杂;另一方面,人工神经网络本身尚有诸多不足之处:
(1)受限于脑科学的已有研究成果。由于生理实验的困难性,目前对于人脑思维与记忆机制的认识还很肤浅。
(2)尚未建立起完整成熟的理论体系。目前已提出了众多的人工神经网络模型,归纳起来,这些模型一般都是一个由结点及其互连构成的有向拓扑网,结点间互连强度所构成的矩阵,可通过某种学习策略建立起来。但仅这一共性,不足以构成一个完整的体系。这些学习策略大多是各行其是而无法统一于一个完整的框架之中。
(3)带有浓厚的策略色彩。这是在没有统一的基础理论支持下,为解决某些应用,而诱发出的自然结果。
(4)与传统计算技术的接口不成熟。人工神经网络技术决不能全面替代传统计算技术,而只能在某些方面与之互补,从而需要进一步解决与传统计算技术的接口问题,才能获得自身的发展。
虽然人工神经网络目前存在诸多不足,但是神经网络和传统专家系统相结合的智能故障诊断技术仍将是以后研究与应用的热点。它最大限度地发挥两者的优势。神经网络擅长数值计算,适合进行浅层次的经验推理;专家系统的特点是符号推理,适合进行深层次的逻辑推理。智能系统以并行工作方式运行,既扩大了状态监测和故障诊断的范围,又可满足状态监测和故障诊断的实时性要求。既强调符号推理,又注重数值计算,因此能适应当前故障诊断系统的基本特征和发展趋势。随着人工神经网络的不断发展与完善,它将在智能故障诊断中得到广泛的应用。
根据神经网络上述的各类优缺点,目前有将神经网络与传统的专家系统结合起来的研究倾向,建造所谓的神经网络专家系统。理论分析与使用实践表明,神经网络专家系统较好地结合了两者的优点而得到更广泛的研究和应用。
离心式制冷压缩机的构造和工作原理与离心式鼓风机极为相似。但它的工作原理与活塞式压缩机有根本的区别,它不是利用汽缸容积减小的方式来提高汽体的压力,而是依靠动能的变化来提高汽体压力。离心式压缩机具有带叶片的工作轮,当工作轮转动时,叶片就带动汽体运动或者使汽体得到动能,然后使部分动能转化为压力能从而提高汽体的压力。这种压缩机由于它工作时不断地将制冷剂蒸汽吸入,又不断地沿半径方向被甩出去,所以称这种型式的压缩机为离心式压缩机。其中根据压缩机中安装的工作轮数量的多少,分为单级式和多级式。如果只有一个工作轮,就称为单级离心式压缩机,如果是由几个工作轮串联而组成,就称为多级离心式压缩机。在空调中,由于压力增高较少,所以一般都是采用单级,其它方面所用的离心式制冷压缩机大都是多级的。单级离心式制冷压缩机的构造主要由工作轮、扩压器和蜗壳等所组成。 压缩机工作时制冷剂蒸汽由吸汽口轴向进入吸汽室,并在吸汽室的导流作用引导由蒸发器(或中间冷却器)来的制冷剂蒸汽均匀地进入高速旋转的工作轮3(工作轮也称叶轮,它是离心式制冷压缩机的重要部件,因为只有通过工作轮才能将能量传给汽体)。汽体在叶片作用下,一边跟着工作轮作高速旋转,一边由于受离心力的作用,在叶片槽道中作扩压流动,从而使汽体的压力和速度都得到提高。由工作轮出来的汽体再进入截面积逐渐扩大的扩压器4(因为汽体从工作轮流出时具有较高的流速,扩压器便把动能部分地转化为压力能,从而提高汽体的压力)。汽体流过扩压器时速度减小,而压力则进一步提高。经扩压器后汽体汇集到蜗壳中,再经排气口引导至中间冷却器或冷凝器中。
二、离心式制冷压缩机的特点与特性
离心式制冷压缩机与活塞式制冷压缩机相比较,具有下列优点:
(1)单机制冷量大,在制冷量相同时它的体积小,占地面积少,重量较活塞式轻5~8倍。
(2)由于它没有汽阀活塞环等易损部件,又没有曲柄连杆机构,因而工作可靠、运转平稳、噪音小、操作简单、维护费用低。
(3)工作轮和机壳之间没有摩擦,无需润滑。故制冷剂蒸汽与润滑油不接触,从而提高了蒸发器和冷凝器的传热性能。
(4)能经济方便的调节制冷量且调节的范围较大。
(5)对制冷剂的适应性差,一台结构一定的离心式制冷压缩机只能适应一种制冷剂。
(6)由于适宜采用分子量比较大的制冷剂,故只适用于大制冷量,一般都在25~30万大卡/时以上。如制冷量太少,则要求流量小,流道窄,从而使流动阻力大,效率低。但近年来经过不断改进,用于空调的离心式制冷压缩机,单机制冷量可以小到10万大卡/时左右。
制冷与冷凝温度、蒸发温度的关系。
由物理学可知,回转体的动量矩的变化等于外力矩,则
T=m(C2UR2-C1UR1)
两边都乘以角速度ω,得
Tω=m(C2UωR2-C1UωR1)
也就是说主轴上的外加功率N为:
N=m(U2C2U-U1C1U)
上式两边同除以m则得叶轮给予单位质量制冷剂蒸汽的功即叶轮的理论能量头。 U2 C2
ω2 C2U R1 R2 ω1 C1 U1 C2r β 离心式制冷压缩机的特性是指理论能量头与流量之间变化关系,也可以表示成制冷
W=U2C2U-U1C1U≈U2C2U
(因为进口C1U≈0)
又C2U=U2-C2rctgβ C2r=Vυ1/(A2υ2)
故有
W= U22(1-
Vυ1
ctgβ)
A2υ2U2
式中:V—叶轮吸入蒸汽的容积流量(m3/s)
υ1υ2 ——分别为叶轮入口和出口处的蒸汽比容(m3/kg)
A2、U2—叶轮外缘出口面积(m2)与圆周速度(m/s)
β—叶片安装角
由上式可见,理论能量头W与压缩机结构、转速、冷凝温度、蒸发温度及叶轮吸入蒸汽容积流量有关。对于结构一定、转速一定的压缩机来说,U2、A2、β皆为常量,则理论能量头W仅与流量V、蒸发温度、冷凝温度有关。
按照离心式制冷压缩机的特性,宜采用分子量比较大的制冷剂,目前离心式制冷机所用的制冷剂有F—11、F—12、F—22、F—113和F—114等。我国目前在空调用离心式压缩机中应用得最广泛的是F—11和F—12,且通常是在蒸发温度不太低和大制冷量的情况下,选用离心式制冷压缩机。此外,在石油化学工业中离心式的制冷压缩机则采用丙烯、乙烯作为制冷剂,只有制冷量特别大的离心式压缩机才用氨作为制冷剂。
三、离心式制冷压缩机的调节
离心式制冷压缩机和其它制冷设备共同构成一个能量供给与消耗的统一系统。制冷机组在运行时,只有当通过压缩机的制冷剂的流量与通过设备的流量相等时,以及压缩机所产生的能量头与制冷设备的阻力相适应时,制冷系统的工况才能保持稳定。但是制冷机的负荷总是随外界条件与用户对冷量的使用情况而变化的,因此为了适应用户对冷负荷变化的需要和安全经济运行,就需要根据外界的变化对制冷机组进行调节,离心式制冷机组制冷量的调节有:1°改变压缩机的转速;2°采用可转动的进口导叶;3°改变冷凝器的进水量;4°进汽节流等几种方式,其中最常用的是转动进口导叶调节和进汽节流两种调节方法。所谓转动进口导叶调节,就是转动压缩机进口处的导流叶片以使进入到叶轮去的汽体产生旋绕,从而使工作轮加给汽体的动能发生变化来调节制冷量。所谓进汽节流调节,就是在压缩机前的进汽管道上安装一个调节阀,如要改变压缩机的工况时,就调节阀门的大小,通过节流使压缩机进口的压力降低,从而实现调节制冷量。离心式压缩机制冷量的调节最经济有效的方法就是改变进口导叶角度,以改变蒸汽进入叶轮的速度方向(C1U)和流量V。但流量V必须控制在稳定工作范围内,以免效率下降。
I. 异常检测有哪些主要的分析方法
1. 概率统计方法
在基于异常检测技术的IDS中应用最早也是最多的一种方法。
首先要对系统或用户的行为按照一定的时间间隔进行采样,样本的内容包括每个会话的登录、退出情况,CPU和内存的占用情况,硬盘等存储介质的使用情况等。
将每次采集到的样本进行计算,得出一系列的参数变量对这些行为进行描述,从而产生行为轮廓,将每次采样后得到的行为轮廓与已有轮廓进行合并,最终得到系统和用户的正常行为轮廓。IDS通过将当前采集到的行为轮廓与正常行为轮廓相比较,来检测是否存在网络入侵行为。
2. 预测模式生成法
假设条件是事件序列不是随机的而是遵循可辨别的模式。这种检测方法的特点是考虑了事件的序列及其相互联系,利用时间规则识别用户行为正常模式的特征。通过归纳学习产生这些规则集,并能动态地修改系统中的这些规则,使之具有较高的预测性、准确性。如果规则在大部分时间是正确的,并能够成功地运用预测所观察到的数据,那么规则就具有高可信度。
3. 神经网络方法
基本思想是用一系列信息单元(命令)训练神经单元,这样在给定一组输入后、就可能预测出输出。与统计理论相比,神经网络更好地表达了变量间的非线性关系,并且能自动学习并更新。实验表明UNIX系统管理员的行为几乎全是可以预测的,对于一般用户,不可预测的行为也只占了很少的一部分。