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

1.卷积的优点

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

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

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

2. 卷积操作

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

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

在这里插入图片描述

图1. 单通道卷积操作

3. 填充和步幅

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

在这里插入图片描述

图2. 填充

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

步幅的作用: 为了高效计算或是缩减采样次数,调整数据维度
在这里插入图片描述

图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. 多通道输入

输入包含多个通道时,需要构造一个与输入数据具有相同输入通道数的卷积核,每个通道输入的二维张量和卷积核的二维张量进行互相关运算,再对通道求和得到输出结果
在这里插入图片描述

图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 卷积层通常用于调整网络层的通道数量和控制模型复杂性

在这里插入图片描述

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

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可消除句子间长度不同差异

在这里插入图片描述

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值