深度学习(16):深度卷积神经网络:实例探究

时间:2024-03-31 15:55:14

三个经典网络

LeNet-5
深度学习(16):深度卷积神经网络:实例探究
一个十分经典网络,处理任务是手写数字的识别。采用如下结构:

输入层:
32 * 32 * 1灰度图

卷积层(C1):
6个 5 * 5 过滤器,步长为1,得到28 * 28 * 6的输出

池化层(S1):(平均池化)
过滤器 2 * 2,步长为2, 输出14 * 14 * 6

卷积层(C2):
16个 5 * 5 过滤器,步长为1,得到10 * 10 * 16的输出

池化层(S2):(平均池化)
过滤器 2 * 2,步长为2, 输出5 * 5 * 16

全连接层(FC1):
120神经元

全连接层(FC2):
84神经元

输出层:
10节点(对应10数字)

由于年代久远,神经元个数较少,没有用到relu**函数,输出层并没有采用softmax

AlexNet
深度学习(16):深度卷积神经网络:实例探究
和LeNet-5类似,不再详细阐述结构。
神经元个数大大增多,采用了最大池化替代平均池化,同时采用relu**函数,采用了softmax**函数。

VGG-16
深度学习(16):深度卷积神经网络:实例探究
观察到每一层卷积层,都采用”same“模式的pattern,过滤器个数翻倍。每个池化层均为2 * 2步长2,使得图片尺寸减小一半。这样使得神经元个数依次减少。
模型规模巨大。

残差网络ResNets

随着网络深度的增加,我们容易出现梯度爆炸和梯度衰减的现象。当层数逐渐加大时,明明应该获得更高的性能,我们的测试集准确率往往会缩小。为了解决这个问题出现了ResNets

基本单元:
深度学习(16):深度卷积神经网络:实例探究
skip connection
我们发现,a[l]层的输出A 直接送到了a[l+2]层的**函数前与其Z值线性求和后,再经过**函数输出。这里注意,当两层的大小不一致时,我们或采用0填充,或采用一个参数矩阵进行整形(这个选择对网络影响很小)。

这样做的好处是:虽然是两层神经网络,但是我们很容易能够学得a[l]到a[l+2]的恒等映射(之前是很不容易的),间接使得中间的层数不起作用。同时我们往往会学得比恒等映射更加nb的东西,因此网络性能会得以提升。
深度学习(16):深度卷积神经网络:实例探究

1 * 1卷积(网络中的网络)

乍一听1 * 1卷积有些怪异,那是因为我们只在n * n * 1的角度考虑问题。当上一层输入为n * n * nc 时,每一个1 * 1卷积都会将输入整合成n * n * 1的输出。相当于对每nc个输入的特点进行了整合。
如果说池化层可以单纯调节输出层的长和宽,那么1 * 1卷积可以单纯调节输出层深度。

Inception network

我们在构建卷积神经网络时,往往要考虑很多超参数(卷积核大小,什么时候使用池化层等等)。Inception network可以让机器来为我们选择。
Inception network基本单元如下:
深度学习(16):深度卷积神经网络:实例探究
我们可以发现,我们利用不同的卷积核(甚至池化层)得到了4个长宽相同的输出,将它们纵向排列在一起,得到对应输出。
这里面的1 * 1卷积的作用有:减少连接数和计算量,整形深度(对池化层来说)
深度学习(16):深度卷积神经网络:实例探究

其他工具

之前提到的迁移学习(利用别人开源的已经训练好的参数)、数据扩充(图片裁剪、图片反转等)都可以帮助我们训练一个计算机视觉网络。