26 网络中的网络 NiN
背景问题:
卷积层需要较少的参数,但是卷积层后面的第一个全连接层往往需要较多的参数,VGG达到了102M个。过量的参数很容易造成过拟合,以及把训练时间都花在了访问内存上。所以NiN的思想就是完全不要全连接层,用卷积层来替代。
NiN块
(之后的网络多是提出局部的一个块架构)
使用1×1的卷积来起到全连接层的作用,输出形状和卷积层输出一样。
NiN架构
- 无全连接层
- 交替使用NiN块和步幅为2的最大池化层(逐步减少高宽和增大通道数)
- 最后使用全局平均池化层得到输出(输出通道数就是类别数目)
NiN的意义
两层1×1的卷积层为每个像素增加了非线性性,通道数作为全连接层,使用全局平均池化替代全连接层,不容易过拟合,可以有更少的参数个数。
27 含并行连结的网络 GoogleLeNet
背景问题:卷积层的大小怎么选?
Inception块
通过4个路径从不同层面抽取信息,每个通道不改变高和宽,然后在输出通道数中合并,这样可以抽取到所有的层面的信息。
通道数的变化:
白色的卷积是用来改变通道数,蓝色的是用来抽取空间信息的。可以通过降低通道数来控制模型复杂度,且每条路径的通道可能不一样。
因此,在增加信息丰富性的同时,Inception块甚至比3×3的参数和计算量还要小几倍。
GoogleLeNet
五段(conv+pooling,一个stage高宽降低一半),9个Inception块
GoogleLeNet大量使用1×1的卷积,并且使用了全局平均pooling,但是最后使用FC,所以不会像NiN一样通道数必须等于分类数。
段1&2,高宽减少8倍,通道数增加到64倍。
段3:使用两个Inception,规律比较难总结,通道分配是不同的。
段4 & 段5:使用5个、2个Inception块,最后得到1024维的特征输出。
Inception的后续变种
- v2: Inception-BN 使用batch normalization
- v3:修改了inception,段三段四段五中使用了不同的卷积。(效果较好)
- v4:加入了残差连接(resnet)
总结:
inception可以在4条不同超参数和卷积层、池化层路径中抽取不同信息,并且模型参数比较小,参数较少一点。