文章目录
- 前馈神经网络
- 1. 单层前馈神经网络(单层感知器)
- 2. 多层感知器
- 反馈神经网络
- 径向基函数网络(RBF网络)
- 1. 径向基函数
- 2. 径向基函数网络的结构
- 3. 径向基函数网络原理
- Hopfield网络
- 1. Hopfield网络结构
- 2. Hopfield神经网络的两种工作方式
- RBM
- 1. 玻尔兹曼机 (Boltzman Machine, BM)
- 2. 受限玻尔兹曼机(Restricted BM, RBM)
- CNN
- 1. 卷积层
- 2. 池化层
- 3. 全连接层
- Autoencoder
- RNN
- 1. 基本循环神经网络
- 2. 双向循环神经网络
- 3. 循环神经网络的训练
- LSTM
参考了国科大模式识别课程的课件,课件链接是:链接:https://pan.baidu.com/s/1KNlLHgngR9-TtF_5WMK6IA 提取码:lofm
前馈神经网络
1. 单层前馈神经网络(单层感知器)
感知器的结构
单隐层前馈神经网络由输入层、隐含层、输出层组成。如下图所示。
- 该网络由个输入结点(包含一个 bais 结点)和一个含有
- 输入向量:,(齐次坐标)
- 输出向量:
- 权重集合:
- 对于输出层结点,其输入加权和为:,其中,
- 对于输出结点,其输出值 为:
- 其中 为结点
感知器的训练
- 学习任务是:确定网络各个联接权重。给定训练样本 及其目标值 ,当网络训练完成后(即权重参数均得到确定后),期望:
- 若激活函数是符号单元,其训练思路是:
• 将输入向量加到网络上,并计算其网络输出;
• 考虑每一个权重如果其网络输出与目标值相同,则保持连接到该结点的权重值不变;
• 如果不是,则按照Hebb规则修改各权重值:
– 每个权重 的修正量正比于其所连接的两个结点的输出的乘积(注:对于输入层结点,输出等于输入)
– 经过有限次迭代可使误差达到最小,即 。
– 收敛的速度(迭代次数)与初始 和 有关,收敛后的权值也不是唯一的。
– 在实际中
2. 多层感知器
反馈神经网络
梯度下降法需要计算损失函数对参数的偏导数,如果通过链式法则逐一对每个参数进行求偏导效率比较低。在神经网络的训练中经常使用反向传播算法来高效的计算梯度。
误差反向传播(BP)算法的基本原理是:利用输出后的误差来估计输出层的前一层的误差,再用这个误差估计更前一层的误差,如此一层一层地反传下去,从而获得所有其它各层的误差估计。BP算法核心是梯度下降法。权重先从输出层开始修正,再依次修正各层权重:
• 首先修正“输出层至最后一个隐含层”的连接权重
• 再修正“最后一个隐含层至倒数第二个隐含层”的连接权重,….
• 最后修正“第一隐含层至输入层”的连接权重。
例子示意,本文截取:来说明问题。
这里介绍的是计算完一条记录,就马上更新权重,以后每计算完一条都即时更新权重。实际上批量更新的效果会更好,方法是在不更新权重的情况下,把记录集的每条记录都算过一遍,把要更新的增值全部累加起来求平均值,然后利用这个平均值来更新一次权重,然后利用更新后的权重进行下一轮的计算,这种方法叫批量梯度下降(Batch Gradient Descent)。
对于多层神经网络,最典型的训练算法就是BP训练算法,它使多层网络的应用范围大大扩展。
BP训练算法也存在一些不大令人满意的地方,如在训练过程中,有时会陷入局部最小,或收敛太
慢,甚至出现“麻痹现象”等。克服这些问题也是人工神经网络的研究课题之一。
径向基函数网络(RBF网络)
对于径向基函数网络:
- 对模式分类或函数近似任务,径向基函数是一个较好的网络模型
- 与多层神经网络相似,RBF可以对任意连续的非线性函数进行近似,可以处理系统内的难以解析的规律性
- 收敛速度比通常的多层神经网络更快
RBFNN全称为:Radial Basis Function Neyral Network。中文名为径向基函数神经网络。不如我们先从径向基函数开始我们的介绍。
1. 径向基函数
参考百度百科的解释:径向基函数是一个取值仅仅依赖于离原点距离的实值函数,也就是,或者还可以是到任意一点的距离,点称为中心点,也就是。任意一个满足 特性的函数
总结一下,某个点的径向基函数的取值只与该点距离中心点的距离有关。
2. 径向基函数网络的结构
径向基函数神经网络(RBFNN)只有三层,第一层为输入层,第二层为隐藏层,第三层为输出层。
输入层到隐藏层的神经元之间的权重全部为1。
隐藏层是使用径向基函数作为激活函数的神经元。
隐藏层与输出层之间就是普通的神经网络的连接关系,他们之间的权重可以训练而改变。
从输入空间到隐层空间的变换是非线性的,而从隐层空间到输出层空间变换是线性的。
3. 径向基函数网络原理
RBF网络的基本思想是:用RBF作为隐单元的“基”构成隐含层空间,这样就可以将输入矢量直接映射到隐空间,而不需要通过权连接。当RBF的中心点确定以后,这种映射关系也就确定了。而隐含层空间到输出空间的映射是线性的,即网络的输出是隐单元输出的线性加权和,此处的权即为网络可调参数。其中,隐含层的作用是把向量从低维度的p映射到高维度的h,这样低维度线性不可分的情况到高维度就可以变得线性可分了,主要就是核函数的思想。这样,网络由输入到输出的映射是非线性的,而网络输出对可调参数而言却又是线性的。网络的权就可由线性方程组直接解出,从而大大加快学习速度并避免局部极小问题。
RBF神经网络的学习问题
求解的参数有3个:基函数的中心、方差以及隐含层到输出层的权值。
(1) 自组织选取中心学习方法:
第一步:无监督学习过程,求解隐含层基函数的中心与方差
第二步:有监督学习过程,求解隐含层到输出层之间的权值
首先,选取h个中心做k-means聚类,对于高斯核函数的径向基,方差由公式求解: ,为所选取中心点之间的最大距离。
隐含层至输出层之间的神经元的连接权值可以用最小二乘法直接计算得到,即对损失函数求解关于的偏导数,使其等于,可以化简得到计算公式为:
(2)直接计算法
隐含层神经元的中心是随机地在输入样本中选取,且中心固定。一旦中心固定下来,隐含层神经元的输出便是已知的,这样的神经网络的连接权就可以通过求解线性方程组来确定。适用于样本数据的分布具有明显代表性。
(3)有监督学习算法
通过训练样本集来获得满足监督要求的网络中心和其他权重参数,经历一个误差修正学习的过程,与BP网络的学习原理一样,同样采用梯度下降法。因此RBF同样可以被当作BP神经网络的一种。
参考链接:http://read.pudn.com/downloads110/sourcecode/others/454289/Paper/pdf/y9935500004.pdf
另外,关于其优化:网络结构的简化
- 从输入层到隐含层相当于将数据映射到一个更高维的特征空间,在该空间内数据可能线性可分。因此,通常来讲,隐含层的结点个数应该大于输入层结点的个数。但对于大规模数据,通常仍然比数据个数小很多。
- 对于大规模数据,隐含层的结点个数会很大。采用聚类技术对数据进行聚类,每个隐含层结点代表一个聚类中心。这样简化了网络规模,提高计算效率。
- 经过聚类处理,还会防止 overfitting,增强网络的泛化能力,提高精度。
Hopfield网络
按照神经网络运行过程中的信息流向分类:可以分为前馈网络和反馈网络。
前馈网络通过许多具有简单处理能力的神经元的复合作用,使整个网络具有复杂的非线性映射能力。
反馈网络通过网络神经元状态的变迁,最终稳定于某一状态,得到联想存储或神经计算的结果。
**典型的(应用广泛的)反馈神经网络:Hopfield网络、受限Boltzman机(RBM)。**反馈网络具有一般非线性系统的许多性质,如稳定性、各种类型的吸引子以及混沌现象,等等。
接下来讲讲Hopfield网络,Hopfield神经网络分为离散型和连续型两种网络模型,分别记为DHNN(Discrete Hopfield Neural Network)和CHNN(Continues Hopfield Neural Network)。我们以离散型的网络为例。下面没有特殊说明,均为离散型的网络。
1. Hopfield网络结构
网络结构上,Hopfield神经网络是一种单层互相全连接的反馈型神经网络。每个神经元既是输入也是输出,网络中的每一个神经元都将自己的输出通过连接权传送给所有其它神经元,同时又都接收所有其它神经元传递过来的信息。即:网络中的神经元在t时刻的输出状态实际上间接地与自己t-1时刻的输出状态有关。神经元之间互连接,所以得到的权重矩阵将是对称矩阵。
2. Hopfield神经网络的两种工作方式
RBM
1. 玻尔兹曼机 (Boltzman Machine, BM)
首先了解一下什么是玻尔兹曼机 (Boltzman Machine, BM) ,它是一种随机的Hopefield网络,但它是具有隐单元的反馈互联网络。
- Hopfield网络的神经元的结构功能及其在网络中的地位是一样的。
但BM中一部分神经元与外部相连,可以起到网络的输入、输出功能,或者严格地说可以受到外部条件的约束。另一部分神经元则不与外部相连,因而属于隐单元 - 神经元的状态为0或1的概率取决于相应的输入。
2. 受限玻尔兹曼机(Restricted BM, RBM)
这是一种可通过输入数据集学习概率分布的随机生成神经网络。
- 具有两层结构,层内结点不相连,信息可双向流动
- 包含可视结点层 (与外界相连)和隐含层 (状态层)
上面一层神经元组成隐藏层(hidden layer), 用 向量隐藏层神经元的值。下面一层的神经元组成可见层(visible layer),用 向量表示可见层神经元的值。隐藏层和可见层之间是全连接的,这点和DNN类似, 隐藏层神经元之间是独立的,可见层神经元之间也是独立的。连接权重可以用矩阵 表示。和DNN的区别是,RBM不区分前向和反向,可见层的状态可以作用于隐藏层,而隐藏层的状态也可以作用于可见层。隐藏层的偏倚系数是向量 ,而可见层的偏倚系数是向量 。
常用的RBM一般是二值的,即不管是隐藏层还是可见层,它们的神经元的取值只为 或者 。本文只讨论二值RBM。总结下RBM模型结构的结构:主要是权重矩阵 , 偏倚系数向量 和 ,隐藏层神经元状态向量 和可见层神经元状态向量 。
CNN
卷积神经网络分为三层:卷积层、池化层、全连接层。下面分开进行介绍。
1. 卷积层
**局部感知:**人的大脑识别图片的过程中,并不是一下子整张图同时识别,而是对于图片中的每一个特征首先局部感知,然后更高层次对局部进行综合操作,从而得到全局信息。
卷积层使用卷积核进行局部感知。举个例子来讲,一个32×32×3的RGB图经过一层5×5×3的卷积后变成了一个28×28×1的特征图,那么输入层共有32×32×3=3072个神经元,第一层隐层会有28×28=784个神经元,这784个神经元对原输入层的神经元只是局部连接。
如下图所示的卷积操作:
每一层的卷积核大小和个数可以自己定义,不过一般情况下,根据实验得到的经验来看,会在越靠近输入层的卷积层设定少量的卷积核,越往后,卷积层设定的卷积核数目就越多。
2. 池化层
**池化(Pooling):**也称为欠采样或下采样。主要用于特征降维,压缩数据和参数的数量,减小过拟合,同时提高模型的容错性。主要有:
- Max Pooling:最大池化
- Average Pooling:平均池化
通过上一层的卷积核操作后,我们将原始图像由的尺寸变为了的一个新的图片。池化层的主要目的是通过降采样的方式,在不影响图像质量的情况下,压缩图片,减少参数。简单来说,假设现在设定池化层采用MaxPooling,大小为,步长为,取每个窗口最大的数值重新,那么图片的尺寸就会由变为。从上例来看,会有如下变换:
每一个卷积核可以看做一个特征提取器,不同的卷积核负责提取不同的特征,我们例子中设计的第一个卷积核能够提取出“垂直”方向的特征,第二个卷积核能够提取出“水平”方向的特征,那么我们对其进行Max Pooling操作后,提取出的是真正能够识别特征的数值,其余被舍弃的数值,对于我提取特定的特征并没有特别大的帮助。那么在进行后续计算使,减小了feature map的尺寸,从而减少参数,达到减小计算量,缺不损失效果的情况。
不过并不是所有情况Max Pooling的效果都很好,有时候有些周边信息也会对某个特定特征的识别产生一定效果,那么这个时候舍弃这部分“不重要”的信息,就不划算了。所以具体情况得具体分析,如果加了Max Pooling后效果反而变差了,不如把卷积后不加Max Pooling的结果与卷积后加了Max Pooling的结果输出对比一下,看看Max Pooling是否对卷积核提取特征起了反效果。
3. 全连接层
到这一步,其实我们的一个完整的“卷积部分”就算完成了,如果想要叠加层数,一般也是叠加“Conv-MaxPooing",通过不断的设计卷积核的尺寸,数量,提取更多的特征,最后识别不同类别的物体。做完Max Pooling后,我们就会把这些数据“拍平”,丢到Flatten层,然后把Flatten层的output放到full connected Layer里,采用softmax对其进行分类。
Autoencoder
自编码器AutoEncoder是一种尽可能复现输入信号的神经网络。为了实现这种复现,自动编码器就必须捕捉可以代表输入数据的最重要的因素,就像PCA那样,找到可以代表原信息的主要成分。
神经网络,例如多层感知机中,输入经过隐层变换之后,得到一个输出,然后计算与target(或label)之间的差异去改变前面各层的参数,直到收敛,这个过程就是著名的BP网络思想,如上图所示。但是自动编码器与之不同的是,我们没有target,那么怎么训练呢?
如上图所示,自动编码器AutoEncoder中将输入input输入一个编码器encoder,得到一个中间的向量表示code,这个code也就是输入的一个表示,那我们怎么知道code表示的就是input呢?我们将code输入到解码器decoder中,得到一个输出,如果这个输出与输入input很像的话,那我们就可以相信这个中间向量code跟输入是存在某种关系的,也就是存在某种映射,那么这个中间向量code就可以作为输入的一个特征向量。我们通过调整encoder和decoder的参数,使得输入和最后的输出之间的误差最小,这时候code就是输入input的一个表示。
将自动编码器应用到有监督的分类任务:
当然,上面的训练过程是无监督的,因为输入和最终的target都是输入input,我们可以通过训练来得到输入的一个向量表示。如果想要将AutoEncoder应用到有监督的分类任务中,则可以采用下面的结构:
输入input可以经过多层encoder-decoder得到向量表示,然后可以在最后一层添加一个分类器,例如逻辑回归、SVM、随机森林,或者神经网络中的softmax。通过有标签的样本可以训练调整整个网络中的参数,AutoEncoder过程可以通过有监督的训练过程调整参数,也可以不调整。
RNN
1. 基本循环神经网络
RNN(Recurrent Neural Network)是一类用于处理序列数据的神经网络。下图是一个简单的循环神经网络如,它由输入层、一个隐藏层和一个输出层组成:
下面进行理解:如果把上面有的那个带箭头的圈去掉,它就变成了最普通的全连接神经网络。是一个向量,它表示输入层的值;是一个向量,它表示隐藏层的值;是输入层到隐藏层的权重矩阵;也是一个向量,它表示输出层的值;是隐藏层到输出层的权重矩阵。
那么,现在我们来看看是什么。循环神经网络的隐藏层的值不仅仅取决于当前这次的输入,还取决于上一次隐藏层的值。权重矩阵就是隐藏层上一次的值作为这一次的输入的权重。
如果我们把上面的图展开,循环神经网络也可以画成下面这个样子:
现在看上去就比较清楚了,这个网络在时刻接收到输入之后,隐藏层的值是,输出值是。关键一点是,的值不仅仅取决于,还取决于。我们可以用下面的公式来表示循环神经网络的计算方法:
式1:
式2:
式1是输出层的计算公式,输出层是一个全连接层,也就是它的每个节点都和隐藏层的每个节点相连。是输出层的权重矩阵,是激活函数。式2是隐藏层的计算公式,它是循环层。是输入的权重矩阵,是上一次的值作为这一次的输入的权重矩阵,是激活函数。
从上面的公式我们可以看出,循环层和全连接层的区别就是循环层多了一个权重矩阵。
如果反复把式2带入到式1,我们将得到:
从上面可以看出,循环神经网络的输出值,是受前面历次输入值、、、、…影响的,这就是为什么循环神经网络可以往前看任意多个输入值的原因。
2. 双向循环神经网络
从上图可以看出,双向卷积神经网络的隐藏层要保存两个值,一个参与正向计算,另一个值参与反向计算。最终的输出值取决于和。其计算方法为:
和的计算为:
正向计算时,隐藏层的值与有关;反向计算时,隐藏层的值与有关;最终的输出取决于正向和反向计算的加和。现在,我们仿照式1和式2,写出双向循环神经网络的计算方法:
从上面三个公式我们可以看到,正向计算和反向计算不共享权重,也就是说和、和、和都是不同的权重矩阵。
3. 循环神经网络的训练
循环神经网络的训练算法:BPTT
BPTT算法是针对循环层的训练算法,它的基本原理和BP算法是一样的,也包含同样的三个步骤:
- 前向计算每个神经元的输出值;
- 反向计算每个神经元的误差项值,它是误差函数对神经元的加权输入的偏导数;
- 计算每个权重的梯度。
- 最后再用随机梯度下降算法更新权重。
详细权值的更新步骤请见:https://zybuluo.com/hanbingtao/note/541458
LSTM
基本的循环神经网络存在梯度爆炸和梯度消失问题,并不能真正的处理好长距离的依赖(虽然有一些技巧可以减轻这些问题)。事实上,真正得到广泛的应用的是循环神经网络的一个变体:长短时记忆网络。它内部有一些特殊的结构,可以很好的处理长距离的依赖。
所有循环神经网络都具有神经网络的重复模块链的形式。 在标准的RNN中,该重复模块将具有非常简单的结构,例如单个tanh层。标准的RNN网络如下图所示
LSTMs也具有这种链式结构,但是它的重复单元不同于标准RNN网络里的单元只有一个网络层,它的内部有四个网络层。LSTMs的结构如下图所示。
在解释LSTMs的详细结构时先定义一下图中各个符号的含义,符号包括下面几种
图中黄色类似于CNN里的激活函数操作,粉色圆圈表示点操作,单箭头表示数据流向,箭头合并表示向量的合并(concat)操作,箭头分叉表示向量的拷贝操作
细胞状态
LSTMs的核心是细胞状态,用贯穿细胞的水平线表示。
细胞状态像传送带一样。它贯穿整个细胞却只有很少的分支,这样能保证信息不变的流过整个RNNs。细胞状态如下图所示
LSTM网络能通过一种被称为门的结构对细胞状态进行删除或者添加信息。
门能够有选择性的决定让哪些信息通过。其实门的结构很简单,就是一个sigmoid层和一个点乘操作的组合。如下图所示
因为sigmoid层的输出是0-1的值,这代表有多少信息能够流过sigmoid层。0表示都不能通过,1表示都能通过。LSTM的第一步就是决定细胞状态需要丢弃哪些信息。这部分操作是通过一个称为以往门的sigmoid单元来处理的。它通过查看和信息来输出一个0-1之间的向量,该向量里面的0-1值表示细胞状态中的哪些信息保留或丢弃多少。0表示不保留,1表示都保留。遗忘门如下图所示。
下一步是决定给细胞状态添加哪些新的信息。这一步又分为两个步骤,首先,利用和通过一个称为输入门的操作来决定更新哪些信息。然后利用和通过一个tanh层得到新的候选细胞信息,这些信息可能会被更新到细胞信息中。这两步描述如下图所示。
下面将更新旧的细胞信息,变为新的细胞信息。更新的规则就是通过忘记门选择忘记旧细胞信息的一部分,通过输入门选择添加候选细胞信息的一部分得到新的细胞信息。更新操作如下图所示
更新完细胞状态后需要根据输入的和来判断输出细胞的哪些状态特征,这里需要将输入经过一个称为输出门的sigmoid层得到判断条件,然后将细胞状态经过tanh层得到一个-1~1之间值的向量,该向量与输出门得到的判断条件相乘就得到了最终该RNN单元的输出。该步骤如下图所示
还是拿语言模型来举例说明,在预测动词形式的时候,我们需要通过输入的主语是单数还是复数来推断输出门输出的预测动词是单数形式还是复数形式。
LSTM的具体训练步骤请见:https://zybuluo.com/hanbingtao/note/581764