计算机系统应用教程网站

网站首页 > 技术文章 正文

神经网络综述 神经网络算法综述

btikc 2024-10-23 09:21:45 技术文章 20 ℃ 0 评论

本文旨在介绍机器学习中的神经网络的多种变种,包括简单的代码实现及优缺点并尽量不涉及到公式,希望能给阅读者建立起一个关于神经网络的综合概念,因此,本文会涉及到一点神经网络的原理但不会太深入以致于读者迷失在其中而无法得到一个全局性的概念。另外,由于神经网络模型众多,本文无法详尽的描述,无法理解。

神经网络就是在模拟人的神经元细胞的运作方式以及他们之间的组织、连接方式,许多神经网络算法灵感都来自神经的研究,但关于神经的基本常识不是必需的。

感知器

生物神经元包括神经元的输入部分(树突)、处理部分(细胞体)和输出部分(轴突)。处理部分做的就是将输入部分的多个数据按照一定的权值进行组合,组合以后进行输出,这也就是我们用计算机要构造的过程,即接受刺激信号并汇总交给传递函数处理后输出。

另外,人体的神经元即使不接受刺激,本身也会带有一定的刺激强度,这也是为什么我们会有不同的情绪和精神状态,即使我们处在同一个地点同一个时间段,这在我们的机器神经元中体现为偏移量,也就是线性函数y=ax+b中的b,而输入刺激则对应着x。

因此,使用矩阵、传递函数来表示感知器,我们就可以将公式写为Y=f(W*X+B),其中,f是传递函数,W是权值,B是偏移量,X是输入信号,Y是输出信号。

假如我们的传递函数只能返回0或1,对于AND、OR等线性可分问题,返回的这些值正好将其划分为两个区域,但对于XOR问题,XOR问题中存在三个区域,其中两个区域取值相同,对感知器就无法计算了,解决办法多种,如下就是一种。

小编经过长时间的整理 整理了差不多500g的资料包,供各位领取,,需要的私信回复:168 领取


多层神经网络

我们将多个感知器按照层级连接起来,就构成了多层感知器,也就是多层神经网络。对于XOR问题,多层神经网络进行两次划分和一次组合,就可完成划分。

第一次划分多层神经网络将0 XOR 0的点与其他的点划分开来,第二次划分则将1 XOR 1的点划分开来,这样我们就分别获得了两个点的区域,再通过一次组合,即可解决XOR问题。

前馈神经网络

前馈神经网络也是多层神经网络,其各节点接受前一级输入,并输出到下一级,无反馈,并且上一层输出是下一层输入,不可跨层连接。

如何训练

训练多层神经网络,有一个普遍的问题就是,如何获取到隐层的权值,在单层甚至于单个神经元的计算中,我们是使用实际输出结果和期望输出结果的误差来进行调整,而在多层的情况下,则可以使用BP算法,即反向传播算法,将信号进行正向的传播,并从输出层反向传播误差,并逐层调整权值进行训练。

因此,BP算法的核心在于,反向传播并将所得误差分摊给各层的所有单元。

深度学习

深度学习是基于深度神经网络的机器学习,因此它与传统的神经网络之间有很多的相同之处,如:

相似的分层结构,包括输入层、隐层和输出层;

相邻层间有连接,同层及跨层之间没有连接。

而最主要的不同之处在于深度神经网络具有更多的神经网络层次,这也就是深度的含义。

训练方式

深度学习的网络训练无法使用多层神经网络的方法,即使用BP(反向传播)算法,意思是误差反向传播。使用BP算法的原因就是传统的算法中误差在多隐层内逆传播时,往往会“发散”而难以收敛。

我们常使用深度学习来自动学习特征,也就是说,首先利用无监督学习对每一层进行逐层预训练去学习特征,每次单独训练一层并将训练结果作为更高一层的输入,在最高层再利用监督学习从上到下微调。

使用上面这个策略可以有效利用模型大量的参数提供的自由度的同时,有效地节省开销,同时我们还可以利用权值共享的方式,也就是让一组神经元使用相同的连接权,更加降低训练的时间开销,这在卷积神经网络中是非常常见的。

深度学习与其他机器学习算法的最大不同,就在于找到数据的特征,通过每一层对数据的抽取、抽象,获取数据的特征,因此,深度学习使用更类似人类神经元传递信息和链接的方式,也因此能够解决人类的多种分类和预测问题等。

自编码器

什么是自编码器呢,自编码器就是将输入编码后再解码,解码后的数据与原先的数据有误差,但可接受,这就是自编码器了。如果解码后的数据与原先的数据完全一致,这就不该叫自编码器了,应该叫加密算法。

如何提取

为了使得数据的学习上不至于将数据完全映射学习,而是学习数据本身的内在结构和特征,通常隐层的神经元数目要比输入/输出层少,这样就可以只学习最重要的特征并实现特征的降维。

因此,我们只要使用多层神经网络,每一层不断深入地提取特征,最后,就能提取到数据的显著特征来帮助我们解决分类、预测等多种问题。

如何训练

无监督训练

自编码器的训练的前提是,隐层的节点数量比输入输出层少,这样有利于我们提取特征。因此,我们的训练可以是将输入进行编码,编码后再进行解码重建,再于输入数据进行对比发现其中的差异,再进行权值的微调以达到误差最小化,这也是前面深度学习提到过的无监督学习的训练方式。

不断地重复这个过程,将解码后的数据再给新的隐层进行权值的训练,最终得到我们的自编码器。

至于需要多少层,就需要靠我们的经验和我们的需求了,目前还没有较为客观公平的评价方法。

有监督微调

我们对上面提取出来的特征再连接一层分类器,就可以实现分类了。当然,我们还需要再对网络进行调整,调整的方式有两种,一种是直接调整分类器,另一种则是对整个网络都进行微调。

最后,我们就能够获得一个优秀的自动编码器。

栈式自编码器

通常神经元接受刺激有个特点,就是神经元中不会所有的神经元都接收到刺激,而是一部分的神经元产生信号,这也就是隐藏节点的稀疏性,也就是隐藏节点中被激活的节点数远远小于被抑制的节点数,这个特性在隐藏层节点多余可视节点数目时尤为突出,否则就可能产生输入被隐藏节点直接复制作为输出,就达不到训练的效果。

将多层稀疏自编码器搭配组合就能构成栈式自编码器,每一层的输出作为下一层的输入,并按照从前往后的顺序构成每一层自编码器的编码步骤。

贪心法

使用贪心法进行训练:

使用BP算法对第一层自编码器训练;

训练第二层自编码器;

重复步骤1和2;

步骤1~3称为预训练,将权重初始化到一个合适的位置,之后再连接全连接层,并进行微调完成训练。

受限玻尔兹曼机(RBM)

玻尔兹曼机

玻尔兹曼机是为网络状态定义一个“能量”,能量最小时网络达到理想状态,因此,网络的训练就是在最小化这个能量状态。

玻尔兹曼机的神经元分为两层:显层与隐层,且都是布尔型的,只能取0、1两种状态,分别代表抑制和激活状态。若网络中的神经元以任意不依赖于输入值的顺序进行更新,则网络最终将达到玻尔兹曼分布。

受限玻尔兹曼机

玻尔兹曼机的训练将每个训练样本视为一个状态向量,并使其出现的概率尽可能的大。

如果玻尔兹曼机的同一层节点之间没有连接,就是受限玻尔兹曼机了,这也是他们之间的主要区别。

如上图所示, 受限玻尔兹曼机的参数是可视层与隐藏层之间的权重矩阵W,一个是可视节点的偏移量b,还有就是隐藏节点的偏移量v,这几个参数决定了RBM对样本的编码方式。

结构

受限玻尔兹曼机RBM包括隐层、可见层和偏置层。与前馈神经网络的不同之处在于,RBM在可见层与隐层间的链接是方向不定(值双向传播)的和完全链接的。

用途

受限玻尔兹曼机有以下几种用途:

编码数据并交给监督学习方法进行分类或回归;

得到权重矩阵和偏移量,供BP神经网络初始化训练。

估计联合概率p(训练样本, 类别标签);

计算条件概率p( 类别标签 | 训练样本 )。

现在,我们已经知道了RBM作为特征检测及提取的工具的应用,然而我们依然无法使用这些功能。另一个同样强大的特征探测器就是自动编码器,思考一下我们如何利用这些网络吧。

DBN深度信念网络

类似于栈式自编码器,我们可以将RBM叠加起来,就构成了DBN。

训练

DBN在大多数训练中使用了逐层贪婪训练方法。

训练步骤如下:

分别单独无监督训练每一层RBM网络,确保特征向量映射到不同的特征空间;

在DBN的最后一层设置BP网络,有监督的训练实体关系分类器。

其中,在训练步骤一中,采用层间贪心式的预训练,工作模式如下:

通过对比差异法对所有样本训练第一层RBM;

使用第一层RBM的输出作为第二层RBM的输入进行第二层RBM训练;

重复上述过程。

步骤二可以根据具体的应用换成任何分类器模型。

卷积神经网络

卷积神经网络与普通的神经网络最显著的差别就在于卷积层,而卷积层通常连接着降采样层。卷积神经网络是一种特殊的图像识别网络,也是前馈网络。

组成部分

卷积层:对输入数据应用若干过滤器获得特征图谱;

池化层:进行采样,缩减输入数据的规模,厂家的方法有最大值合并、平均值合并及随机合并,减少计算量;

全连接层:计算分类的分值。

训练的过程同样通过BP算法训练。

卷积神经网络有一个功能十分强大,那就是通过感受区域的概念以及权值共享减少了神经网络需要训练的参数的个数,感受区域是指每个隐层单元,对上一层的神经元只有相近的部分连接,而不再采用全连接的方式。

而权值共享,即每个隐层单元使用也即我们在感知器提到过的函数结构上类似,但权值相同的函数,这样就能有效的减少参数,提高训练的效率。

示例

基于MNIST数据集的Tensorflow入门即实现了手写数字认证,在Tensorflow网站上可以找到示例代码及一系列教程,另外,在Kaggle竞赛网站上的入门竞赛,也可以找到基于MNIST手写数据集的竞赛链接Digit Recognizer。

循环神经网络

循环神经网络是指一个随着时间推移,重复发生的结构。

在我们与一些著名的智能客服/聊天机器人聊天时,我们常常会感觉到,这些机器只会对我们的每个询问进行回答,匹配最适合的结果,但却常常忽视前文的信息,于是常常出现驴唇不对马嘴等让人哭笑不得的回复。

而循环神经网络,就是能够利用前面的信息,循环的输入到下一层的神经单元进行处理。

循环神经网络已经在多种应用中展现了它的身影,例如语音识别、翻译等。对于循环神经网络,对一些长时间依赖的问题依旧无法解决,例如在文本阅读中抑或着一些采用插叙手法的文章、电影而言,循环神经网络就更无法正常理解了。

递归神经网络

递归神经网络允许网络中出现环形结构,这使得一些神经元的输出可以反馈作为输入信号,从而能够处理与时间有关的动态变化。

因此我们可以说,递归神经网络是广义上的循环神经网络。

长短期记忆网络LSTM

LSTM是一种特殊的循环神经网络,具有能够学习的长期依赖的能力,且这种能力是由于设计就使得LSTM拥有这种默认能力,而不是需要努力学习的东西。并且,LSTM中也同样采用了重复模块组成的链式结构。

总结

本文从感知器出发,介绍了感知器的基本原理以及多层感知器,还介绍了进行可用于自动编码的自编码器和受限玻尔兹曼机,另外,本文还结合具体应用介绍了图像领域的卷积神经网络和文字领域的循环神经网络。本文还对深度学习进行了简单的介绍,总而言之,本文介绍的依旧较为浅薄,望理解。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表