经典卷积神经网络
深度学习被大家追捧起始于2014年 AlexNet 在 ImageNet 的出色表现。从此以后各种各样的卷积神经网络被提出。本节对经典的卷积神经网络进行简要梳理。
1、普通CNN
普通 CNN 可以简单用一个公式表示:
$\{~[CONV]^{+} ~ + ~ [POOL]^{*}~ \}^{+} ~ + ~ [FC]^{+}$
这里 CONV 是卷积层,POOL 是池化层,FC 是全连接层。$^{+}$表示至少有一个,$^{*}$表示有0个或者多个。 用公式看起来是不是就简单多了呢?
2、ResCNN
理论上卷积网络越深模型的表达能力越强,效果会越好。可是在利用普通 CNN 的时候发现随着网络层数的加深,模型的效果先变好,然后逐渐变差。这是因为随着网络的加深,学习的难度也在加大,很容易出现梯度消失和梯度爆炸的情况。何凯明等人于2015年提出了 ResNet在 ImageNet 比赛上大放异彩,使得卷积神经网络可以训练上百甚至上千层的网络。
ResNet 的原理其实很简单。就是将前层的结果直接传到后边层进行激活函数计算。因此也有人把这种操作叫做跳远连接。
比如下边的这个图中,第1层的输出直接给第3层使用,在第3层进行激活函数计算前将第1层传来的值加在原先值的上边,再进行激活函数的计算,这样子就构成了一个残差块。ResNet 是由多个残差块构成的。这里要求前层的输出和后层的激活输入维度是一样,因为这样才可以进行加和运算。否则的话需要进行矩阵转换。那为什么 ResNet 可以训练更深的网络呢? 这是因为残差块中跳过的那部分如果是0的话,就相当于把前层的结果直接传输到后层的网络,而神经网络学习出0值网络比较容易。因此残差网络一般不会比同结构不带残差的网络效果差,因为网络更丰富,往往还能达到更好的效果。
3、Inception
在设计卷积网络的时候我们往往会考虑改使用什么样的卷积核,是用1*1的,2*2的,3*3的,还是5*5的,或者是否该用 pooling 层呢?这是一个很麻烦的问题。Inception 就是让网络帮你解决这个问题。
在上图中,网络选用了3个卷积核和一个 MAX-POOL,让模型自己选用合适的核(当然,每个核都有对应的权重)。这样就构成了一个 Inception 块。一个完整的 Inception 网络就是包含多个这样模块的网络。下图就是一个完整的 Inception 网络。