发布时间:2024-01-06 10:00
Copyright: Jingmin Wei, Pattern Recognition and Intelligent System, School of Artificial and Intelligence, Huazhong University of Science and Technology
Pytorch教程专栏链接
本教程不商用,仅供学习和参考交流使用,如需转载,请联系本人。
在 torch.nn 中已经介绍了图像的二维卷积,下面讲解空洞卷积,转置卷积与应用于 NLP 中的二维卷积。
相对于普通卷积,空洞卷积通过在卷积核中添加空洞( 0 0 0 元素),从而增大感受野,获取更多信息。感受野为在卷积神经网络中,决定某一层输出结果中一个元素对应的输入层的区域大小,通俗解释就是特征映射上的一个点对应输入图上的区域大小。
对于一个 3 × 3 3\times3 3×3 的 2 2 2-空洞卷积运算,实际的卷积核大小还是 3 × 3 3\times3 3×3 。但是空洞为 1 1 1 ,这样卷积核就会扩充一个 7 × 7 7\times7 7×7 的图像块,但只有 9 9 9 个红色的点会有权重取值进行卷积操作。也可以理解为卷积核的大小为 7 × 7 7\times7 7×7 ,但只有图中的 9 9 9 个点的权重不为 0 0 0 ,其他均为 0 0 0 。实际卷积权重只有 3 × 3 3\times3 3×3 ,但感受野实际为 7 × 7 7\times7 7×7 。对于 15 × 15 15\times15 15×15 的,实际卷积只有 9 × 9 9\times9 9×9 。
详细的空洞卷积分析参考 torch.nn 那一章。
转置卷积的主要作用是将特征图放大恢复到原来的尺寸,其与原有的卷及操作在计算方法上没有差别。主要区别在于,转置卷积是卷积的反向过程,即卷积操作的输入为转置卷积的输出,卷积操作的输出为转置卷积的输入。
在 NLP 中,由于词嵌入层中每一行都表示一个词语,即每个词语都是有一个词向量表示的,当提取句子中有利于分类的特征时,需要从词语或字符级别提取,也就是说卷积核的宽度要你管管个覆盖完全单个词向量,即二维卷积的卷积核宽度必须等于词向量的维度。
池化操作的一个重要目的就是对卷积后得到的特征映射进行降维,常用的有最大值池化和平均值池化,前文的 torch.nn 中已有介绍。
全连接层通常会放在卷积神经网络的最后几层,起到分类器的作用。连接卷积层时,需要将卷积层的所有特征映射展开为一个向量,作为全连接网络的输入层,然后连接。
它是最早提出的一类卷积神经网络,主要用于处理手写字体(MNIST)的识别。
8 8 8 层, 5 5 5 个卷积层, 3 3 3 个全连接层,每个卷积层都包含一个 ReLU ,以及局部响应归一化( LRN )处理,卷积计算后通过最大值池化对特征映射进行降维。
卷积核逐步从 11 11 11 减小到 3 3 3 ,池化层使用大小 3 × 3 3\times3 3×3 ,步长为 2 2 2 的池化,两个全连接层分别包含 4096 4096 4096 个神经元,最后输出使用 softmax 分类器,包含 1000 1000 1000 个神经元。
import torchvision.models as models
alexnet = models.alexnet()
四种不同深度层次的卷积神经网络,分别是 11 、 13 、 16 、 19 11、13、16、19 11、13、16、19 层。
最常用的分别是 VGG16 和 VGG19 。
在 VGG 网络中,通过使用多个较小卷积核 3 × 3 3\times3 3×3 来代替一个卷积核较大的卷积层,这是它的一个重要特点。作者认为 2 2 2 个 3 × 3 3\times3 3×3 的卷积对获得的感受野相当于一个 7 × 7 7\times7 7×7 的卷积。使用小卷积一方面能减少参数,另一方面相当于进行了更多的非线性映射,进一步增强了网络的拟合能力。
它采用 2 × 2 2\times2 2×2 的池化层,并且有更多的特征映射,第一层通道为 64 64 64 ,后面每层翻倍,逐渐到了 512 512 512 个通道,使得它能提取更多信息。且它有更深的层数,能得到更宽的特征映射。
import torchvision.models as models
vgg16 = models.vgg16()
vgg19 = models.vgg19()
GoogLeNet 也称作 Inception 。它有 22 22 22 层,且没有采用全连接,参数更少。在保证算力的情况下增大网络的深度和宽度。
前几层是正常的卷积层,后面全部用 Inception 堆叠而成。
同时它添加了两个辅助分类器,增加低层网络的分类能力,防止梯度消失,增加网络正则化。
import torchvision.models as models
googlenet = models.googlenet()
应用于自然语言处理的 CNN 。在网络结构中,针对一个句子的词嵌入使用以层卷积层进行文本信息的提取。在卷积操作时,使用高度为 2 、 3 、 4 2、3、4 2、3、4 的卷积核,每个有 2 2 2 个,共 6 6 6 个( 2 2 2 个 2 × 5 2\times5 2×5 , 2 2 2 个 3 × 5 3\times5 3×5, 2 2 2 个 4 × 5 4\times5 4×5)。因此会得到 6 6 6 个向量,对此 6 6 6 个各取一个最大值进行池化,然后拼接成一个列向量,该列向量即为通过一层卷积操作提取到的有用信息。
其他的经典卷积网络,比如说 NiN, ResNet, DenseNet 的结构和代码实现,将在后面章节介绍。