一. 卷积层

上一篇文章我们讲到过可以通过控制卷积层的个数来提取图像的不同特征,但是事实上卷积是一种线性运算,更准确的说是一种线性加权运算,而线性运算是可以叠加的,也就是说假设我们用的Resnet50网络,那么这50个卷积层就退化成了一个很复杂的线性网络,但是无论他怎么复杂,他都是一个线性网络。线性网络的拟合能力是非常弱的,很容易造成欠拟合的现象,那么怎么改善这种情况呢?这就需要激活函数了。在神经网络设计时,在每层的卷积后面,都增加一个非线性函数,就可以完成两个卷积层的线性隔离,确保每个卷积层完成自己的卷积任务。

二. 激活函数

目前常见的激活函数,主要有Sigmoid、tanh、Relu等。Resnet50中的激活函数就是Relu。

1. Sigmoid函数

resnet(3)------卷积层与激活函数与池化层-LMLPHP
Sigmoid 在神经网络中使用,是有一些优点的,主要体现在:

Sigmoid 函数的输出范围是 0 到 1。由于输出值限定在 0 到 1,因此它对每个神经元的输出进行了归一化;
用于将预测概率作为输出的模型。由于概率的取值范围是 0 到 1,因此 Sigmoid 函数非常合适;
梯度平滑,避免「跳跃」的输出值;
函数是可微的。这意味着可以找到任意两个点的 sigmoid 曲线的斜率;
明确的预测,即非常接近 1 或 0。

2. tanh函数

resnet(3)------卷积层与激活函数与池化层-LMLPHP

resnet(3)------卷积层与激活函数与池化层-LMLPHP
tanh函数对比sigmoid函数有一些优势:
1。首先,当输入比较大或者比较小时,函数的输出几乎是平滑的并且梯度较小,这不利于权重更新。二者的区别在于输出间隔,tanh 的输出间隔为 1,并且整个函数以 0 为中心,比 sigmoid 函数更好;
2.在 tanh 图中,负输入将被强映射为负,而零输入被映射为接近零。

3. Relu函数

resnet(3)------卷积层与激活函数与池化层-LMLPHP
Relu函数是现在深度学习中最为流行的函数,用途相当广泛。
Relu函数有如下几个优势:
1.当输入为正时,不存在梯度饱和问题。
2.计算速度快得多。Relu 函数中只存在线性关系,因此它的计算速度比 sigmoid 和 tanh 更快。

除了上面的3种激活函数之外,还有很多其他激活函数,比如Relu函数就有很多变种,如PRelu、LeakyRelu等。每种激活函数,都在一种或几种特定的深度学习网络中有优势。判断一个激活函数的好与坏,绝不仅仅是从函数的数学表达式上来判断,而是需要在实际的深度学习网络中不断地实验和实践,来找到最适合这个网络的激活函数。

三. 池化层

池化一般接在卷积过程后。

池化,也叫Pooling,其本质其实就是采样,池化对于输入的图片,选择某种方式对其进行压缩,以加快神经网络的运算速度。这里说的某种方式,其实就是池化的算法,比如最大池化平均池化

池化的过程有些类似卷积的过程,但是有些不一样:

  1. 池化的核只负责框定某次池化计算需要的图片的范围,核里面并没有数据参与计算,也就是说,在训练过程中,池化层不像卷积层那样,需要学习权重。
  2. 在卷积的计算中,需要channel维度的数据累加,而池化层的channel维度的数据不需要累加,每个channel中的数据是独立的,这也导致,池化的运算复杂度比卷积简单很多。

下面两张图就是卷积和池化的对比
resnet(3)------卷积层与激活函数与池化层-LMLPHP
resnet(3)------卷积层与激活函数与池化层-LMLPHP
而实际上,池化层有很多作用
1.特征不变性
2.降维
3.防止过拟合
4.降低模型计算量
resnet(3)------卷积层与激活函数与池化层-LMLPHP

12-10 06:56