神经网络基础体系学习笔记一

神经网络基础体系学习笔记

重要的用途是分类

目前最广泛被使用的分类器有人工神经网络、支持向量机、最近邻居法、高斯混合模型、朴素贝叶斯方法、决策树和径向基函数分类。

当前优势领域: 机器视觉和语音识别

神经网络在二十世纪40年代后期被提出,直到计算机具有更强的计算能力之前,神经网络的研究进展缓慢。

2006年之后的进展
人们用CMOS创造了用于生物物理模拟和神经形态计算的计算设备。最新的研究显示了用于大型主成分分析和卷积神经网络的纳米设备[6]具有良好的前景。如果成功的话,这会创造出一种新的神经计算设备[7],因为它依赖于学习而不是编程,并且它从根本上就是模拟的而不是数字化的,虽然它的第一个实例可能是数字化的CMOS设备。
待研究

典型的人工神经网络具有以下三个部分:

  1. 结构(Architecture):结构指定了网络中的变量和它们的拓扑关系。例如,神经网络中的变量可以是神经元连接的权重(weights)和神经元的激励值(activities of the neurons).
  2. 激励函数(Activation Rule) :大部分神经网络模型具有一个
    短时间尺度的动力学规则,来定义神经元如何根据其他神经元的活动来改变自己的激励值。一般激励函数依赖于网络中的权重(即该网络的参数)。
  3. 学习规则(Learning Rule) :学习规则指定了网络中的权重如何随时间推进而调整。这一般被看做是一种长时间尺度的动力学规则。一般情况下,学习规则依赖于神经元的激励值。他也可能依赖于监督者提供的目标值和当前的权重值。例如,用于手写识别的一个神经网络,有一组输入神经元。输入神经元会被输入图像的数据所激发。在激励值被加权并通过一个函数(由网络是设计者确定)后,这个神经元的激励值被传递到其他神经元。这个过程不断重复,直到输出神经元被激发。最后,输出神经元的激励值决定了识别出来的是哪个字母。

神经元示意图:

  • a1~an为输入向量的各个分量
  • w1~wn为神经元各个突触的权值
  • b为偏置
  • f为传递函数,通常为非线性函数。
  • t为神经元输出

单个神经元的作用:把一个n维向量空间用一个超平面分割成两部分(称之为判断边界),给定一个输入向量,神经元可以判断出这个向量位于超平面的哪一边。

神经元网路

单层神经元网络
是最基本的神经元网络形式,又有限个神经元构成,所有神经元的输入向量都是同一个向量。由于每个神经元都会产生一个标量结果,所以单层神经元的的输出是一个向量,向量的维数等于神经元的数目。

示意图:

多层神经元网络

神经网络的实用性

人工神经网络是一个能够学习,能够总结归纳的系统,也就是说它能够通过已知数据的实验运用来学习和归纳总结。人工神经网络通过对局部情况的对照比较(而这些比较是基于不同情况下的自动学习和要实际解决问题的复杂性所决定的),它能够推理产生一个可以自动识别的系统。
与之不同的基于符号系统下的学习方法,它们也具有推理功能,只是它们是创建在逻辑算法的基础上,也就是说它们之所以能够推理,基础是需要有一个推理算法则的集合。

与符号系统的区别

神经元网络模型

通常来说,一个神经元网络是由一个多层神经元结构组成,每一个神经元拥有输入(它的输入是前一层神经元的输出)和输出,每一层(我们用符号记做)Layer(i)是由Ni(Ni代表再第i层上的N)个网络神经元组成,每个Ni上的网络神经元把对应在Ni-1上的神经元输出作为它的输入,我们把神经元和与之对应的神经元之间的连线用生物学的名称,叫做突触(Synapse),在数学模型中每个突触有一个加权数值,我们称做权重,那么要计算第i层上的某个神经元所得到的势能等于每一个权重乘以第i-1层上对应神经元的输出,然后全体求和得到了第i层上的某个神经元所得到的势能,然后势能数值通过该神经元上的激活函数(activatioin function),求出该神经元的输出,注意的是该输出是一个非线性的数值,也就是说通过激励函数求的数值根据极限值来判断是否要激活该神经元,换句话说我们对一个神经元网络的输出是否线性不感兴趣。

多层神经网络的效果

与单层神经网络不同。理论证明,两层神经网络可以无限逼近任意连续函数。

训练

机器学习模型训练的目的,就是使得参数尽可能的与真实的模型逼近。具体做法是这样的。首先给所有参数赋上随机值。我们使用这些随机生成的参数值,来预测训练数据中的样本。样本的预测目标为yp,真实目标为y。那么,定义一个值loss,计算公式如下。

loss = (yp – y)2

这个值称之为损失(loss),我们的目标就是使对所有训练数据的损失和尽可能的小。

此时这个问题就被转化为一个优化问题。一个常用方法就是高等数学中的求导,但是这里的问题由于参数不止一个,求导后计算导数等于0的运算量很大,所以一般来说解决这个优化问题使用的是梯度下降算法。梯度下降算法每次计算参数在当前的梯度,然后让参数向着梯度的反方向前进一段距离,不断重复,直到梯度接近零时截止。一般这个时候,所有的参数恰好达到使损失函数达到一个最低值的状态。

在神经网络模型中,由于结构复杂,每次计算梯度的代价很大。因此还需要使用反向传播算法。反向传播算法是利用了神经网络的结构进行的计算。不一次计算所有参数的梯度,而是从后往前。首先计算输出层的梯度,然后是第二个参数矩阵的梯度,接着是中间层的梯度,再然后是第一个参数矩阵的梯度,最后是输入层的梯度。计算结束以后,所要的两个参数矩阵的梯度就都有了。

反向传播算法(BP) 计算损失函数的梯度

基本结构:
一种常见的多层网络结构的前馈网络由三部分构成,
1. 输入层(Input layer),众多神经元(Neuron)接受大量非线性输入消息。输入的消息称为输入向量。
2. 输出层(Output layer),消息在神经元链接中传输、分析、权衡,形成输出结果。输出的消息成为输出向量。
3. 隐藏层(Hidden layer),简称“隐层”,是输入层和输出层之间众多神经元和链接做成的各个层面。一层可以有一层或多层。隐藏的节点(神经元)数目不定,但数目越多神经网络的非线性越显著,从而神经网络的强健性(控制系统在一定结构、大小等的参数摄动下,维持某些性能的特性)越显著。习惯上会选输入节点1.2至1.5倍的节点。

这种网络一般称为感知器(对单隐藏层)或多层感知器(对多隐藏层),神经网络的类型已经演变出很多种,这种分层的结构也并不是对所有的神经网络都适用。

学习过程

通过训练样本的校正,对各个层的权重进行校正(learing)而创建模型的过程,称为自动学习过程(training algorithm).具体的学习方法则因网络结构和模型不同而不同,常用反向传播算法(以output利用一次微分来修正weight)来验证。

种类

人工神经网络分类为以下两种:
1. 依学习策略(Algorithm)分类主要有:
* 监督式学习网络(Supervised Learning Network)为主
* 无监督式学习网络(Unsupervised Learning Network)
* 混合式学习网络(Hybrid Learning Network)
* 联想式学习网络(Associate Learning Network)
* 最适化学习网络(Optimization Application Network)
2. 依网络架构(Connectionism)分类主要有:
* 前馈神经网络(Feed Forward Network)
* 递归神经网络(Recurrent Network)
* 强化式架构(Reinforcement Network)

前馈神经网络

前馈神经网络(英文:Feedforward Neural Network),为人工智能领域中,最早发明的简单人工神经网络类型。在它内部,参数从输入层向输出层单向传播。有异于递归神经网络,它的内部不会构成有向环。

FNN由一个输入层、一个(浅层网络)或多个(深层网络,因此叫作深度学习)隐藏层,和一个输出层构成。每个层(除输出层以外)与下一层连接。这种连接是 FNN 架构的关键,具有两个主要特征:加权平均值和激活函数。

其中,卷积神经网络(CNN) 是一种典型的深度前馈神经网络,对于大规模图像处理有出色表现。

卷积神经网络

卷积神经网络由一个或多个卷积层和顶端的全连通层(对应经典的神经网络)组成,同时也包括关联权重和池化层(pooling layer)。这一结构使得卷积神经网络能够利用输入数据的二维结构。与其他深度学习结构相比,卷积神经网络在图像和语音识别方面能够给出更好的结果。这一模型也可以使用反向传播算法进行训练。相比较其他深度、前馈神经网络,卷积神经网络需要考量的参数更少,使之成为一种颇具吸引力的深度学习结构。

结构
卷积层

卷积层是一组平行的特征图(feature map),它通过在输入图像上滑动不同的卷积核并运行一定的运算而组成。此外,在每一个滑动的位置上,卷积核与输入图像之间会运行一个元素对应乘积并求和的运算以将感受野内的信息投影到特征图中的一个元素。这一滑动的过程可称为步幅 Z_s,步幅 Z_s 是控制输出特征图尺寸的一个因素。卷积核的尺寸要比输入图像小得多,且重叠或平行地作用于输入图像中,一张特征图中的所有元素都是通过一个卷积核计算得出的,也即一张特征图共享了相同的权重和偏置项。

线性整流层

它可以增强判定函数和整个神经网络的非线性特性,而本身并不会改变卷积层。

池化层

池化(Pooling)是卷积神经网络中另一个重要的概念,它实际上是一种形式的降采样。有多种不同形式的非线性池化函数,而其中“最大池化(Max pooling)”是最为常见的。


它是将输入的图像划分为若干个矩形区域,对每个子区域输出最大值。直觉上,这种机制能够有效地原因在于,在发现一个特征之后,它的精确位置远不及它和其他特征的相对位置的关系重要。池化层会不断地减小数据的空间大小,因此参数的数量和计算量也会下降,这在一定程度上也控制了过拟合。通常来说,CNN的卷积层之间都会周期性地插入池化层。

池化层通常会分别作用于每个输入的特征并减小其大小。当前最常用形式的池化层是每隔2个元素从图像划分出2X2的区块,然后对每个区块中的4个数取最大值。这将会减少75%的数据量。

除了最大池化之外,池化层也可以使用其他池化函数,例如“平均池化”甚至“L2-范数池化”等。过去,平均池化的使用曾经较为广泛,但是最近由于最大池化在实践中的表现更好,平均池化已经不太常用。由于池化层过快地减少了数据的大小,当前文献中的趋势是使用较小的池化滤镜,甚至不再使用池化层。

递归神经网络

因为神经网络的输入层单元个数是固定的,因此必须用循环或者递归的方式来处理长度可变的输入。

循环神经网络实现了前者,通过将长度不定的输入分割为等长度的小块,然后再依次的输入到网络中,从而实现了神经网络对变长输入的处理。一个典型的例子是,当我们处理一句话的时候,我们可以把一句话看作是词组成的序列,然后,每次向循环神经网络输入一个词,如此循环直至整句话输入完毕,循环神经网络将产生对应的输出。如此,我们就能处理任意长度的句子了。

递归神经网络可以把一个树/图结构信息编码为一个向量,也就是把信息映射到一个语义向量空间中。

这个语义向量空间满足某类性质,比如语义相似的向量距离更近。也就是说,如果两句话(尽管内容不同)它的意思是相似的,那么把它们分别编码后的两个向量的距离也相近;反之,如果两句话的意思截然不同,那么编码后向量的距离则很远。

尽管递归神经网络具有更为强大的表示能力,但是在实际应用中并不太流行。其中一个主要原因是,递归神经网络的输入是树/图结构,而这种结构需要花费很多人工去标注。想象一下,如果我们用循环神经网络处理句子,那么我们可以直接把句子作为输入。然而,如果我们用递归神经网络处理句子,我们就必须把每个句子标注为语法解析树的形式,这无疑要花费非常大的精力。很多时候,相对于递归神经网络能够带来的性能提升,这个投入是不太划算的。

递归神经网络的输入是两个子节点(也可以是多个),输出就是将这两个子节点编码后产生的父节点,父节点的维度和每个子节点是相同的。如下图所示:

c1和c2分别是表示两个子节点的向量,p是表示父节点的向量。子节点和父节点组成一个全连接神经网络,也就是子节点的每个神经元都和父节点的每个神经元两两相连。我们用矩阵w表示这些连接上的权重,它的维度将是dX2d,其中,表示每个节点的维度。

我们把产生的父节点的向量和其他子节点的向量再次作为网络的输入,再次产生它们的父节点。如此递归下去,直至整棵树处理完毕。最终,我们将得到根节点的向量,我们可以认为它是对整棵树的表示,这样我们就实现了把树映射为一个向量。在下图中,我们使用递归神经网络处理一棵树,最终得到的向量,就是对整棵树的表示:

更多递归神经网络见其他笔记。

mofeng

mofeng

陌风小同学爱科技、爱文艺、也爱生活!

2 Comments

  • image

    文科狗认为您的知识体系可以表现地更清晰些。and代码不会,靴靴。

  • image

    文章写得真好,排版真不错,看得出来博主是个用心的人

留下你的评论

*评论支持代码高亮<pre class="prettyprint linenums">代码</pre>

相关推荐

暂无内容!