手机通话中如果出现杂音,您可选择一部好的话机试一试,如杂音消失,说明是话机的故障;如杂音仍存在,估计故障出现在线路上,可将室内线断开,把话机直接接到入户进线上,如杂音消失则说明室内线路有问题,检查室内电话线路、插头与接线盒是否有脱皮、生锈和松动现象,更换室内线、接线盒等;如果还有杂音,则是线路问题,应通知相关维护人员处理。
㈡ 什么是BP神经网络
BP算法的基本思想是:学习过程由信号正向传播与误差的反向回传两个部分组成;正向传播时,输入样本从输入层传入,经各隐层依次逐层处理,传向输出层,若输出层输出与期望不符,则将误差作为调整信号逐层反向回传,对神经元之间的连接权矩阵做出处理,使误差减小。经反复学习,最终使误差减小到可接受的范围。具体步骤如下:
1、从训练集中取出某一样本,把信息输入网络中。
2、通过各节点间的连接情况正向逐层处理后,得到神经网络的实际输出。
3、计算网络实际输出与期望输出的误差。
4、将误差逐层反向回传至之前各层,并按一定原则将误差信号加载到连接权值上,使整个神经网络的连接权值向误差减小的方向转化。
5、対训练集中每一个输入—输出样本对重复以上步骤,直到整个训练样本集的误差减小到符合要求为止。
㈢ 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使用贝叶斯优化的深度学习
㈣ 如何通过仪器辨别某个人的声音
所谓声纹(Voiceprint),是用电声学仪器显示的携带言语信息的声波频谱。
人类语言的产生是人体语言中枢与发音器官之间一个复杂的生理物理过程,人在讲话时使用的发声器官--舌、牙齿、喉头、肺、鼻腔在尺寸和形态方面每个人的差异很大,所以任何两个人的声纹图谱都有差异。每个人的语音声学特征既有相对稳定性,又有变异性,不是绝对的、一成不变的。这种变异可来自生理、病理、心理、模拟、伪装,也与环境干扰有关。尽管如此,由于每个人的发音器官都不尽相同,因此在一般情况下,人们仍能区别不同的人的声音或判断是否是同一人的声音。
声纹识别及其应用
声纹识别的应用有一些缺点,比如同一个人的声音具有易变性,易受身体状况、年龄、情绪等的影响;比如不同的麦克风和信道对识别性能有影响;比如环境噪音对识别有干扰;又比如混合说话人的情形下人的声纹特征不易提取;……等等。尽管如此,与其他生物特征相比,声纹识别的应用有一些特殊的优势:(1)蕴含声纹特征的语音获取方便、自然,声纹提取可在不知不觉中完成,因此使用者的接受程度也高;(2)获取语音的识别成本低廉,使用简单,一个麦克风即可,在使用通讯设备时更无需额外的录音设备;(3)适合远程身份确认,只需要一个麦克风或电话、手机就可以通过网路(通讯网络或互联网络)实现远程登录;(4)声纹辨认和确认的算法复杂度低;(5)配合一些其他措施,如通过语音识别进行内容鉴别等,可以提高准确率;……等等。这些优势使得声纹识别的应用越来越收到系统开发者和用户青睐,声纹识别的世界市场占有率15.8%,仅次于手指和手的生物特征识别,并有不断上升的趋势。
1。声纹识别的分类
声纹识别(Voiceprint Recognition, VPR),也称为说话人识别(Speaker Recognition),有两类,即说话人辨认(Speaker Identification)和说话人确认(Speaker Verification)。前者用以判断某段语音是若干人中的哪一个所说的,是“多选一”问题;而后者用以确认某段语音是否是指定的某个人所说的,是“一对一判别”问题。不同的任务和应用会使用不同的声纹识别技术,如缩小刑侦范围时可能需要辨认技术,而银行交易时则需要确认技术。不管是辨认还是确认,都需要先对说话人的声纹进行建模,这就是所谓的“训练”或“学习”过程。
从另一方面,声纹识别有文本相关的(Text-Dependent)和文本无关的(Text-Independent)两种。与文本有关的声纹识别系统要求用户按照规定的内容发音,每个人的声纹模型逐个被精确地建立,而识别时也必须按规定的内容发音,因此可以达到较好的识别效果,但系统需要用户配合,如果用户的发音与规定的内容不符合,则无法正确识别该用户。而与文本无关的识别系统则不规定说话人的发音内容,模型建立相对困难,但用户使用方便,可应用范围较宽。根据特定的任务和应用,两种是有不同的应用范围的。比如,在银行交易时可以使用文本相关的声纹识别,因为用户自己进行交易时是愿意配合的;而在刑侦或侦听应用中则无法使用文本相关的声纹识别,因为你无法要求犯罪嫌疑人或被侦听的人配合。
在说话人辨认方面,根据待识别的说话人是否在注册的说话人集合内,说话人辨认可以分为开集(open-set)辨认和闭集(close-set)辨认。前者假定待识别说话人可以在集合外,而后者假定待识别说话人在集合内。显然,开集辨认需要有一个对集外说话人的“拒识问题”,而且闭集辨认的结果要好于开集辨认结果。本质上讲,说话人确认和开集说话人辨认都需要用到拒识技术,为了达到很好的拒识效果,通常需要训练一个假冒者模型或背景模型,以便拒识时有可资比较的对象,阈值容易选定。而建立背景模型的好坏直接影响到拒识甚至声纹识别的性能。一个好的背景模型,往往需要通过预先采集好的若干说话人的数据,通过某种算法去建立。
如果技术达到一定的水平,可以把文本相关识别并入文本无关识别,把闭集辨认并入开集辨认,从而提供更为方便的使用方法。比如北京得意音通技术有限公司的“得意”身份证就是文本无关的、开集方式的说话人辨认和确认,“得意”身份证SDK还提供建立背景模型的工具。
2。声纹识别的关键问题
声纹识别可以说有两个关键问题,一是特征提取,二是模式匹配(模式识别)。
特征提取的任务是提取并选择对说话人的声纹具有可分性强、稳定性高等特性的声学或语言特征。与语音识别不同,声纹识别的特征必须是“个性化”特征,而说话人识别的特征对说话人来讲必须是“共性特征”。虽然目前大部分声纹识别系统用的都是声学层面的特征,但是表征一个人特点的特征应该是多层面的,包括:(1)与人类的发音机制的解剖学结构有关的声学特征(如频谱、倒频谱、共振峰、基音、反射系数等等)、鼻音、带深呼吸音、沙哑音、笑声等;(2)受社会经济状况、受教育水平、出生地等影响的语义、修辞、发音、言语习惯等;(3)个人特点或受父母影响的韵律、节奏、速度、语调、音量等特征。从利用数学方法可以建模的角度出发,声纹自动识别模型目前可以使用的特征包括:(1)声学特征(倒频谱);(2)词法特征(说话人相关的词n-gram,音素n-gram);(3)韵律特征(利用n-gram描述的基音和能量“姿势”);(4)语种、方言和口音信息;(5)通道信息(使用何种通道);等等。
根据不同的任务需求,声纹识别还面临一个特征选择或特征选用的问题。例如,对“信道”信息,在刑侦应用上,希望不用,也就是说希望弱化信道对说话人识别的影响,因为我们希望不管说话人用什么信道系统它都可以辨认出来;而在银行交易上,希望用信道信息,即希望信道对说话人识别有较大影响,从而可以剔除录音、模仿等带来的影响。
总之,较好的特征,应该能够有效地区分不同的说话人,但又能在同一说话人语音发生变化时保持相对的稳定;不易被他人模仿或能够较好地解决被他人模仿问题;具有较好的抗噪性能;……。当然,这些问题也可以通过模型方法去解决。
对于模式识别,有以下几大类方法:
(1)模板匹配方法:利用动态时间弯折(DTW)以对准训练和测试特征序列,主要用于固定词组的应用(通常为文本相关任务);
(2)最近邻方法:训练时保留所有特征矢量,识别时对每个矢量都找到训练矢量中最近的K个,据此进行识别,通常模型存储和相似计算的量都很大;
(3)神经网络方法:有很多种形式,如多层感知、径向基函数(RBF)等,可以显式训练以区分说话人和其背景说话人,其训练量很大,且模型的可推广性不好;
(4)隐式马尔可夫模型(HMM)方法:通常使用单状态的HMM,或高斯混合模型(GMM),是比较流行的方法,效果比较好;
(5)VQ聚类方法(如LBG):效果比较好,算法复杂度也不高,和HMM方法配合起来更可以收到更好的效果;
(6)多项式分类器方法:有较高的精度,但模型存储和计算量都比较大;
(7)……
声纹识别需要解决的关键问题还有很多,诸如:短话音问题,能否用很短的语音进行模型训练,而且用很短的时间进行识别,这主要是声音不易获取的应用所需求的;声音模仿(或放录音)问题,要有效地区分开模仿声音(录音)和真正的声音;多说话人情况下目标说话人的有效检出;消除或减弱声音变化(不同语言、内容、方式、身体状况、时间、年龄等)带来的影响;消除信道差异和背景噪音带来的影响;……此时需要用到其他一些技术来辅助完成,如去噪、自适应等技术。
对说话人确认,还面临一个两难选择问题。通常,表征说话人确认系统性能的两个重要参数是错误拒绝率和错误接受率,前者是拒绝真正说话人而造成的错误,后者是接受集外说话人而造成的错误,二者与阈值的设定相关。在现有的技术水平下,两者无法同时达到最小,需要调整阈值来满足不同应用的需求,比如在需要“易用性”的情况下,可以让错误拒绝率低一些,此时错误接受率会增加,从而安全性降低;在对“安全性”要求高的情况下,可以让错误接受率低一些,此时错误拒绝率会增加,从而易用性降低。前者可以概括为“宁错勿漏”,而后者可以“宁漏勿错”。我们把真正阈值的调整称为“操作点”调整。好的系统应该允许对操作点的自由调整。
3。声纹识别的应用
声纹识别可以应用的范围很宽,可以说声纹识别几乎可以应用到人们日常生活的各个角落。比如下面举几个例子。
(1)信息领域。比如在自动总机系统中,把“得意”身份证之声纹辨认(www.d-ear.com/Technologies&Procts/Procts-d-Ear%20ID_ch.htm)和“得意”关键词检出器(http://www.d-ear.com/Technologies&Procts/Procts-d-Ear%20Word-Spotter_ch)结合起来,可以在姓名自动拨号的同时向受话方提供主叫方的身份信息。前者用于身份认证,后者用于内容认证。同样,声纹识别技术可以在呼叫中心(Call Center)应用中为注册的常客户提供友好的个性化服务。
(2)银行、证券。鉴于密码的安全性不高,可以用声纹识别技术对电话银行、远程炒股等业务中的用户身份进行确认,为了提供安全性,还可以采取一些其他措施,如密码和声纹双保险,如随机提示文本用文本相关的声纹识别技术进行身份确认(随机提示文本保证无法用事先录好的音去假冒),甚至可以把交易时的声音录下来以备查询。
(3)公安司法。对于各种电话勒索、绑架、电话人身攻击等案件,声纹辨认技术可以在一段录音中查找出嫌疑人或缩小侦察范围;声纹确认技术还可以在法庭上提供身份确认的旁证。
(4)军队和国防。声纹辨认技术可以察觉电话交谈过程中是否有关键说话人出现,继而对交谈的内容进行跟踪(战场环境监听);在通过电话发出军事指令时,可以对发出命令的人的身份进行确认(敌我指战员鉴别)。目前该技术在国外军事方面已经有所应用,据报道,迫降在我国海南机场的美军EP-3侦察机中就载有类似的声纹识别侦听模块。
(5)保安和证件防伪。如机密场所的门禁系统。又如声纹识别确认可用于信用卡、银行自动取款机、门、车的钥匙卡、授权使用的电脑、声纹锁以及特殊通道口的身份卡,把声纹存在卡上,在需要时,持卡者只要将卡插入专用机的插口上,通过一个传声器读出事先已储存的暗码,同时仪器接收持卡者发出的声音,然后进行分析比较,从而完成身份确认。同样可以把含有某人声纹特征的芯片嵌入到证件之中,通过上面所述的过程完成证件防伪。
㈤ 异常检测有哪些主要的分析方法
1. 概率统计方法
在基于异常检测技术的IDS中应用最早也是最多的一种方法。
首先要对系统或用户的行为按照一定的时间间隔进行采样,样本的内容包括每个会话的登录、退出情况,CPU和内存的占用情况,硬盘等存储介质的使用情况等。
将每次采集到的样本进行计算,得出一系列的参数变量对这些行为进行描述,从而产生行为轮廓,将每次采样后得到的行为轮廓与已有轮廓进行合并,最终得到系统和用户的正常行为轮廓。IDS通过将当前采集到的行为轮廓与正常行为轮廓相比较,来检测是否存在网络入侵行为。
2. 预测模式生成法
假设条件是事件序列不是随机的而是遵循可辨别的模式。这种检测方法的特点是考虑了事件的序列及其相互联系,利用时间规则识别用户行为正常模式的特征。通过归纳学习产生这些规则集,并能动态地修改系统中的这些规则,使之具有较高的预测性、准确性。如果规则在大部分时间是正确的,并能够成功地运用预测所观察到的数据,那么规则就具有高可信度。
3. 神经网络方法
基本思想是用一系列信息单元(命令)训练神经单元,这样在给定一组输入后、就可能预测出输出。与统计理论相比,神经网络更好地表达了变量间的非线性关系,并且能自动学习并更新。实验表明UNIX系统管理员的行为几乎全是可以预测的,对于一般用户,不可预测的行为也只占了很少的一部分。
㈥ 神经网络以及小波分析法在汽车发动机故障检修中有什么应用
汽车是我们生活中常用的将交通工具,那么神经网络和小波分析法在汽车发动机故障检修中有什么应用呢?大家请看我接下来详细地讲解。
一,小波分析在故障检修中的应用
小波包分解与故障特征提取。缸盖表面的振动信号由一系列瞬态响应信号组成,分别代表气缸的振动源响应信号:1为气缸的燃烧激励响应;2是排气阀打开时的节流阀冲击。气门间隙异常时,振动信号的能量大于目前冲击力作用时,振动信号的主要组件目前离冲击力稳定的振动信号和噪声,信号能量相对较小。因此,可以利用每个频带的能量变化来提取故障特征,通过小波包分解系数{4]得到频带的能量。
㈦ 人工神经网络概念梳理与实例演示
人工神经网络概念梳理与实例演示
神经网络是一种模仿生物神经元的机器学习模型,数据从输入层进入并流经激活阈值的多个节点。
递归性神经网络一种能够对之前输入数据进行内部存储记忆的神经网络,所以他们能够学习到数据流中的时间依赖结构。
如今机器学习已经被应用到很多的产品中去了,例如,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给我们一个让误差更小的方向,这个学习效率就决定了我们该在这个方向上迈多大的梯度。如果学习效率太高,你可能是超过了误差最小值;如果太低,你的训练可能将会永远进行。这是一个你需要调整的超参数。