① 人工神经网络目标检测识别算法分类
1、基于区域建议的目标检测和识别算法
2、基于回归的目标检测和识别算法
3、基于收索的目标检测和识别算法
② 异常检测有哪些主要的分析方法
1. 概率统计方法
在基于异常检测技术的IDS中应用最早也是最多的一种方法。
首先要对系统或用户的行为按照一定的时间间隔进行采样,样本的内容包括每个会话的登录、退出情况,CPU和内存的占用情况,硬盘等存储介质的使用情况等。
将每次采集到的样本进行计算,得出一系列的参数变量对这些行为进行描述,从而产生行为轮廓,将每次采样后得到的行为轮廓与已有轮廓进行合并,最终得到系统和用户的正常行为轮廓。IDS通过将当前采集到的行为轮廓与正常行为轮廓相比较,来检测是否存在网络入侵行为。
2. 预测模式生成法
假设条件是事件序列不是随机的而是遵循可辨别的模式。这种检测方法的特点是考虑了事件的序列及其相互联系,利用时间规则识别用户行为正常模式的特征。通过归纳学习产生这些规则集,并能动态地修改系统中的这些规则,使之具有较高的预测性、准确性。如果规则在大部分时间是正确的,并能够成功地运用预测所观察到的数据,那么规则就具有高可信度。
3. 神经网络方法
基本思想是用一系列信息单元(命令)训练神经单元,这样在给定一组输入后、就可能预测出输出。与统计理论相比,神经网络更好地表达了变量间的非线性关系,并且能自动学习并更新。实验表明UNIX系统管理员的行为几乎全是可以预测的,对于一般用户,不可预测的行为也只占了很少的一部分。
③ 什么是BP神经网络
BP算法的基本思想是:学习过程由信号正向传播与误差的反向回传两个部分组成;正向传播时,输入样本从输入层传入,经各隐层依次逐层处理,传向输出层,若输出层输出与期望不符,则将误差作为调整信号逐层反向回传,对神经元之间的连接权矩阵做出处理,使误差减小。经反复学习,最终使误差减小到可接受的范围。具体步骤如下:
1、从训练集中取出某一样本,把信息输入网络中。
2、通过各节点间的连接情况正向逐层处理后,得到神经网络的实际输出。
3、计算网络实际输出与期望输出的误差。
4、将误差逐层反向回传至之前各层,并按一定原则将误差信号加载到连接权值上,使整个神经网络的连接权值向误差减小的方向转化。
5、対训练集中每一个输入—输出样本对重复以上步骤,直到整个训练样本集的误差减小到符合要求为止。
④ 人工智能算法简介
人工智能的三大基石—算法、数据和计算能力,算法作为其中之一,是非常重要的,那么人工智能都会涉及哪些算法呢?不同算法适用于哪些场景呢?
一、按照模型训练方式不同可以分为监督学习(Supervised Learning),无监督学习(Unsupervised Learning)、半监督学习(Semi-supervised Learning)和强化学习(Reinforcement Learning)四大类。
常见的监督学习算法包含以下几类:
(1)人工神经网络(Artificial Neural Network)类:反向传播(Backpropagation)、波尔兹曼机(Boltzmann Machine)、卷积神经网络(Convolutional Neural Network)、Hopfield网络(hopfield Network)、多层感知器(Multilyer Perceptron)、径向基函数网络(Radial Basis Function Network,RBFN)、受限波尔兹曼机(Restricted Boltzmann Machine)、回归神经网络(Recurrent Neural Network,RNN)、自组织映射(Self-organizing Map,SOM)、尖峰神经网络(Spiking Neural Network)等。
(2)贝叶斯类(Bayesin):朴素贝叶斯(Naive Bayes)、高斯贝叶斯(Gaussian Naive Bayes)、多项朴素贝叶斯(Multinomial Naive Bayes)、平均-依赖性评估(Averaged One-Dependence Estimators,AODE)
贝叶斯信念网络(Bayesian Belief Network,BBN)、贝叶斯网络(Bayesian Network,BN)等。
(3)决策树(Decision Tree)类:分类和回归树(Classification and Regression Tree,CART)、迭代Dichotomiser3(Iterative Dichotomiser 3, ID3),C4.5算法(C4.5 Algorithm)、C5.0算法(C5.0 Algorithm)、卡方自动交互检测(Chi-squared Automatic Interaction Detection,CHAID)、决策残端(Decision Stump)、ID3算法(ID3 Algorithm)、随机森林(Random Forest)、SLIQ(Supervised Learning in Quest)等。
(4)线性分类器(Linear Classifier)类:Fisher的线性判别(Fisher’s Linear Discriminant)
线性回归(Linear Regression)、逻辑回归(Logistic Regression)、多项逻辑回归(Multionmial Logistic Regression)、朴素贝叶斯分类器(Naive Bayes Classifier)、感知(Perception)、支持向量机(Support Vector Machine)等。
常见的无监督学习类算法包括:
(1) 人工神经网络(Artificial Neural Network)类:生成对抗网络(Generative Adversarial Networks,GAN),前馈神经网络(Feedforward Neural Network)、逻辑学习机(Logic Learning Machine)、自组织映射(Self-organizing Map)等。
(2) 关联规则学习(Association Rule Learning)类:先验算法(Apriori Algorithm)、Eclat算法(Eclat Algorithm)、FP-Growth算法等。
(3)分层聚类算法(Hierarchical Clustering):单连锁聚类(Single-linkage Clustering),概念聚类(Conceptual Clustering)等。
(4)聚类分析(Cluster analysis):BIRCH算法、DBSCAN算法,期望最大化(Expectation-maximization,EM)、模糊聚类(Fuzzy Clustering)、K-means算法、K均值聚类(K-means Clustering)、K-medians聚类、均值漂移算法(Mean-shift)、OPTICS算法等。
(5)异常检测(Anomaly detection)类:K最邻近(K-nearest Neighbor,KNN)算法,局部异常因子算法(Local Outlier Factor,LOF)等。
常见的半监督学习类算法包含:生成模型(Generative Models)、低密度分离(Low-density Separation)、基于图形的方法(Graph-based Methods)、联合训练(Co-training)等。
常见的强化学习类算法包含:Q学习(Q-learning)、状态-行动-奖励-状态-行动(State-Action-Reward-State-Action,SARSA)、DQN(Deep Q Network)、策略梯度算法(Policy Gradients)、基于模型强化学习(Model Based RL)、时序差分学习(Temporal Different Learning)等。
常见的深度学习类算法包含:深度信念网络(Deep Belief Machines)、深度卷积神经网络(Deep Convolutional Neural Networks)、深度递归神经网络(Deep Recurrent Neural Network)、分层时间记忆(Hierarchical Temporal Memory,HTM)、深度波尔兹曼机(Deep Boltzmann Machine,DBM)、栈式自动编码器(Stacked Autoencoder)、生成对抗网络(Generative Adversarial Networks)等。
二、按照解决任务的不同来分类,粗略可以分为二分类算法(Two-class Classification)、多分类算法(Multi-class Classification)、回归算法(Regression)、聚类算法(Clustering)和异常检测(Anomaly Detection)五种。
1.二分类(Two-class Classification)
(1)二分类支持向量机(Two-class SVM):适用于数据特征较多、线性模型的场景。
(2)二分类平均感知器(Two-class Average Perceptron):适用于训练时间短、线性模型的场景。
(3)二分类逻辑回归(Two-class Logistic Regression):适用于训练时间短、线性模型的场景。
(4)二分类贝叶斯点机(Two-class Bayes Point Machine):适用于训练时间短、线性模型的场景。(5)二分类决策森林(Two-class Decision Forest):适用于训练时间短、精准的场景。
(6)二分类提升决策树(Two-class Boosted Decision Tree):适用于训练时间短、精准度高、内存占用量大的场景
(7)二分类决策丛林(Two-class Decision Jungle):适用于训练时间短、精确度高、内存占用量小的场景。
(8)二分类局部深度支持向量机(Two-class Locally Deep SVM):适用于数据特征较多的场景。
(9)二分类神经网络(Two-class Neural Network):适用于精准度高、训练时间较长的场景。
解决多分类问题通常适用三种解决方案:第一种,从数据集和适用方法入手,利用二分类器解决多分类问题;第二种,直接使用具备多分类能力的多分类器;第三种,将二分类器改进成为多分类器今儿解决多分类问题。
常用的算法:
(1)多分类逻辑回归(Multiclass Logistic Regression):适用训练时间短、线性模型的场景。
(2)多分类神经网络(Multiclass Neural Network):适用于精准度高、训练时间较长的场景。
(3)多分类决策森林(Multiclass Decision Forest):适用于精准度高,训练时间短的场景。
(4)多分类决策丛林(Multiclass Decision Jungle):适用于精准度高,内存占用较小的场景。
(5)“一对多”多分类(One-vs-all Multiclass):取决于二分类器效果。
回归
回归问题通常被用来预测具体的数值而非分类。除了返回的结果不同,其他方法与分类问题类似。我们将定量输出,或者连续变量预测称为回归;将定性输出,或者离散变量预测称为分类。长巾的算法有:
(1)排序回归(Ordinal Regression):适用于对数据进行分类排序的场景。
(2)泊松回归(Poission Regression):适用于预测事件次数的场景。
(3)快速森林分位数回归(Fast Forest Quantile Regression):适用于预测分布的场景。
(4)线性回归(Linear Regression):适用于训练时间短、线性模型的场景。
(5)贝叶斯线性回归(Bayesian Linear Regression):适用于线性模型,训练数据量较少的场景。
(6)神经网络回归(Neural Network Regression):适用于精准度高、训练时间较长的场景。
(7)决策森林回归(Decision Forest Regression):适用于精准度高、训练时间短的场景。
(8)提升决策树回归(Boosted Decision Tree Regression):适用于精确度高、训练时间短、内存占用较大的场景。
聚类
聚类的目标是发现数据的潜在规律和结构。聚类通常被用做描述和衡量不同数据源间的相似性,并把数据源分类到不同的簇中。
(1)层次聚类(Hierarchical Clustering):适用于训练时间短、大数据量的场景。
(2)K-means算法:适用于精准度高、训练时间短的场景。
(3)模糊聚类FCM算法(Fuzzy C-means,FCM):适用于精确度高、训练时间短的场景。
(4)SOM神经网络(Self-organizing Feature Map,SOM):适用于运行时间较长的场景。
异常检测
异常检测是指对数据中存在的不正常或非典型的分体进行检测和标志,有时也称为偏差检测。
异常检测看起来和监督学习问题非常相似,都是分类问题。都是对样本的标签进行预测和判断,但是实际上两者的区别非常大,因为异常检测中的正样本(异常点)非常小。常用的算法有:
(1)一分类支持向量机(One-class SVM):适用于数据特征较多的场景。
(2)基于PCA的异常检测(PCA-based Anomaly Detection):适用于训练时间短的场景。
常见的迁移学习类算法包含:归纳式迁移学习(Inctive Transfer Learning) 、直推式迁移学习(Transctive Transfer Learning)、无监督式迁移学习(Unsupervised Transfer Learning)、传递式迁移学习(Transitive Transfer Learning)等。
算法的适用场景:
需要考虑的因素有:
(1)数据量的大小、数据质量和数据本身的特点
(2)机器学习要解决的具体业务场景中问题的本质是什么?
(3)可以接受的计算时间是什么?
(4)算法精度要求有多高?
————————————————
原文链接: https://blog.csdn.net/nfzhlk/article/details/82725769
⑤ 神经网络以及小波分析法在汽车发动机故障检修中有什么应用
汽车是我们生活中常用的将交通工具,那么神经网络和小波分析法在汽车发动机故障检修中有什么应用呢?大家请看我接下来详细地讲解。
一,小波分析在故障检修中的应用
小波包分解与故障特征提取。缸盖表面的振动信号由一系列瞬态响应信号组成,分别代表气缸的振动源响应信号:1为气缸的燃烧激励响应;2是排气阀打开时的节流阀冲击。气门间隙异常时,振动信号的能量大于目前冲击力作用时,振动信号的主要组件目前离冲击力稳定的振动信号和噪声,信号能量相对较小。因此,可以利用每个频带的能量变化来提取故障特征,通过小波包分解系数{4]得到频带的能量。
⑥ BP神经网络的原理的BP什么意思
原文链接:http://tecdat.cn/?p=19936
在本教程中,您将学习如何在R语言中创建神经网络模型。
神经网络(或人工神经网络)具有通过样本进行学习的能力。人工神经网络是一种受生物神经元系统启发的信息处理模型。它由大量高度互连的处理元件(称为神经元)组成,以解决问题。它遵循非线性路径,并在整个节点中并行处理信息。神经网络是一个复杂的自适应系统。自适应意味着它可以通过调整输入权重来更改其内部结构。
该神经网络旨在解决人类容易遇到的问题和机器难以解决的问题,例如识别猫和狗的图片,识别编号的图片。这些问题通常称为模式识别。它的应用范围从光学字符识别到目标检测。
本教程将涵盖以下主题:
神经网络概论
正向传播和反向传播
激活函数
R中神经网络的实现
案例
利弊
结论
神经网络概论
神经网络是受人脑启发执行特定任务的算法。它是一组连接的输入/输出单元,其中每个连接都具有与之关联的权重。在学习阶段,网络通过调整权重进行学习,来预测给定输入的正确类别标签。
人脑由数十亿个处理信息的神经细胞组成。每个神经细胞都认为是一个简单的处理系统。被称为生物神经网络的神经元通过电信号传输信息。这种并行的交互系统使大脑能够思考和处理信息。一个神经元的树突接收来自另一个神经元的输入信号,并根据这些输入将输出响应到某个其他神经元的轴突。
创建测试数据集
创建测试数据集:专业知识得分和沟通技能得分
预测测试集的结果
使用计算函数预测测试数据的概率得分。
现在,将概率转换为二进制类。
预测结果为1,0和1。
利弊
神经网络更灵活,可以用于回归和分类问题。神经网络非常适合具有大量输入(例如图像)的非线性数据集,可以使用任意数量的输入和层,可以并行执行工作。
还有更多可供选择的算法,例如SVM,决策树和回归算法,这些算法简单,快速,易于训练并提供更好的性能。神经网络更多的是黑盒子,需要更多的开发时间和更多的计算能力。与其他机器学习算法相比,神经网络需要更多的数据。NN仅可用于数字输入和非缺失值数据集。一位着名的神经网络研究人员说:“神经网络是解决任何问题的第二好的方法。最好的方法是真正理解问题。”
神经网络的用途
神经网络的特性提供了许多应用方面,例如:
模式识别:神经网络非常适合模式识别问题,例如面部识别,物体检测,指纹识别等。
异常检测:神经网络擅长异常检测,它们可以轻松检测出不适合常规模式的异常模式。
时间序列预测:神经网络可用于预测时间序列问题,例如股票价格,天气预报。
自然语言处理:神经网络在自然语言处理任务中提供了广泛的应用,例如文本分类,命名实体识别(NER),词性标记,语音识别和拼写检查。
最受欢迎的见解
1.r语言用神经网络改进nelson-siegel模型拟合收益率曲线分析
2.r语言实现拟合神经网络预测和结果可视化
3.python用遗传算法-神经网络-模糊逻辑控制算法对乐透分析
4.用于nlp的python:使用keras的多标签文本lstm神经网络分类
5.用r语言实现神经网络预测股票实例
6.R语言基于Keras的小数据集深度学习图像分类
7.用于NLP的seq2seq模型实例用Keras实现神经机器翻译
8.python中基于网格搜索算法优化的深度学习模型分析糖
9.matlab使用贝叶斯优化的深度学习
⑦ 浅谈计算机人工智能论文
近年来,随着信息技术以及计算机技术的不断发展,人工智能在计算机中的应用也随之加深,其被广泛应用于计算机的各个领域。下面是我给大家推荐的浅谈计算机人工智能论文,希望大家喜欢!
《计算机在人工智能中的应用研究》
摘要:近年来,随着信息技术以及计算机技术的不断发展,人工智能在计算机中的应用也随之加深,其被广泛应用于计算机的各个领域。本文针对计算机在人工智能中的应用进行研究,阐述了人工智能的理论概念,分析当前其应用于人工智能所存在的问题,并介绍人工智能在部分领域中的应用。
关键词:计算机;人工智能;应用研究
一、前言
人工智能又称机器智能,来自于1956年的Dartmouth学会,在这学会上人们最初提出了“人工智能”这一词。人工智能作为一门综合性的学科,其是在计算机科学、信息论、心理学、神经生理学以及语言学等多种学科的互相渗透下发展而成。在计算机的应用系统方面,人工智能是专门研究如何制造智能系统或智能机器来模仿人类进行智能活动的能力,从而延伸人们的科学化智能。人工智能是一门富有挑战性的科学,从事这项工作的人必须懂得计算机知识、心理学与哲学。人工智能是处于思维科学的技术应用层次,是其应用分支之一。数学常被认为是多种学科的基础科学,数学也进入语言及思维领域,人工智能学科须借用数学工具。数学在标准逻辑及模糊数学等范围发挥作用,其进入人工智能学科,两者将互相促进且快速发展。
二、人工智能应用于计算机中存在的问题
(一)计算机语言理解的弱点。当前,计算机尚未能确切的理解语言的复杂性。然而,正处于初步研制阶段的计算机语言翻译器,对于算法上的规范句子,已能显示出极高的造句能力及理解能力。但其在理解句子意思上,尚未获得明显成就。我们所获取的信息多来自于上下文的关系以及自身掌握的知识。人们在日常生活中的个人见解、社会见解以及文化见解给句子附加的意义带来很大影响。
(二)模式识别的疑惑。采用计算机进行研究及开展模式识别,在一定程度上虽取得良好效果,有些已作为产品进行实际应用,但其理论以及方法和人的感官识别机制决然不同。人的形象思维能力以及识别手段,即使是计算机中最先进的识别系统也无法达到。此外,在现实社会中,生活作为一项结构宽松的任务,普通的家畜均能轻易对付,但机器却无法做到,这并不意味着其永久不会,而是暂时的。
三、人工智能在部分领域中的应用
伴随着AI技术的快速发展,当今时代的各种信息技术发展均与人工智能技术密切相关,这意味着人工智能已广泛应用于计算机的各个领域,以下是笔者对于人工智能应用于计算机的部分领域进行阐述。具体情况如下。
(一)人工智能进行符号计算。科学计算作为计算机的一种重要用途,可分为两大类别。第一是纯数值的计算,如求函数值。其次是符号的计算,亦称代数运算,是一种智能的快速的计算,处理的内容均为符号。符号可代表实数、整数、复数以及有理数,或者代表集合、函数以及多项式等。随着人工智能的不断发展以及计算机的逐渐普及,多种功能的计算机代数系统软件相继出现,如Maple或Mathematic。由于这些软件均用C语言写成,因此,其可在多数的计算机上使用。
(二)人工智能用于模式识别。模式识别即计算机通过数学的技术方法对模式的判读及自动处理进行研究。计算机模式识别的实现,是研发智能机器的突破点,其使人类深度的认识自身智能。其识别特点为准确、快速以及高效。计算机的模式识别过程相似于人类的学习过程,如语音识别。语音识别即为使计算机听懂人说
的话而进行自动翻译,如七国语言的口语自动翻译系统。该系统的实现使人们出国时在购买机票、预定旅馆及兑换外币等方面,只需通过国际互联网及电话网络,即可用电话或手机与“老外”进行对话。
(三)人工智能计算机网络安全中的应用。当前,在计算机的网络安全管理中常见的技术主要有入侵检测技术以及防火墙技术。防火墙作为计算机网络安全的设备之一,其在计算机的网络安全管理方面发挥重要作用。以往的防火墙尚未有检测加密Web流量的功能,原因在于其未能见到加密的SSL流中的数据,无法快速的获取SSL流中的数据且未能对其进行解密。因而,以往的防火墙无法有效的阻止应用程序的攻击。此外,一般的应用程序进行加密后,可轻易的躲避以往防火墙的检测。因此,由于以往的防火墙无法对应用数据流进行完整的监控,使其难以预防新型攻击。新型的防火墙是通过利用统计、概率以及决策的智能方法以识别数据,达到访问受到权限的目地。然而此方法大多数是从人工智能的学科中采取,因此,被命名为“智能防火墙”。
(四)人工智能应用于计算机网络系统的故障诊断。人工神经网络作为一种信息处理系统,是通过人类的认知过程以及模拟人脑的组织结构而成。1943年时,人工神经网络首次被人提出并得到快速发展,其成为了人工智能技术的另一个分支。人工神经网络通过自身的优点,如联想记忆、自适应以及并列分布处理等,在智能故障诊断中受到广泛关注,并且发挥极大的潜力,为智能故障诊断的探索开辟新的道路。人工神经网络的诊断方法异于专家系统的诊断方法,其通过现场众多的标准样本进行学习及训练,加强调整人工神经网络中的阀值与连接权,使从中获取的知识隐藏分布于整个网络,以达到人工神经网络的模式记忆目的。因此,人工神经网络具备较强的知识捕捉能力,能有效处理异常数据,弥补专家系统方法的缺陷。
四、结束语
总而言之,人工智能作为计算机技术的潮流,其研究的理论及发现决定了计算机技术的发展前景。现今,多数人工智能的研究成果已渗入到人们的日常生活。因此,我们应加强人工智能技术的研究及开发,只有对其应用于各领域中存在的问题进行全面分析,并对此采取相应措施,使其顺利发展。人工智能技术的发展将给人们的生活、学习以及工作带来极大的影响。
参考文献:
[1]杨英.智能型计算机辅助教学系统的实现与研究[J].电脑知识与技术,2009,9
[2]毛毅.人工智能研究热点及其发展方向[J].技术与市场,2008,3
[3]李德毅.网络时代人工智能研究与发展[J].智能系统学报,2009,1
[4]陈步英,冯红.人工智能的应用研究[J].邢台职业技术学院学报,2008,1
⑧ 人工神经网络概念梳理与实例演示
人工神经网络概念梳理与实例演示
神经网络是一种模仿生物神经元的机器学习模型,数据从输入层进入并流经激活阈值的多个节点。
递归性神经网络一种能够对之前输入数据进行内部存储记忆的神经网络,所以他们能够学习到数据流中的时间依赖结构。
如今机器学习已经被应用到很多的产品中去了,例如,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给我们一个让误差更小的方向,这个学习效率就决定了我们该在这个方向上迈多大的梯度。如果学习效率太高,你可能是超过了误差最小值;如果太低,你的训练可能将会永远进行。这是一个你需要调整的超参数。
⑨ 我的笔记本联网的时候显示dns服务器异常,这是网络服务商的问题还是我的本设置有问题
、背景
域名系统(Domain Name System,DNS)是互联网的重要基础设施之一,负责提供域名和IP地址之间的映射和解析,是网页浏览、电子邮件等几乎所有互联网应用中的关键环节。因此,域名系统的稳定运行是实现互联网正常服务的前提。近年来,针对域名系统的网络攻击行为日益猖獗,DNS滥用现象层出不穷,再加上DNS协议本身固有的局限性,域名系统的安全问题正面临着严峻的考验。如何快速有效的检测域名系统的行为异常,避免灾难性事件的发生,是当今域名系统乃至整个互联网所面临的一个重要议题。
DNS服务器通过对其所接收的DNS查询请求进行应答来实现对外域名解析服务,因此DNS查询数据流直接反映了DNS服务器对外服务的整个过程,通过对DNS流量异常情况的检测可以对DNS服务器服务状况进行有效的评估。由于导致DNS流量异常的原因是多方面的,有些是由针对DNS服务器的网络攻击导致的,有些是由于DNS服务系统的软件缺陷或配置错误造成的。不同的原因所引起的DNS流量异常所具备的特征也各不相同,这给DNS流量异常检测带来了诸多困难。
目前,在DNS异常流量检测方面,比较传统的方法是对发往DNS服务器端的DNS查询请求数据流中的一个或多个测量指标进行实时检测,一旦某时刻某一指标超过规定的阈值,即做出流量异常报警。这种方法虽然实现简单,但是仅仅通过对这些指标的独立测量来判定流量是否异常过于片面,误报率通常也很高,不能有效的实现异常流量的检测。
近年来,随着模式识别、数据挖掘技术的发展,开始有越来越多的数据模型被引入到DNS异常流量检测领域,如在[Tracking]中,研究人员通过一种基于关联特征分析的检测方法,来实现对异常DNS服务器的识别和定位;[Context]则引入了一种上下文相关聚类的方法,用于DNS数据流的不同类别的划分;此外,像贝叶斯分类[Bayesian]、时间序列分析[Similarity]等方法也被先后引入到DNS异常流量检测中来。
不难发现,目前在DNS异常流量检测方面,已有诸多可供参考利用的方法。但是,每种方法所对应的应用场合往往各不相同,通常都是面向某种特定的网络攻击活动的检测。此外,每种方法所采用的数据模型往往也比较复杂,存在计算代价大,部署成本高的弊端。基于目前DNS异常流量检测领域的技术现状,本文给出了两种新型的DNS流量异常检测方法。该两种方法能够有效的克服目前DNS异常流量检测技术所存在的弊端,经验证,它们都能够对DNS流量异常实施有效的检测。
2、具体技术方案
1)利用Heap’sLaw检测DNS流量异常
第一种方法是通过利用Heap’s定律来实现DNS流量异常检测。该方法创新性的将DNS数据流的多个测量指标进行联合分析,发现它们在正常网络状况下所表现出来的堆积定律的特性,然后根据这种特性对未来的流量特征进行预测,通过预测值和实际观测值的比较,实现网络异常流量实时检测的目的。该方法避免了因为采用某些独立测量指标进行检测所导致的片面性和误报率高的缺点,同时,该方法具有计算量小,部署成本低的特点,特别适合部署在大型DNS服务器上。
堆积定律(Heap’sLaw)[Heap’s]最早起源于计算语言学中,用于描述文档集合中所含单词总量与不同单词个数之间的关系:即通过对大量的英文文档进行统计发现,对于给定的语料,其独立的单词数(vocabulary的size)V大致是语料大小N的一个指数函数。随着文本数量的增加,其中涉及的独立单词(vocabulary)的个数占语料大小的比例先是突然增大然后增速放缓但是一直在提高,即随着观察到的文本越来越多,新单词一直在出现,但发现整个字典的可能性在降低。
DNS服务器通过对其所接收的DNS查询请求进行应答来实现对外域名解析服务。一个典型的DNS查询请求包由时间戳,来源IP地址,端口号,查询域名,资源类型等字段构成。我们发现,在正常网络状况下,某时间段内DNS服务器端所接收的DNS查询请求数和查询域名集合的大小两者间遵循堆积定律的特性,同样的,DNS查询请求数和来源IP地址集合的大小两者间也存在这种特性。因此,如果在某个时刻这种增长关系发生突变,那么网络流量发生异常的概率也会比较高。由于在正常网络状况下DNS服务器端所接收的查询域名集合的大小可以根据这种增长关系由DNS查询请求数推算得到。通过将推算得到的查询域名集合大小与实际观测到的查询域名集合的大小进行对比,如果两者的差值超过一定的阈值,则可以认为有流量异常情况的发生,从而做出预警。类似的,通过将推算得到的来源IP地址集合大小与实际观测到的来源IP地址集合的大小进行对比,同样可以达到异常流量检测的目的。
由于DNS流量异常发生时,DNS服务器端接收的DNS查询请求通常会异常增多,但是单纯凭此就做出流量异常的警报很可能会导致误报的发生。此时就可以根据观测查询域名空间大小的相应变化情况来做出判断。如果观测到的域名空间大小与推算得到的预测值的差值在允许的阈值范围之内,则可以认定DNS查询请求量的增多是由于DNS业务量的正常增长所致。相反,如果观测到的域名空间大小未发生相应比例的增长,或者增长的幅度异常加大,则做出流量异常报警。例如,当拒绝服务攻击(DenialofService)发生时,攻击方为了降低本地DNS缓存命中率,提高攻击效果,发往攻击对象的查询域名往往是随机生成的任意域名,这些域名通常情况下不存在。因此当该类攻击发生时,会导致所攻击的DNS服务器端当前实际查询域名空间大小异常增大,与根据堆积定律所推算出预测值会存在较大的差距,即原先的增长关系会发生突变。如果两者间的差距超过一定的阈值,就可以据此做出流量异常报警。
通过在真实数据上的测试和网络攻击实验的模拟验证得知,该方法能够对常见的流量异常情况进行实时高效的检测。
2)利用熵分析检测DDoS攻击
通过分析各种网络攻击数据包的特征,我们可以看出:不论DDoS攻击的手段如何改进,一般来说,各种DDoS工具软件所制造出的攻击都要符合如下两个基本规律:
1、攻击者制造的攻击数据包会或多或少地修改包中的信息;
2、攻击手段产生的攻击流量的统计特征不可能与正常流量一模一样。
因此,我们可以做出一个大胆的假设:利用一些相对比较简单的统计方法,可以检测出专门针对DNS服务器的DDoS攻击,并且这中检测方法也可以具有比较理想的精确度。
“熵”(Entropy)是德国物理学家克劳修斯(RudolfClausius,1822~1888)在1850年提出的一个术语,用来表示任何一种能量在空间中分布的均匀程度,也可以用来表示系统的混乱、无序程度。信息理论创始人香农(ClaudeElwoodShannon,1916~2001)在1948年将熵的概念引入到信息论中,并在其经典着作《通信的数学原理》中提出了建立在概率统计模型上的信息度量,也就是“信息熵”。熵在信息论中的定义如下:
如果在一个系统S中存在一个事件集合E={E1,E2,…,En},且每个事件的概率分布P={P1,P2,…,Pn},则每个事件本身所具有的信息量可由公式(1)表示如下:
熵表示整个系统S的平均信息量,其计算方法如公式(2)所示:
在信息论中,熵表示的是信息的不确定性,具有高信息度的系统信息熵是很低的,反过来低信息度系统则具有较高的熵值。具体说来,凡是导致随机事件集合的肯定性,组织性,法则性或有序性等增加或减少的活动过程,都可以用信息熵的改变量这个统一的标尺来度量。熵值表示了系统的稳定情况,熵值越小,表示系统越稳定,反之,当系统中出现的不确定因素增多时,熵值也会升高。如果某个随机变量的取值与系统的异常情况具有很强的相关性,那么系统异常时刻该随机变量的平均信息量就会与系统稳定时刻不同。如果某一时刻该异常情况大量出现,则系统的熵值会出现较大幅度的变化。这就使我们有可能通过系统熵值的变化情况检测系统中是否存在异常现象,而且这种强相关性也使得检测方法能够具有相对较高的准确度。
将熵的理论运用到DNS系统的DDoS攻击检测中来,就是通过测量DNS数据包的某些特定属性的统计特性(熵),从而判断系统是否正在遭受攻击。这里的熵值提供了一种对DNS的查询数据属性的描述。这些属性包括目标域名长度、查询类型、各种错误查询的分布以及源IP地址的分布,等等。熵值越大,表示这些属性的分布越随机;相反,熵值越小,属性分布范围越小,某些属性值出现的概率高。在正常稳定运行的DNS系统中,如果把查询数据作为信息流,以每条DNS查询请求中的某种查询类型的出现作为随机事件,那么在一段时间之内,查询类型这个随机变量的熵应该是一个比较稳定的值,当攻击者利用DNS查询发起DDoS攻击时,网络中会出现大量的攻击数据包,势必引起与查询类型、查询源地址等相关属性的统计特性发生变化。即便是黑客在发动攻击时,对于发送的查询请求的类型和数量进行过精心设计,可以使从攻击者到目标服务器之间某一路径上的熵值维持在稳定的水平,但绝不可能在所有的路径上都做到这一点。因此通过检测熵值的变化情况来检测DNS系统中异常状况的发生,不仅是一种简便可行的方案,而且还可以具有很好的检测效果。
DNS系统是通过资源记录(ResourceRecord,RR)来记录域名和IP地址信息的,每个资源记录都有一个记录类型(QType),用来标识资源记录所包含的信息种类,如A记录表示该资源记录是域名到IP地址的映射,PTR记录IP地址到域名的映射,NS记录表示域名的授权信息等,用户在查询DNS相关信息时,需要指定相应的查询类型。按照前述思想,我们可以采用DNS查询数据中查询类型的出现情况作为随机事件来计算熵的变化情况,从而检测DDoS攻击是否存在。检测方法的主要内容如图1所示。可以看出,通过比较H1和H2之间的差别是否大于某一个设定的阈值,可以判定系统是否正在遭受DDoS攻击。随着查询量窗口的不断滑动,这种比较会随着数据的不断更新而不断继续下去。检测算法的具体步骤如下所示:
1、设定一个查询量窗口,大小为W,表示窗口覆盖了W条记录。
2、统计窗口中出现的所有查询类型及其在所属窗口中出现的概率,根据公式(2)计算出该窗口的熵H1。
图1熵分析检测方法
3、获取当前窗口中第一条查询记录所属的查询类型出现的概率,求出该类型所对应的增量
4、将窗口向后滑动一条记录,此时新窗口中的第一条记录为窗口滑动前的第二条记录。
5、获得窗口移动过程中加入的最后一条记录所代表的查询类型在原窗口中出现的概率以及对应的增量
6、计算新窗口中第一条记录所对应的查询类型出现在新窗口中出现的概率,以及对应的增量
7、计算新窗口中最后一条记录所属的查询类型在当前窗口出现的概率以及对应的增量
8、根据前面的结果计算窗口移动后的熵:
重复步骤2至步骤8的过程,得到一系列的熵值,观察熵值的变化曲线,当熵值曲线出现剧烈波动时,可以断定此时的DNS查询中出现了异常。
窗口的设定是影响检测算法的一个重要因素,窗口越大,熵值的变化越平缓,能够有效降低误检测的情况发生,但同时也降低了对异常的敏感度,漏检率上升;反之,能够增加检测的灵敏度,但准确性相应的会降低。因此,窗口大小的选择,需要根据实际中查询速率的大小进行调整。
2009年5月19日,多省市的递归服务器由于收到超负荷的DNS查询而失效,中国互联网出现了大范围的网络瘫痪事故,这起事故可以看作是一起典型的利用DNS查询发起的分布式拒绝服务攻击,这种突发的大量异常查询混入到正常的DNS查询中,必然会使DNS查询中查询类型的组成发生变化。我们利用从某顶级结点的DNS权威服务器上采集到的2009年5月19日9:00-24:00之间的查询日志,来检验算法是否能够对DNS中的异常行为做出反应。图2和图3分别是窗口大小为1,000和10,000时所得到的熵变化曲线,图4是该节点的查询率曲线。
图2窗口大小为1,000时熵的变化情况
图3窗口大小为10,000时熵的变化情况
图4查询率曲线
从图2和图3中可以发现,大约从16:00时开始,熵值剧烈上升,这是由于此时系统中查询类型为A和NS的查询请求大量涌入,打破了系统原有的稳定态势,在经历较大的波动之后,又回复到一个稳定值。随着系统中缓存失效的递归服务器不断增多,该根服务器收到的异常数据量逐渐增大,在16:45左右熵值达到一个较低点,此时系统中已经混入了大量的异常查询数据。由于各省递归服务器的缓存设置的不一致,不断的有递归服务器崩溃,同时不断缓存失效的递归服务器加入,一直到21:00左右,这种异常查询量到达峰值,表现为熵值到达一个极低的位置,随着大批递归服务器在巨大的压力下瘫痪,查询数据的组成再次发生剧烈波动,接下来随着大面积断网的发生,异常查询无法到达该根服务器,熵值在经历波动之后又重新回到较稳定的状态,图4中的流量变化也证实了这一点。
图2和图3分别将查询窗口设为1,000和10,000,对比两图可以看出,图2中的熵值变化较为频繁,反映出对DNS异常更加敏感,但同时误检测的几率也较高,图3中熵值的变化相对平缓,对异常情况敏感程度较低,同时误检率也相对较低。
上述例子表明该方法能够及时发现DNS查询中针对DNS服务器的DDoS攻击。将该算法应用到DNS查询流量的实时监测中,可以做到准实时的发现DNS异常从而能够及早采取应对措施。此外,结合使用错误查询类型或者源IP地址等其他属性的分布来计算熵,或是采用时间窗口划分流量等,可以进一步提高异常检测的准确率。
3)利用人工神经网络分类器检测DDoS攻击
针对DDoS攻击检测这样一个典型的入侵检测问题,可以转换为模式识别中的二元分类问题。利用人工神经网络分类器和DNS查询数据可以有效检测针对DNS名字服务器的DDoS攻击。通过分析DNS权威或者递归服务器的查询数据,针对DDoS攻击在日志中所表现出来的特性,提取出若干特征向量,这些特征向量用作分类器的输入向量。分类器选择使用多层感知器,属于神经网络中的多层前馈神经网络。人工神经网络在用于DDoS攻击检测时具有以下显着优点:
1、灵活性。能够处理不完整的、畸变的、甚至非线性数据。由于DDoS攻击是由许多攻击者联手实施的,因此以非线性的方式处理来自多个数据源的数据显得尤其重要;
2、处理速度。神经网络方法的这一固有优势使得入侵响应可以在被保护系统遭到毁灭性破坏之前发出,甚至对入侵行为进行预测;
3、学习性。该分类器的最大优点是能够通过学习总结各种攻击行为的特征,并能识别出与当前正常行为模式不匹配的各种行为。
由于多层感知器具有上述不可替代的优点,因此选择它作为分类器。分类器的输出分为“服务正常”和“遭受攻击”两个结果,这个结果直接反应出DNS服务器是否将要或者正在遭受DDoS攻击。如果检测结果是“遭受攻击”,则相关人员可以及时采取措施,避免攻击行为的进一步发展。
图5DDoS攻击检测
如图5所示,本检测方法主要分为特征提取、模型训练和线上分类三个阶段。在特征提取阶段,需要利用DNS查询数据中已有的信息,结合各种DNSDDoS攻击的特点,提取出对分类有用的特征。模型训练阶段是通过大量的特征数据,模拟出上百甚至上千的DDoS攻击序列,对多层感知器进行训练,多层感知器在训练过程中学习攻击行为的特征,增强识别率。线上分类属于应用阶段,利用软件实现将本方法部署在DNS权威或递归服务器上。通过实时读取DNS查询数据,并将经过提取的特征输入到多层感知器中,就可以快速地识别出本服务器是否将要或正在遭受DDoS攻击,以便采取进一步防范措施。
多层感知器分类的精确率,在很大程度上取决于作为输入的特征向量是否能够真正概括、体现出DDoS攻击的特征。本方法通过仔细分析各种DNSDDoS攻击,以分钟为时间粒度提取出八种能够单独或者联合反映出攻击的特征:
1、每秒钟DNS查询量。这个特征通过对每分钟查询量进行平均获得;
2、每分钟时间窗口内查询率的标准差。公式如下:
其中,n表示每分钟内查询数据中记录的秒数,Xi表示某一秒钟的查询量,m表示一分钟内每秒钟查询量的均值;
3、IP空间大小。表示一分钟内有多少个主机发出了DNS查询请求;
4、域名空间大小。表示一分钟内有多少域名被访问;
5、源端口设置为53的查询数量。由于某些针对DNS的DDoS攻击将源端口设置为53,因此对这一设置进行跟踪十分必要;
6、查询记录类型的熵的变化情况。公式如下:
其中n表示时间窗口内记录类型的种类数,Pi表示某种记录类型出现的概率,Xi表示某种记录类型。
7、设置递归查询的比例。由于某些DDoS攻击会通过将查询设置为递归查询来增大攻击效果,因此对这一设置进行跟踪十分必要;
8、域名的平均长度。由于某些DDoS攻击所查询的域名是由程序随机产生的,这必然在查询数据上引起域名平均长度的变化,因此对域名的平均长度进行跟踪也很有意义。
图6人工神经网络分类器的结构
神经网络分类器的大致结构如图6所示。如图中所示,本分类器分为三个层次,一个输入层,一个隐藏层,一个输出层。输入层包含八个单元,隐藏层包含20个单元,按照神经网络理论[3],隐藏层的单元数和输入层的单元数应满足以下关系:
H表示隐藏层单元数,N表示输入层单元数。输出层只含有一个单元,输出值包含两个:“1”表示“遭受攻击”,“0”表示“服务正常”。
本检测方法的关键技术点包括以下两个方面:
1、特征的抽取。这些特征必须能够充分、足够地反映DDos攻击发生时带来的查询状况的改变;
2、学习、分类方法。选取多层感知器作为分类器,设计调整了该分类器的具体结构和相关参数,并利用后向传播算法对分类器进行训练。通过将DDoS攻击检测问题转化为包含“服务正常”和“遭受攻击”两种类别的二元分类问题,能够有效地对DNSDDoS攻击进行实时检测。
⑩ 大数据科学家需要掌握的几种异常值检测方法
引言
异常值检测与告警一直是工业界非常关注的问题,自动准确地检测出系统的异常值,不仅可以节约大量的人力物力,还能尽早发现系统的异常情况,挽回不必要的损失。个推也非常重视大数据中的异常值检测,例如在运维部门的流量管理业务中,个推很早便展开了对异常值检测的实践,也因此积累了较为丰富的经验。本文将从以下几个方面介绍异常值检测。
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算法则要表现得更好。
总结
上文为大家讲解了异常值检测的方法原理以及应用实践。综合来看,异常值检测算法多种多样 ,每一种都有自己的优缺点和适用范围,很难直接判断哪一种异常检测算法是最佳的, 具体在实战中,我们需要根据自身业务的特点,比如对计算量的要求、对异常值的容忍度等,选择合适的异常值检测算法。
接下来,个推也会结合自身实践,在大数据异常检测方面不断深耕,继续优化算法模型在不同业务场景中的性能,持续为开发者们分享前沿的理念与最新的实践方案。