今天把李沐讲的卷积神经网络视频看完了,现在来总结一下这几个网络结构各自的特点,没看过原论文,可能会有出入,过几天把论文看完之后再作修改。
LeNet
总共七层,所有这些层都包含可训练的参数(权重):
第一层是卷积层C1,卷积核大小5*5,步长为1,填充为0,输出channels为6(6个feature maps);
第二层是池化层S2,pool_size为2,步长为2,将前一层的2*2区域取平均,然后乘以可训练系数(权重),再加上一个可训练偏差,并将结果通过sigmoid函数;
第三层是卷积层C3,卷积核大小5*5,步长为1,填充为0,输出channels为16(6个feature maps),此层的feature map与前一层池化层的feature map的连接方式很特别,如下图所示,0-5表示前一层feature map的标号,0-15表示这一层feature map的标号;
连接规则如下:前六个C3特征映射从S2中的三个特征映射的每个连续子集中获取输入。接下来的六个从四个连续子集中获取输入。接下来的三个从四个不连续子集中获取输入。最后,最后一个从所有S2功能映射中获取输入。
第四层是池化层,同上;
第五层、第六层是全连接层,激活函数是sigmoid函数;
最后一层是高斯连接,输出分类结果,因为是针对手写数据集,分类结果只能是0-9之间的数,所以输出channels为10。
可以看到LeNet的网络结构非常简单,但它的突出贡献在于第一次将神经网络应用到实际工程中,并取得很好的效果。
AlexNet
AlexNet是在LeNet上做的一些改进,主要是在LeNet基础上将网络做深、做宽,做深是增加网络层数,做宽是卷积核更大、输出channels更多。它之所以非常成功在于两点:数据和硬件,此时大型数据库ImagNet的出现使神经网络的研究进入一个新的阶段,同时GPU的到来为神经网络的训练推波助澜。
总共十一层:
第一层是卷积层,卷积核大小11*11,步长为4,填充为0,输出channels为96,激活函数是relu函数;
第二层是最大池化层,pool_size为3,步长为2;
第三层是卷积层,卷积核大小5*5,步长为2,填充为0,输出channels为256,激活函数是relu函数;
第四层是最大池化层,pool_size为3,步长为2;
第五至七层,卷积核大小均为3*3,步长均为1,填充均为1,激活函数都为relu,输出channels依次为384、384、256;
第八层是最大池化层,pool_size为3,步长为2;
第九、十层是全连接层,输出channels均为4096,激活函数是relu,DropoutProbability均为0.5;
第十一层是全连接层,输出分类结果。
VGG-11
它使用了重复简单的基础模块拼接成一个网络,网上有很多vgg的模型结构,至于它的优点,我也不知道,下次看完之后过来添加。
Network in Network(NiN)
NiN 最大的一个特点是使用了 1×1 卷积层来替代全连接层,它可以看成全连接层:其中空间维度(高和宽)上的每个元素相当于样本,通道相当于特征;如果输入是(batch_size, in_channels, height, width),那么经过1*1卷积层的处理,只会改变第二维channels的大小,由于(height, width)大小不变,所以在卷积层之后插入该层仍然可以进行卷积运算,因而可以在卷积层之间插入该层(如果插入的是全连接层,那就不能再继续卷积)。其余卷积层的设定与AlexNet差不多。由于它用1*1卷积层代替全连接层,所以没有Alex Net最后三层的全连接层,直接从1*1的卷积层输出结果。
GoogLeNet
GoogLeNet主要贡献是制作了一个基础卷积块Inception块,该模块借鉴了NiN中的1*1卷积层的想法,Inception块融合四条线路得到输出结果,其中三条分别包括1*1、3*3、5*5的卷积层,它们能够抽取图片不同空间尺度下的信息。
ResNet
ResNet的主要贡献是设计了一个残差块,主要解决网络加深时,训练变得更加困难,因为在远离loss函数的层中,参数的导数难以得到更新。残差网络的做法是将这一层的输出与前面某一层的输出相加,那么这一层的输出就有两条路线,这样在反向求导时,前面那一层不会因为远离loss函数而参数无法更新。
DenseNet
DenseNet中文名叫稠密连接网络,它与ResNet非常相似,只在一处做了微小改动,就是将这一层的输出与前面某一层的输出相加改为相连,即add与concat的区别,这样前面那一层的输出就可以直接没有改动地传到后面网络层中,此外它还使用1*1卷积层作为过渡层,以此来降低模型复杂度。