本次的学习内容,不论是视觉方向还是NLP方向都是重点内容,我主要侧重于视觉方向,因此主要总结一下在卷积神经网络方面的一些内容。
网络结构
CNN的一般组成结构:卷积层、池化层、Batchnormal层、Dropout层、FC层
卷积层
用来提取图像的各种特征,在pytorch中需要提供卷积核尺寸、步长、padding参数,这些参数决定了输出图像的尺寸。可以通过下面的公式进行计算:
outwidth = (inputwidth - kernel_width + 2padding + strides) / strides
outheight = (inputheight - kernel_height + 2padding + strides) / strides
某些情况下,在卷积层之后图像大小会变小。这时候为了弥补信息的损失,会增加通道数。
池化层
用来降低图像尺寸,降低网络的计算量。包括max-pooling和average-pooling,这里面需要注意的是池化层不会改变输入的通道数,即输入和输出的通道数是相等的。
在有些网络中,为了放开对输入图像尺寸的限制,在最后一个卷积层和第一个FC层之间,加入了全局平均层,假设最后一个卷积层的输出是nnchannel,则经过全局池化层后变成11chananel。只要channel和第一个FC层的输入个数匹配即可。
Batchnormal层、Dropout层
这两个都是用来降低过拟合的,通常是在激活函数之前,有时候有了Batchnormal,可以不要Dropout。
FC层
FC层前面的所有部分,一般可以成为特征提取,我们作模型的fine-tune,一般就是拿成熟模型提取的特征,接上我们自己的FC层,只训练FC层参数(或训练后对前面部分的参数进行微调)。
FC层的稠密连接,导致大部分参数都分布在此处。因此也出现了很多去掉FC层的全卷积网络。
卷积核大小的理解
在最初的Alexnet中,卷积核的尺寸是比较大的,比如有1111的卷积核,初衷应该是为了获取足够大的感受野。后来随着CNN的发展,人们认识到若干小卷积连接能够起到和大卷积相同的作用,比如两个33的卷积核连接,感受野和一个55的卷积核是一样的,而参数却更少了。
因此后续的经典网络,常用的卷积核是33和5*5的。
通道数的变化
以VGG为例,如果图像尺寸不变,则前后两层的通道数也维持不变;如果图像尺寸减半,则通道数翻倍。