当前位置:首页 > 9 > 正文

{打魚機}(relution)

  • 9
  • 2023-01-30 17:00:51
  • 24
摘要: 本文: 1、prelu和relu的区别和联系 2、激活函数的选择...

本文:

prelu和relu的区别和联系

可以考虑使用Keras,python写的深度神经网络库,已经实现了绝大部分神经网络,如:RNN、GRU、LSTM,CNN,Pooling,Full-Connected,以及sigmoid、tanh、Relu、PRelu、SRelu等各种激活函数。并且采用TF/Theano作为后端计算引擎,自己本身拥有一套更高层的API,可以同时跑在TF/Theano上。

激活函数的选择

“激活函数”,又称“非线性映射函数”,是深度卷积神经网络中不可或缺的关键模块。可以说,深度网络模型其强大的表示能力大部分便是由激活函数的非线性带来的。

Sigmoid型函数也称Logistic函数:

其函数形状如下图(a)所示。很明显可以看出,经过Sigmoid型函数作用后,输出响应的值域被压缩到[0, 1] 之间,而0对应了生物神经元的“抑制状态”,1则恰好对应了“兴奋状态”。但对于Sigmoid函数两端大于5(或小于−5)的区域,这部分输出会被压缩到1(或0)。这样的处理会带来梯度的“饱和效应”(saturation effect)。不妨对照Sigmoid型函数的梯度图(图(b)),大于5(或小于−5)部分的梯度接近0,这会导致在误差反向传播过程中导数处于该区域的误差很难甚至无法传递至前层,进而导致整个网络无法正常训练。

从上图(a)中可观察到Sigmoid型激活函数值域的均值并非为0,而是全为正,这样的结果实际上并不符合我们对神经网络内数值的期望(均值)应为0的设想。

tanh(x) 型函数是在Sigmoid型函数基础上为解决均值问题提出的激活函数:

tang(x) = 2S(2x)-1。tanh(x) 型函数又称作双曲正切函数(hyperbolic tangent function),其函数范围是(−1,+1),输出响应的均值为0。但由于tanh(x) 型函数仍基于Sigmoid型函数,使用tanh(x) 型函数依然会发生“梯度饱和”现象。

为了避免梯度饱和现象的发生,将修正线性单元(Rectified Linear Unit,简称ReLU)引入神经网。ReLU函数是目前深度卷积神经网络中最为常用的激活函数之一。ReLU函数实际上是一个分段函数,其定义为:

                                                                     ReLU(x) = MAX{0, x}.

与前两个激活函数相比:ReLU函数的梯度在x ≥ 0 时为1,反之为0(如上图所示);对x ≥ 0 部分完全消除了Sigmoid型函数的梯度饱和效应。计算复杂度上,ReLU函数也相对前两者的指数函数计算更为简单。同时,实验中还发现ReLU函数有助于随机梯度下降方法收敛,收敛速度约快6倍左右。不过,ReLU函数也有自身缺陷,即在x 0 时,梯度便为0。换句话说,对于小于0的这部分卷积结果响应,它们一旦变为负值将再无法影响网络训练——这种现象被称作“死区”。

为了缓解“死区”现象,研究者将ReLU函数中x 0 的部分调整为f(x) = α·x,其中α 为0.01或0.001数量级的较小正数。这种新型的激活函数被称作“Leaky ReLU”:

可以发现,原始ReLU函数实际上是Leaky ReLU函数的一个特例,即α = 0。不过由Leaky ReLU中α 为超参数,合适的值较难设定且较为敏感,因此Leaky ReLU函数在实际使用中的性能并不十分稳定。

参数化ReLU的提出很好的解决了Leaky ReLU中超参数α 不易设定的问题:参数化ReLU直接将α 也作为一个网络中可学习的变量融入模型的整体训练过程。在求解参数化ReLU时,文献中仍使用传统的误差反向传播和随机梯度下降,对于参数α 的更新遵循链式法则,具体推导细节在此不过多赘述,感兴趣的读者可参考文献Surpassing human-level performance on ImageNet classification。实验结果验证方面,曾在一个14层卷积网络上对比了ReLU和参数化ReLU在ImageNet 2012数据集上的分类误差(top-1和top-5)。

网络结构如表1,每层卷积操作后均有参数化ReLU操作。表中第二列和第三列数值分别表示各层不同通道(channel)共享参数α 和独享参数α1时网络自动学习的α 取值。

实验结果如表2中所示。可以发现,在分类精度上,使用参数化ReLU作为激活函数的网络要优于使用原始ReLU的网络,同时自由度较大的各通道独享参数的参数化ReLU性能更优。另外,需指出表1中几个有趣的观察:

        1)与第一层卷积层搭配的参数化ReLU的α 取值(表1中第一行0.681和0.596)远大于ReLU中的0。这表明网络较浅层所需非线性较弱。同时,我们知道浅层网络特征一般多为表示“边缘”、“纹理”等特性的泛化特征。这一观察说明对于此类特征正负响应(activation)均很重要;这也解释了固定α 取值的ReLU(α = 0)和Leaky ReLU相比参数化ReLU性能较差的原因。

        2)请注意独享参数设定下学到的α 取值(表1中的最后一列)呈现由浅层到深层依次递减的趋势,说明实际上网络所需的非线性能力随网络深度增加而递增。

不过万事皆具两面性,参数化ReLU在带来更大自由度的同时,也增加了网络模型过拟合的风险,在实际使用中需格外注意。

另一种解决α 超参设定的方式是将其随机化,这便是随机化ReLU。对于随机化ReLu中α 的设定,其取值在训练阶段服从均匀分布,在测试阶段则将其指定为该均匀分布对应的分布期望(l+u)/2:

显然,ELU具备ReLU函数的优点,同时ELU也解决了ReLU函数自身的“死区”问题。不过,ELU函数中的指数操作稍稍增大了计算量。实际使用中,ELU中的超参数λ 一般设置为1。

常用激活函数比较

本文结构:

如下图,在神经元中,输入的 inputs 通过加权,求和后,还被作用了一个函数,这个函数就是激活函数 Activation Function。

如果不用激励函数,每一层输出都是上层输入的线性函数,无论神经网络有多少层,输出都是输入的线性组合。

如果使用的话,激活函数给神经元引入了非线性因素,使得神经网络可以任意逼近任何非线性函数,这样神经网络就可以应用到众多的非线性模型中。

公式:

曲线:

也叫 Logistic 函数,用于隐层神经元输出

取值范围为(0,1)

它可以将一个实数映射到(0,1)的区间,可以用来做二分类。

在特征相差比较复杂或是相差不是特别大时效果比较好。

sigmoid缺点:

激活函数计算量大,反向传播求误差梯度时,求导涉及除法

反向传播时,很容易就会出现梯度消失的情况,从而无法完成深层网络的训练

下面解释为何会出现梯度消失:

反向传播算法中,要对激活函数求导,sigmoid 的导数表达式为:

sigmoid 原函数及导数图形如下:

由图可知,导数从 0 开始很快就又趋近于 0 了,易造成“梯度消失”现象

公式

曲线

也称为双切正切函数

取值范围为[-1,1]。

tanh在特征相差明显时的效果会很好,在循环过程中会不断扩大特征效果。

与 sigmoid 的区别是,tanh 是 0 均值的,因此实际应用中 tanh 会比 sigmoid 更好

Rectified Linear Unit(ReLU) - 用于隐层神经元输出

公式

曲线

输入信号 0 时,输出都是0,0 的情况下,输出等于输入

ReLU 的优点:

Krizhevsky et al. 发现使用 ReLU 得到的 SGD 的收敛速度会比 sigmoid/tanh 快很多

ReLU 的缺点:

训练的时候很”脆弱”,很容易就”die”了

例如,一个非常大的梯度流过一个 ReLU 神经元,更新过参数之后,这个神经元再也不会对任何数据有激活现象了,那么这个神经元的梯度就永远都会是 0.

如果 learning rate 很大,那么很有可能网络中的 40% 的神经元都”dead”了。

Softmax - 用于多分类神经网络输出

公式

举个例子来看公式的意思:

就是如果某一个 zj 大过其他 z, 那这个映射的分量就逼近于 1,其他就逼近于 0,主要应用就是多分类。

为什么要取指数,第一个原因是要模拟 max 的行为,所以要让大的更大。

第二个原因是需要一个可导的函数。

Sigmoid 和 ReLU 比较:

sigmoid 的梯度消失问题,ReLU 的导数就不存在这样的问题,它的导数表达式如下:

曲线如图

对比sigmoid类函数主要变化是:

1)单侧抑制

2)相对宽阔的兴奋边界

3)稀疏激活性。

Sigmoid 和 Softmax 区别:

softmax is a generalization of logistic function that “squashes”(maps) a K-dimensional vector z of arbitrary real values to a K-dimensional vector σ(z) of real values in the range (0, 1) that add up to 1.

sigmoid将一个real value映射到(0,1)的区间,用来做二分类。

而 softmax 把一个 k 维的real value向量(a1,a2,a3,a4….)映射成一个(b1,b2,b3,b4….)其中 bi 是一个 0~1 的常数,输出神经元之和为 1.0,所以相当于概率值,然后可以根据 bi 的概率大小来进行多分类的任务。

二分类问题时 sigmoid 和 softmax 是一样的,求的都是 cross entropy loss,而 softmax 可以用于多分类问题

softmax是sigmoid的扩展,因为,当类别数 k=2 时,softmax 回归退化为 logistic 回归。具体地说,当 k=2 时,softmax 回归的假设函数为:

利用softmax回归参数冗余的特点,从两个参数向量中都减去向量θ1 ,得到:

最后,用 θ′ 来表示 θ2−θ1,上述公式可以表示为 softmax 回归器预测其中一个类别的概率为

另一个类别概率的为

这与 logistic回归是一致的。

softmax建模使用的分布是多项式分布,而logistic则基于伯努利分布

多个logistic回归通过叠加也同样可以实现多分类的效果,但是 softmax回归进行的多分类,类与类之间是互斥的,即一个输入只能被归为一类;多个logistic回归进行多分类,输出的类别并不是互斥的,即"苹果"这个词语既属于"水果"类也属于"3C"类别。

选择的时候,就是根据各个函数的优缺点来配置,例如:

如果使用 ReLU,要小心设置 learning rate,注意不要让网络出现很多 “dead” 神经元,如果不好解决,可以试试 Leaky ReLU、PReLU 或者 Maxout.

参考资料:

推荐阅读 历史技术博文链接汇总

也许可以找到你想要的

我是 不会停的蜗牛 Alice

85后全职主妇

喜欢人工智能,行动派

创造力,思考力,学习力提升修炼进行中

欢迎您的喜欢,关注和评论!

Dead Relu(死亡节点)

;utm_medium=socialutm_oi=636829908081446912

Relu改进的论文

在训练过程中,由于一次梯度更新的幅度过大,导致某些Relu节点的权重调整的太大,使得后续的训练对该节点不再起作用,这个节点相当于永久死亡了。

交叉熵损失函数:

(y代表真实值,y_代表预测值)

如果y_上升,那么对应的W势必要增大。(x是上一级结果激活函数处理后的输入,默认大于等于0)

如果learn_rate设置过大,使用Relu做激活函数,在遇到负例(负例为y_)的时候,W会突然变的很小(因为y_小于0的统一激活为0,y_越小w越小),会导致所有样本在某一结点处,因为梯度为0停止更新。

在设置激活函数的时候,也可以试试其他的如上图的右边两个,由图可知在抑制区的导数不为0,这也是一种避免死亡节点的手段。

使用L2正则化,或者其他的梯度下降方式如动能,RMS ,Adam等可以避免,笔者认为他们可以改变的原理还是因为这些算法使得w在一次更新中变化的缓和了,所以想要尽量避免死亡节点,最好的办法还是学习率不要设置太大。(因为在反向传播的过程中,大的梯度更新f'(x)Δx(Δx设置过大且f'(x)小于0),可能会导致参数W的分布成为一个中心在-0.1高斯分布,绝大部分输出激活为0,凉凉)

最后思考:最后一层maxpool和avgpool的效果会有如此大的差别。

原因:maxpool输出的值过大,导致接下来的卷积响应值也过大,这样累积到后面,最终输出的loss值就有可能变成NAN了。

最后:添加L2norm层解决。

为什么会存在激活函数?

    在深度学习网络中,我们经常可以看到对于某一个隐藏层节点的激活值计算一般分为两步,如下图:

    激活函数是我们对输入做的一种非线性的转换。转换的结果输出,并当作下一个隐藏层的输入。

    1、首先对于y=ax+b 这样的函数,当x的输入很大时,y的输出也是无限大/小的,经过多层网络叠加后,值更加膨胀的没边了,这显然不符合我们的预期,很多情况下我们希望的输出是一个概率。

    2、线性变换太简单(只是加权偏移),限制了对复杂任务的处理能力。 没有激活函数的神经网络就是一个线性回归模型 。激活函数做的非线性变换可以使得神经网络处理非常复杂的任务。例如,我们希望我们的神经网络可以对语言翻译和图像分类做操作,这就需要非线性转换。同时,激活函数也使得反向传播算法变的可能。因为,这时候梯度和误差会被同时用来更新权重和偏移。没有可微分的线性函数,这就不可能了。

    3、结论:可以用线性激活函数的地方一般会是输出层。

    在深度学习中,常用的激活函数主要有:sigmoid函数,tanh函数,ReLU函数、Leaky ReLU函数。

    该函数是将取值为 (−∞,+∞)(的数映射到 (0,1) 之间。sigmoid函数的公式以及图形如下:

    tanh函数相较于sigmoid函数要常见一些,该函数是将取值为 (−∞,+∞)的数映射到 (−1,1) 之间,其公式与图形为

    ReLU函数又称为修正线性单元(Rectified Linear Unit),是一种分段线性函数,其弥补了sigmoid函数以及tanh函数的梯度消失问题。ReLU函数的公式以及图形如下:

    这是一种对ReLU函数改进的函数,又称为PReLU函数,但其并不常用。其公式与图形如下:

[1]

[2]

[3]

更多自然语言处理、pytorch相关知识,还请关注 AINLPer 公众号,极品干货即刻送达。

卷积神经网络的 卷积层、激活层、池化层、全连接层

数据输入的是一张图片(输入层),CONV表示卷积层,RELU表示激励层,POOL表示池化层,Fc表示全连接层

全连接神经网络需要非常多的计算资源才能支撑它来做反向传播和前向传播,所以说全连接神经网络可以存储非常多的参数,如果你给它的样本如果没有达到它的量级的时候,它可以轻轻松松把你给他的样本全部都记下来,这会出现过拟合的情况。

所以我们应该把神经元和神经元之间的连接的权重个数降下来,但是降下来我们又不能保证它有较强的学习能力,所以这是一个纠结的地方,所以有一个方法就是 局部连接+权值共享 ,局部连接+权值共享不仅权重参数降下来了,而且学习能力并没有实质的降低,除此之外还有其它的好处,下来看一下,下面的这几张图片:

一个图像的不同表示方式

这几张图片描述的都是一个东西,但是有的大有的小,有的靠左边,有的靠右边,有的位置不同,但是我们构建的网络识别这些东西的时候应该是同一结果。为了能够达到这个目的,我们可以让图片的不同位置具有相同的权重(权值共享),也就是上面所有的图片,我们只需要在训练集中放一张,我们的神经网络就可以识别出上面所有的,这也是 权值共享 的好处。

而卷积神经网络就是局部连接+权值共享的神经网络。

现在我们对卷积神经网络有一个初步认识了,下面具体来讲解一下卷积神经网络,卷积神经网络依旧是层级结构,但层的功能和形式做了改变,卷积神经网络常用来处理图片数据,比如识别一辆汽车:

在图片输出到神经网络之前,常常先进行图像处理,有 三种 常见的图像的处理方式:

均值化和归一化

去相关和白化

图片有一个性质叫做局部关联性质,一个图片的像素点影响最大的是它周边的像素点,而距离这个像素点比较远的像素点二者之间关系不大。这个性质意味着每一个神经元我们不用处理全局的图片了(和上一层全连接),我们的每一个神经元只需要和上一层局部连接,相当于每一个神经元扫描一小区域,然后许多神经元(这些神经元权值共享)合起来就相当于扫描了全局,这样就构成一个特征图,n个特征图就提取了这个图片的n维特征,每个特征图是由很多神经元来完成的。

在卷积神经网络中,我们先选择一个局部区域(filter),用这个局部区域(filter)去扫描整张图片。 局部区域所圈起来的所有节点会被连接到下一层的 一个节点上 。我们拿灰度图(只有一维)来举例:

局部区域

图片是矩阵式的,将这些以矩阵排列的节点展成了向量。就能更好的看出来卷积层和输入层之间的连接,并不是全连接的,我们将上图中的红色方框称为filter,它是2*2的,这是它的尺寸,这不是固定的,我们可以指定它的尺寸。

我们可以看出来当前filter是2*2的小窗口,这个小窗口会将图片矩阵从左上角滑到右下角,每滑一次就会一下子圈起来四个,连接到下一层的一个神经元,然后产生四个权重,这四个权重(w1、w2、w3、w4)构成的矩阵就叫做卷积核。

卷积核是算法自己学习得到的,它会和上一层计算,比如,第二层的0节点的数值就是局部区域的线性组合(w1 0+w2 1+w3 4+w4 5),即被圈中节点的数值乘以对应的权重后相加。

卷积核计算

卷积操作

我们前面说过图片不用向量表示是为了保留图片平面结构的信息。 同样的,卷积后的输出若用上图的向量排列方式则丢失了平面结构信息。 所以我们依然用矩阵的方式排列它们,就得到了下图所展示的连接,每一个蓝色结点连接四个黄色的结点。

卷积层的连接方式

图片是一个矩阵然后卷积神经网络的下一层也是一个矩阵,我们用一个卷积核从图片矩阵左上角到右下角滑动,每滑动一次,当然被圈起来的神经元们就会连接下一层的一个神经元,形成参数矩阵这个就是卷积核,每次滑动虽然圈起来的神经元不同,连接下一层的神经元也不同,但是产生的参数矩阵确是一样的,这就是 权值共享 。

卷积核会和扫描的图片的那个局部矩阵作用产生一个值,比如第一次的时候,(w1 0+w2 1+w3 4+w4 5),所以,filter从左上到右下的这个过程中会得到一个矩阵(这就是下一层也是一个矩阵的原因),具体过程如下所示:

卷积计算过程

上图中左边是图矩阵,我们使用的filter的大小是3 3的,第一次滑动的时候,卷积核和图片矩阵作用(1 1+1 0+1 1+0 0+1 1+1 0+0 1+0 0+1 1)=4,会产生一个值,这个值就是右边矩阵的第一个值,filter滑动9次之后,会产生9个值,也就是说下一层有9个神经元,这9个神经元产生的值就构成了一个矩阵,这矩阵叫做特征图,表示image的某一维度的特征,当然具体哪一维度可能并不知道,可能是这个图像的颜色,也有可能是这个图像的轮廓等等。

单通道图片总结 :以上就是单通道的图片的卷积处理,图片是一个矩阵,我们用指定大小的卷积核从左上角到右下角来滑动,每次滑动所圈起来的结点会和下一层的一个结点相连,连接之后就会形成局部连接,每一条连接都会产生权重,这些权重就是卷积核,所以每次滑动都会产生一个卷积核,因为权值共享,所以这些卷积核都是一样的。卷积核会不断和当时卷积核所圈起来的局部矩阵作用,每次产生的值就是下一层结点的值了,这样多次产生的值组合起来就是一个特征图,表示某一维度的特征。也就是从左上滑动到右下这一过程中会形成一个特征图矩阵(共享一个卷积核),再从左上滑动到右下又会形成另一个特征图矩阵(共享另一个卷积核),这些特征图都是表示特征的某一维度。

三个通道的图片如何进行卷积操作?

至此我们应该已经知道了单通道的灰度图是如何处理的,实际上我们的图片都是RGB的图像,有三个通道,那么此时图像是如何卷积的呢?

彩色图像

filter窗口滑的时候,我们只是从width和height的角度来滑动的,并没有考虑depth,所以每滑动一次实际上是产生一个卷积核,共享这一个卷积核,而现在depth=3了,所以每滑动一次实际上产生了具有三个通道的卷积核(它们分别作用于输入图片的蓝色、绿色、红色通道),卷积核的一个通道核蓝色的矩阵作用产生一个值,另一个和绿色的矩阵作用产生一个值,最后一个和红色的矩阵作用产生一个值,然后这些值加起来就是下一层结点的值,结果也是一个矩阵,也就是一张特征图。

三通道的计算过程

要想有多张特征图的话,我们可以再用新的卷积核来进行左上到右下的滑动,这样就会形成 新的特征图 。

三通道图片的卷积过程

也就是说增加一个卷积核,就会产生一个特征图,总的来说就是输入图片有多少通道,我们的卷积核就需要对应多少通道,而本层中卷积核有多少个,就会产生多少个特征图。这样卷积后输出可以作为新的输入送入另一个卷积层中处理,有几个特征图那么depth就是几,那么下一层的每一个特征图就得用相应的通道的卷积核来对应处理,这个逻辑要清楚,我们需要先了解一下 基本的概念:

卷积计算的公式

4x4的图片在边缘Zero padding一圈后,再用3x3的filter卷积后,得到的Feature Map尺寸依然是4x4不变。

填充

当然也可以使用5x5的filte和2的zero padding可以保持图片的原始尺寸,3x3的filter考虑到了像素与其距离为1以内的所有其他像素的关系,而5x5则是考虑像素与其距离为2以内的所有其他像素的关系。

规律: Feature Map的尺寸等于

(input_size + 2 * padding_size − filter_size)/stride+1

我们可以把卷积层的作用 总结一点: 卷积层其实就是在提取特征,卷积层中最重要的是卷积核(训练出来的),不同的卷积核可以探测特定的形状、颜色、对比度等,然后特征图保持了抓取后的空间结构,所以不同卷积核对应的特征图表示某一维度的特征,具体什么特征可能我们并不知道。特征图作为输入再被卷积的话,可以则可以由此探测到"更大"的形状概念,也就是说随着卷积神经网络层数的增加,特征提取的越来越具体化。

激励层的作用可以理解为把卷积层的结果做 非线性映射 。

激励层

上图中的f表示激励函数,常用的激励函数几下几种:

常用的激励函数

我们先来看一下激励函数Sigmoid导数最小为0,最大为1/4,

激励函数Sigmoid

Tanh激活函数:和sigmoid相似,它会关于x轴上下对应,不至于朝某一方面偏向

Tanh激活函数

ReLU激活函数(修正线性单元):收敛快,求梯度快,但较脆弱,左边的梯度为0

ReLU激活函数

Leaky ReLU激活函数:不会饱和或者挂掉,计算也很快,但是计算量比较大

Leaky ReLU激活函数

一些激励函数的使用技巧 :一般不要用sigmoid,首先试RELU,因为快,但要小心点,如果RELU失效,请用Leaky ReLU,某些情况下tanh倒是有不错的结果。

这就是卷积神经网络的激励层,它就是将卷积层的线性计算的结果进行了非线性映射。可以从下面的图中理解。它展示的是将非线性操作应用到一个特征图中。这里的输出特征图也可以看作是"修正"过的特征图。如下所示:

非线性操作

池化层:降低了各个特征图的维度,但可以保持大分重要的信息。池化层夹在连续的卷积层中间,压缩数据和参数的量,减小过拟合,池化层并没有参数,它只不过是把上层给它的结果做了一个下采样(数据压缩)。下采样有 两种 常用的方式:

Max pooling :选取最大的,我们定义一个空间邻域(比如,2x2 的窗口),并从窗口内的修正特征图中取出最大的元素,最大池化被证明效果更好一些。

Average pooling :平均的,我们定义一个空间邻域(比如,2x2 的窗口),并从窗口内的修正特征图算出平均值

Max pooling

我们要注意一点的是:pooling在不同的depth上是分开执行的,也就是depth=5的话,pooling进行5次,产生5个池化后的矩阵,池化不需要参数控制。池化操作是分开应用到各个特征图的,我们可以从五个输入图中得到五个输出图。

池化操作

无论是max pool还是average pool都有分信息被舍弃,那么部分信息被舍弃后会损坏识别结果吗?

因为卷积后的Feature Map中有对于识别物体不必要的冗余信息,我们下采样就是为了去掉这些冗余信息,所以并不会损坏识别结果。

我们来看一下卷积之后的冗余信息是怎么产生的?

我们知道卷积核就是为了找到特定维度的信息,比如说某个形状,但是图像中并不会任何地方都出现这个形状,但卷积核在卷积过程中没有出现特定形状的图片位置卷积也会产生一个值,但是这个值的意义就不是很大了,所以我们使用池化层的作用,将这个值去掉的话,自然也不会损害识别结果了。

比如下图中,假如卷积核探测"横折"这个形状。 卷积后得到3x3的Feature Map中,真正有用的就是数字为3的那个节点,其余数值对于这个任务而言都是无关的。 所以用3x3的Max pooling后,并没有对"横折"的探测产生影响。 试想在这里例子中如果不使用Max pooling,而让网络自己去学习。 网络也会去学习与Max pooling近似效果的权重。因为是近似效果,增加了更多的参数的代价,却还不如直接进行最大池化处理。

最大池化处理

在全连接层中所有神经元都有权重连接,通常全连接层在卷积神经网络尾部。当前面卷积层抓取到足以用来识别图片的特征后,接下来的就是如何进行分类。 通常卷积网络的最后会将末端得到的长方体平摊成一个长长的向量,并送入全连接层配合输出层进行分类。比如,在下面图中我们进行的图像分类为四分类问题,所以卷积神经网络的输出层就会有四个神经元。

四分类问题

我们从卷积神经网络的输入层、卷积层、激活层、池化层以及全连接层来讲解卷积神经网络,我们可以认为全连接层之间的在做特征提取,而全连接层在做分类,这就是卷积神经网络的核心。

发表评论