卷积神经网络CNN及其在NLP中应用

1.卷积的优点

  • 在图像处理中,卷积层通常比全连接层需要更少的参数,但依旧获得高效用的模型

    设输入图像为28X28,隐藏层有15个神经元,卷积核size=5*5
    对于全连接网络总共参数为:28x28x15=11760
    对于卷积网络所需参数数量:5x5=25

  • 多个输入和输出通道使模型在每个空间位置可以获取图像的多方面特征

2. 卷积操作

卷积层对输入和卷积核权重进行互相关运算,并在添加标量偏置之后产生输出

互相关和卷积的关系: 卷积层执行互相关运算并学习得到的卷积核为K, 其他条件不变,当这个层执行严格的卷积时,学习的卷积核为 K′ ,那么 K′ 在水平和垂直翻转之后将与 K 相同。由于卷积核是从数据中学习到的,因此无论这些层执行严格的卷积运算还是互相关运算,卷积层的输出都不会受到影响。

卷积神经网络CNN及其在NLP中应用_第1张图片

图1. 单通道卷积操作

3. 填充和步幅

填充的作用: 防止卷积过程中丢失边缘像素,也可使得输入输出形状相同

卷积神经网络CNN及其在NLP中应用_第2张图片

图2. 填充

卷积神经网络中卷积核的高度和宽度通常为奇数,例如1、3、5或7。 选择奇数的好处是,保持空间维度的同时,我们可以在顶部和底部填充相同数量的行,在左侧和右侧填充相同数量的列

步幅的作用: 为了高效计算或是缩减采样次数,调整数据维度
卷积神经网络CNN及其在NLP中应用_第3张图片

图3. 垂直步幅为 3 ,水平步幅为 2 的二维互相关运

输出形状

⌊ ( n h − k h + p h + s h ) / s h ⌋ × ⌊ ( n w − k w + p w + s w ) / s w ⌋ \left\lfloor\left(n_{h}-k_{h}+p_{h}+s_{h}\right) / s_{h}\right\rfloor \times\left\lfloor\left(n_{w}-k_{w}+p_{w}+s_{w}\right) / s_{w}\right\rfloor (nhkh+ph+sh)/sh×(nwkw+pw+sw)/sw

n h n_h nh:输入的行数
k h k_h kh:卷积核的函数
p h p_h ph:padding的行数
s h s_h sh:步幅

4. 多通道输入

输入包含多个通道时,需要构造一个与输入数据具有相同输入通道数的卷积核,每个通道输入的二维张量和卷积核的二维张量进行互相关运算,再对通道求和得到输出结果
卷积神经网络CNN及其在NLP中应用_第4张图片

图4. 两个输入通道的互相关计算

多通道输出
可以将每个通道看作是对不同特征的响应,因此每一层有多个输出通道是至关重要的。输出通道个数与卷积核个数相同,如卷积核的维度为 c o × c i × k h × k w c_{o} \times c_{i} \times k_{h} \times k_{w} co×ci×kh×kw c 0 c_0 c0是卷积核个数, c i c_i ci是卷积核通道数)那么输出通道数为 c 0 c_0 c0

5. 1*1卷积层

1×1 卷积失去了卷积层的特有能力——在高度和宽度维度上,识别相邻元素间相互作用的能力。 其实 1×1 卷积的唯一计算发生在通道上。如下图所示:可以将 1×1 卷积层看作是在每个像素位置应用的全连接层1×1 卷积层通常用于调整网络层的通道数量和控制模型复杂性

卷积神经网络CNN及其在NLP中应用_第5张图片

图5. 具有3个输入通道和2个输出通道的 1×1 卷积核

6. 池化层

池化层由一个固定形状的窗口组成,该窗口根据其步幅大小在输入的所有区域上滑动,池化窗口从输入张量的左上角开始,从左往右、从上往下的在输入张量内滑动。在池化窗口到达的每个位置,它计算该窗口中输入子张量的最大值或平均值

卷积神经网络CNN及其在NLP中应用_第6张图片

图6. 形状为 2×2 的最大池化

与卷积层一样,池化层可以通过填充和步幅以获得所需的输出形状

在处理多通道输入数据时,池化层在每个输入通道上单独运算,而不是像卷积层一样在通道上对输入进行汇总。 这意味着池化层的输出通道数与输入通道数相同

作用:

  • 减轻卷积层对位置的过度敏感
  • 减少空间维度

7. NLP中CNN的应用textCNN

  • 输入层是将一个句子所有单词的词向量拼接成一个矩阵,每行代表一个单词(列数固定=词向量维度)
  • 卷积核大小为 [ n u m _ f i l t e r , f i l t e r _ s i z e , e m b e d d i n g _ s i z e ] [num\_filter, filter\_size, embedding\_size] [num_filter,filter_size,embedding_size], filter_size代表卷积核纵向上包含单词数
  • 卷积核只能在纵向上移动
  • 卷积输出为 [ n u m _ f i l t e r , n , 1 ] [num\_filter, n, 1] [num_filter,n,1], 不同尺寸的卷积n不同
  • pooling操作就是将卷积得到的列向量最大值提取出来,pooling操作后会得到一个num_filter(卷积核数目)维行向量,若之前未对句子进行padding操作,句子长度不同,卷积后列向量维度也不同,通过pooling可消除句子间长度不同差异

卷积神经网络CNN及其在NLP中应用_第7张图片

你可能感兴趣的:(自然语言处理,cnn,自然语言处理,深度学习)