第二周课程的开始,吴教授开始讲解几个经典的CNN案例,包括LeNet-5、AlexNet、VGG、ResNets等。我认为这一部分内容还是挺有用的,至少让我对于CNN有了更直观的理解,了解这些经典架构的特点对于pytorch实现也有帮助。
1.LeNet-5
从这个经典的CNN案例中我们又可以看到随网络深度增加, nHn_{H} 、 nWn_{W} 逐渐减小而 nCn_{C} 逐渐增大的趋势,这种趋势在很多有效的CNN案例中都有体现,所以我们在设计CNN架构时同样可以采取这样的方式。
此外,CONV-POOL-CONV-POOL-FC-FC-OutPut的结构同样非常常用且有效。
对于CNN中卷积层、池化层和全连接层的作用,我们可以这样理解:
- 卷积层的作用是学习更能代表输入的特征
- 池化层是为了降低空间维度
- 全连接层用于类别预测
LeNet-5在CNN案例中属于比较小的网络结构,其中约有6万个参数。下面我们再看一种更大的网络结构。
2.AlexNet
图中的same指的就是Same convolution,因此前后的nH和nW不变
这个网络就明显更加复杂了,包含约6000万个参数。图中红色虚线框中是卷积网络与全连接网络之间的过渡,但其实并没有进行任何计算,只是将6×6×256个节点展开为一维而已,可以看到等号两边都是9216个节点。
3.VGG
以VGG-16为例:
图中的卷积层CONV都是用3×3大小的卷积核做步幅为1、Padding类型为Same的运算,池化层POOL都是用2×2大小的过滤器做步幅为2的最大池化。箭头下方的×n指重复n次。
可以看出这个网络的深度很高(事实上VGG-16中的16就是指网络中含有16层CONV和FC),共包含约1.38亿个参数。但是由于所用的卷积层和池化层在结构上是固定的,所以此网络没有那么多的超参数,这是一种只需要专注于构建卷积层的网络。
这里也可以看出参数和超参数的区别。
超参数 是用来确定模型的一些参数,一般是根据经验和验证集效果确定的变量,超参数不同,模型是不同的。 在卷积神经网络中, 超参数有学习速率、迭代次数、层数、每层神经元的个数、批大小(batch size)及损失函数中各部分的权值等 。 而 参数是 可以根据模型自身的算法,通过数据迭代自动学习出的变量, 如卷积核的权值w、偏置b等。
4.Residual Networks (ResNets)
开始前需要先简单了解两个新的概念:
远跳连接(skip connection):可以从某一网络层获取激活,然后迅速反馈给另外一层,甚至是神经网络的更深层,我们将利用远跳连接构建能够训练深度网络的ResNets
残差块(Residual block):ResNets是以残差块为基本单元构建的
在传统的神经网络中,第l层的a[l]要传递到第l+2层,需要经过下图这样的过程:
但是通过建立一个远跳连接,也可以直接把a[l]送入第l+2层,与z[l+2]一起进行ReLU非线性激活。下图这样的结构单元称为一个残差块。
构建ResNet的方式:
在普通网络(Plain network)中,每两层间加上一个远跳连接。
ResNet在训练深度网络时非常有用。
之后还讲了1×1卷积,可以使用这种1×1×nC的卷积核在保持图像长宽不变的情况下改变信道数量(一般用于减少)。但是我觉得在运算规律上并没有不同,所以就不单独记录了。
5.Inception Network
基本思想是Inception网络不需要人为决定使用哪种过滤器(卷积核),具体方法就是每一层的计算都同时用上不同大小的卷积核和池化过滤器,之后将各自的结果沿信道堆叠起来,再送入下一层计算。可以形象地用下图表示这种网络的其中一层。
图中1×1CONV的作用是减少信道数,从而控制计算成本不至于过大。
顺便一提,Inception网络通常深度非常大,上图展示的只是其中一层的结构,下面这个图才是论文中网络的全貌。这一点从它的名字Inception(盗梦空间)就可以感受到,据说论文作者就是联系到小李子在《盗梦空间》中的台词“We need to go deeper”才决定起这个名字的。
以上就是吴教授展示的全部几种经典CNN案例。
作者:Erya
链接:https://zhuanlan.zhihu.com/p/335271674
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。