CMS程序网 加入收藏  -  设为首页
您的位置:CMS程序网 > 知识库 > 正文
(BP进阶1)从M-P模型到BP神经网络
(BP进阶1)从M-P模型到BP神经网络
提示:

(BP进阶1)从M-P模型到BP神经网络

经过两天的研究,终于更加清晰地搞明白了所谓BP,做此记录。

M-P模型,其实就是按照生物神经元的结构和工作原理来构造出来的比较简单的模型。下图为M-P模型的示意图:

具体的推论详见 http://blog.csdn.net/u013007900/article/details/50066315
抛去繁重的公式,我们可以把这个模型理解为:
要想下一个神经元接收到信息,那么接收到的信号一定要大于某一个阙值θ才能由输出信号yj输出,该阙值由具体的神经元决定;也就是说,输入的信号总和在经过神经元后失去了阙值θ的信号以后,转化为输出信号输出。
我们假每一个输出信号x都输入一定的神经元Wij,那么该神经元共接收到的输入信号即为



这个公式不难理解,于是在神经元中失去了阙值量θ后:

经过信号转化(激活函数f(x)的作用)为输出信号:

然而神经元突触的信号类型又分为兴奋和抑制两种状态,于是,在M-P模型中,这种性质体现为权值w的正负,如果权值是负,那么输出y值就也为负,体现为抑制状态;如果权值是正,那么输出y值就也为正,体现为兴奋状态。

这种“阈值加权和”的神经元模型称为M-P模型 ( McCulloch-Pitts Model ),也称为神经网络的一个处理单元( PE, Processing Element )。

常用的激活函数有五种:
线性激活函数:












非线性激活函数:












在进行BP神经网络进行训练的时候,我们常用的函数是S形函数。

简单来说,感知器就是一个简单的神经网络模型,以下是感知器的拓扑结构图:





而oi表现形式为两种,1和-1,来表示兴奋和抑制。









因此,单层感知器的作用为可以使用一条直线来对输入数据进行线性分类,如果仍旧不太明白的话,可以从公式入手来进行分析:








所以可以得知,这是一个关于x1,x2的线性函数,而在图1中用于分类的红色直线,则是与函数w1j x1+w2j x2-θj=0成线性关系的函数。

到此,我们已经讲解了单层感知器的实现分类原理,引入多层分类器的原因在于,单层感知器的局限性只能区分二维平面中的线性函数,而对于多维平面,或着非线性函数来说,则无法实现分类。




可以看出,在加入了隐层以后输入层的数据不再直接经过简单的权值激活运算就直接进入输出层,而是在多层的隐层经过复杂计算后,再输入层输出,这样的计算方法,可以保证输出的o和输入信号x1,x2,不再是简单的线性关系,而其中的计算也将会随着隐层的增加而无限度地复杂化。
我们可以比较一下单层感知器和多层感知器的分类能力:

由上图可以看出,随着隐层层数的增多,凸域将可以形成任意的形状,因此可以解决任何复杂的分类问题。实际上,Kolmogorov理论指出:双隐层感知器就足以解决任何复杂的分类问题。
异或问题的解决:

在M-P模型中,我们得知,为了实现有效的分类,需要加入一定数量的隐层来加强算法的复杂性,而在隐层内部的计算我们是无法得知的,因此,我们需要进行神经网络的训练。
这样说可能有点突兀,我们不妨这样想,我们已知的是一组数据和它们相对应的分类状况,求解的是如何可以用同类的数据来得到正确的分类。
或者这样说,我们已知:
x1=2,x2=3时,y=5,x1=4,x2=5时,y=9,那么,求解x1=8,x2=0时,y的值,这样是不是好理解很多?
总之,我们需要的是一个可以满足当前条件的“公式”,让它可以计算出更多的数据,这在我们的小学数学里叫做解算式,在这里就可以叫做训练。
我们需要知道这些数据在隐层里是经过怎样的计算,才得到了输出结果,于是,我们需要先进性数据的训练,然后再根据现有未知结果的数据套进去,得到预期结果。
而我们在这里,得出的所谓隐层结构的计算,就是需要训练出的“公式”。
具体的BP训练方式下次更新。

bp神经网络算法介绍
提示:

bp神经网络算法介绍

  1、BP(Back Propagation)网络是1986年由Rumelhart和McCelland为首的科学家小组提出,是一种按误差逆传播算法训练的多层前馈网络,是应用最广泛的神经网络模型之一。BP网络能学习和存贮大量的输入-输出模式映射关系,而无需事前揭示描述这种映射关系的数学方程。它的学习规则是使用最速下降法,通过反向传播来不断调整网络的权值和阈值,使网络的误差平方和最小。BP神经网络模型拓扑结构包括输入层(input)、隐层(hide layer)和输出层(output layer)。

  2、BP神经网络算法是在BP神经网络现有算法的基础上提出的,是通过任意选定一组权值,将给定的目标输出直接作为线性方程的代数和来建立线性方程组,解得待求权,不存在传统方法的局部极小及收敛速度慢的问题,且更易理解。

卷积神经网络算法是什么?
提示:

卷积神经网络算法是什么?

一维构筑、二维构筑、全卷积构筑。 卷积神经网络(Convolutional Neural Networks, CNN)是一类包含卷积计算且具有深度结构的前馈神经网络(Feedforward Neural Networks),是深度学习(deep learning)的代表算法之一。 卷积神经网络具有表征学习(representation learning)能力,能够按其阶层结构对输入信息进行平移不变分类(shift-invariant classification),因此也被称为“平移不变人工神经网络(Shift-Invariant Artificial Neural Networks, SIANN)”。 卷积神经网络的连接性: 卷积神经网络中卷积层间的连接被称为稀疏连接(sparse connection),即相比于前馈神经网络中的全连接,卷积层中的神经元仅与其相邻层的部分,而非全部神经元相连。具体地,卷积神经网络第l层特征图中的任意一个像素(神经元)都仅是l-1层中卷积核所定义的感受野内的像素的线性组合。 卷积神经网络的稀疏连接具有正则化的效果,提高了网络结构的稳定性和泛化能力,避免过度拟合,同时,稀疏连接减少了权重参数的总量,有利于神经网络的快速学习,和在计算时减少内存开销。 卷积神经网络中特征图同一通道内的所有像素共享一组卷积核权重系数,该性质被称为权重共享(weight sharing)。权重共享将卷积神经网络和其它包含局部连接结构的神经网络相区分,后者虽然使用了稀疏连接,但不同连接的权重是不同的。权重共享和稀疏连接一样,减少了卷积神经网络的参数总量,并具有正则化的效果。 在全连接网络视角下,卷积神经网络的稀疏连接和权重共享可以被视为两个无限强的先验(pirior),即一个隐含层神经元在其感受野之外的所有权重系数恒为0(但感受野可以在空间移动);且在一个通道内,所有神经元的权重系数相同。

卷积神经网络
提示:

卷积神经网络

卷积神经网络 (Convolutional Neural Networks,CNN)是一种前馈神经网络。卷积神经网络是受生物学上感受野(Receptive Field)的机制而提出的。感受野主要是指听觉系统、本体感觉系统和视觉系统中神经元的一些性质。比如在视觉神经系统中,一个神经元的感受野是指视网膜上的特定区域,只有这个区域内的刺激才能够激活该神经元。 卷积神经网络又是怎样解决这个问题的呢?主要有三个思路: 在使用CNN提取特征时,到底使用哪一层的输出作为最后的特征呢? 答:倒数第二个全连接层的输出才是最后我们要提取的特征,也就是最后一个全连接层的输入才是我们需要的特征。 全连接层会忽视形状。卷积层可以保持形状不变。当输入数据是图像时,卷积层会以3维数据的形式接收输入数据,并同样以3维数据的形式输出至下一层。因此,在CNN中,可以(有可能)正确理解图像等具有形状的数据。 CNN中,有时将 卷积层的输入输出数据称为特征图(feature map) 。其中, 卷积层的输入数据称为输入特征图(input feature map) , 输出数据称为输出特征图(output feature map)。 卷积层进行的处理就是 卷积运算 。卷积运算相当于图像处理中的“滤波器运算”。 滤波器相当于权重或者参数,滤波器数值都是学习出来的。 卷积层实现的是垂直边缘检测 。 边缘检测实际就是将图像由亮到暗进行区分,即边缘的过渡(edge transitions)。 卷积层对应到全连接层,左上角经过滤波器,得到的3,相当于一个神经元输出为3.然后相当于,我们把输入矩阵拉直为36个数据,但是我们只对其中的9个数据赋予了权重。 步幅为1 ,移动一个,得到一个1,相当于另一个神经单元的输出是1. 并且使用的是同一个滤波器,对应到全连接层,就是权值共享。 在这个例子中,输入数据是有高长方向的形状的数据,滤波器也一样,有高长方向上的维度。假设用(height, width)表示数据和滤波器的形状,则在本例中,输入大小是(4, 4),滤波器大小是(3, 3),输出大小是(2, 2)。另外,有的文献中也会用“核”这个词来表示这里所说的“滤波器”。 对于输入数据,卷积运算以一定间隔滑动滤波器的窗口并应用。这里所说的窗口是指图7-4中灰色的3 × 3的部分。如图7-4所示,将各个位置上滤 波器的元素和输入的对应元素相乘,然后再求和(有时将这个计算称为乘积累加运算)。然后,将这个结果保存到输出的对应位置。将这个过程在所有位置都进行一遍,就可以得到卷积运算的输出。 CNN中,滤波器的参数就对应之前的权重。并且,CNN中也存在偏置。 在进行卷积层的处理之前,有时要向输入数据的周围填入固定的数据(比如0等),这称为填充(padding),是卷积运算中经常会用到的处理。比如,在图7-6的例子中,对大小为(4, 4)的输入数据应用了幅度为1的填充。“幅度为1的填充”是指用幅度为1像素的0填充周围。 应用滤波器的位置间隔称为 步幅(stride) 。 假设输入大小为(H, W),滤波器大小为(FH, FW),输出大小为(OH, OW),填充为P,步幅为S。 但是所设定的值必须使式(7.1)中的 和 分别可以除尽。当输出大小无法除尽时(结果是小数时),需要采取报错等对策。顺便说一下,根据深度学习的框架的不同,当值无法除尽时,有时会向最接近的整数四舍五入,不进行报错而继续运行。 之前的卷积运算的例子都是以有高、长方向的2维形状为对象的。但是,图像是3维数据,除了高、长方向之外,还需要处理通道方向。 在3维数据的卷积运算中,输入数据和滤波器的通道数要设为相同的值。 因此,作为4维数据,滤波器的权重数据要按(output_channel, input_channel, height, width)的顺序书写。比如,通道数为3、大小为5 × 5的滤 波器有20个时,可以写成(20, 3, 5, 5)。 对于每个通道,均使用自己的权值矩阵进行处理,输出时将多个通道所输出的值进行加和即可。 卷积运算的批处理,需要将在各层间传递的数据保存为4维数据。具体地讲,就是按(batch_num, channel, height, width)的顺序保存数据。 这里需要注意的是,网络间传递的是4维数据,对这N个数据进行了卷积运算。也就是说,批处理将N次的处理汇总成了1次进行。 池化是缩小高、长方向上的空间的运算。比如,如图7-14所示,进行将2 × 2的区域集约成1个元素的处理,缩小空间大小。 图7-14的例子是按步幅2进行2 × 2的Max池化时的处理顺序。“Max池化”是获取最大值的运算,“2 × 2”表示目标区域的大小。如图所示,从 2 × 2的区域中取出最大的元素。此外,这个例子中将步幅设为了2,所以2 × 2的窗口的移动间隔为2个元素。另外,一般来说,池化的窗口大小会和步幅设定成相同的值。比如,3 × 3的窗口的步幅会设为3,4 × 4的窗口的步幅会设为4等。 除了Max池化之外,还有Average池化等。相对于Max池化是从目标区域中取出最大值,Average池化则是计算目标区域的平均值。 在图像识别领域,主要使用Max池化。 因此,本书中说到“池化层”时,指的是Max池化。 池化层的特征 池化层有以下特征。 没有要学习的参数 池化层和卷积层不同,没有要学习的参数。池化只是从目标区域中取最大值(或者平均值),所以不存在要学习的参数。 通道数不发生变化 经过池化运算,输入数据和输出数据的通道数不会发生变化。如图7-15所示,计算是按通道独立进行的。 ​ 对微小的位置变化具有鲁棒性(健壮) ​ 输入数据发生微小偏差时,池化仍会返回相同的结果。因此,池化对输入数据的微小偏差具有鲁棒性。比如,3 × 3的池化的情况下,如图 ​ 7-16所示,池化会吸收输入数据的偏差(根据数据的不同,结果有可能不一致)。 经过卷积层和池化层之后,进行Flatten,然后丢到全连接前向传播神经网络。 (找到一张图片使得某个filter响应最大。相当于filter固定,未知的是输入的图片。)未知的是输入的图片??? k是第k个filter,x是我们要找的参数。?这里我不是很明白。我得理解应该是去寻找最具有代表性的特征。 使用im2col来实现卷积层 卷积层的参数是需要学习的,但是池化层没有参数需要学习。全连接层的参数需要训练得到。 池化层不需要训练参数。全连接层的参数最多。卷积核的个数逐渐增多。激活层的size,逐渐减少。 最大池化只是计算神经网络某一层的静态属性,没有什么需要学习的,它只是一个静态属性 。 像这样展开之后,只需对展开的矩阵求各行的最大值,并转换为合适的形状即可(图7-22)。 参数 • input_dim ― 输入数据的维度:( 通道,高,长 ) • conv_param ― 卷积层的超参数(字典)。字典的关键字如下: filter_num ― 滤波器的数量 filter_size ― 滤波器的大小 stride ― 步幅 pad ― 填充 • hidden_size ― 隐藏层(全连接)的神经元数量 • output_size ― 输出层(全连接)的神经元数量 • weitght_int_std ― 初始化时权重的标准差 LeNet LeNet在1998年被提出,是进行手写数字识别的网络。如图7-27所示,它有连续的卷积层和池化层(正确地讲,是只“抽选元素”的子采样层),最后经全连接层输出结果。 和“现在的CNN”相比,LeNet有几个不同点。第一个不同点在于激活函数。LeNet中使用sigmoid函数,而现在的CNN中主要使用ReLU函数。 此外,原始的LeNet中使用子采样(subsampling)缩小中间数据的大小,而现在的CNN中Max池化是主流。 AlexNet 在LeNet问世20多年后,AlexNet被发布出来。AlexNet是引发深度学习热潮的导火线,不过它的网络结构和LeNet基本上没有什么不同,如图7-28所示。 AlexNet叠有多个卷积层和池化层,最后经由全连接层输出结果。虽然结构上AlexNet和LeNet没有大的不同,但有以下几点差异。 • 激活函数使用ReLU。 • 使用进行局部正规化的LRN(Local Response Normalization)层。 • 使用Dropout TF2.0实现卷积神经网络 valid意味着不填充,same是填充 or the SAME padding, the output height and width are computed as: out_height = ceil(float(in_height) / float(strides[1])) out_width = ceil(float(in_width) / float(strides[2])) And For the VALID padding, the output height and width are computed as: out_height = ceil(float(in_height - filter_height + 1) / float(strides[1])) out_width = ceil(float(in_width - filter_width + 1) / float(strides[2])) 因此,我们可以设定 padding 策略。在 tf.keras.layers.Conv2D 中,当我们将 padding 参数设为 same 时,会将周围缺少的部分使用 0 补齐,使得输出的矩阵大小和输入一致。