概述
卷积神经网络的提出主要是应用于图像识别,由于其效果比较显著逐渐扩展到语音识别和自然语言处理等领域。本文主要介绍
1. 卷积的概念
2. 卷积神经网络
3. 卷积神经网络在NLP中的应用
4. 总结
卷积
一维(1D)卷积
根据维基百科上的定义,一维卷积定义如下:
解释如下
1. 卷积是关于两个函数之间的某种联系。
2. 卷积是通过积分得到(离散情况下,通过累加得到),并且积分自变量和x无关
3. 卷积变换可以看做傅里叶变换,将不变量转换为变量的累加。
一维卷积示例
假设从某高处丢小球,小球有一定概率跌落不同的高度,例如
即某一个状态的卷积值是由不同状态累加得到。
二维(2D)卷积
定义如下
图片上的卷积
在图片上应用卷积可以简单的理解为某个移动窗口和图片对应矩阵的乘积,从而得到另外一个图片。例如
动态效果点击这里
卷积神经网络
概念
卷积核:一个矩阵,对应于上图中的黄色矩阵,该矩阵遍历整个原始图像可以得到一个卷积后的图片,即feature。
卷积核大小:矩阵的维度
卷积核步长:即每次移动的步长,向左或者向右步长。
卷积个数:由于一个卷积可以得到一个feature,多个卷积可以得到一些列feature
卷积层:多个卷积对原始图像处理后得到一些列feature map
采样层/池化层:对feature map的进一步操作。
网络结构
一个典型的CNN网络结构如下图:
- 一个典型的CNN网络结构包括多个卷积层、池化层、全连接层和输出层
- 卷积层的主要参数:卷积核个数、卷积核矩阵参数,输出多个卷积后的矩阵
- 池化层(pooling层):对多个feature map进行采样,常用策略avg-pooling\max_pooling
- 全连接层:一般将图片参数进行展开,后面和DNN类似
- 输出层:根据应用选择损失函数
- 参数估计,可以得到各个卷积核参数
CNN在NLP中的应用
在NLP应用中直接采用DNN的主要缺点有
1. 直接采用one-hot编码相当于词袋模型,丢失词之间的顺序
2. NLP中文本长度不一致,不能直接输入到普通DNN模型中。
CNN-NLP
在NLP中CNN的应用有一定变化,首先需要将文本通过词向量(word2vec或者Glove)转变为一个二维矩阵
Rm∗d
其中m是文本中词个数,d为词向量的维度。
1. 卷积核的选择,一般选择为
Rk∗d
,此时和文本矩阵进行一一相乘可以得到一个
Rt∗1
简单示例如下
详细解释如下:
- 输入是一个7*5的矩阵,其中包含7个输入词和d=5为词向量
- 卷积核有3中类型,每种类型两个,分别为k=2,3,4,此时有6个卷积核(也称为filter过滤器)
- 卷积过程:对于每一个卷积核和原始输入按照步长为1,得到不同类型的输出。例如第一个k=4的卷积核,可以得到R^4的输出向量
4.pooling过程:每一个feature map进行max-pooling得到一个输出- pooling结果进行展开得到R^6的向量
- 后面跟全连接层
超参数解释
宽、窄卷积
卷积层的宽窄取决于是否对输入进行填充,对于输入长度为m,卷积长度为k的卷积层
1) 如果是窄卷积,则输出向量长度为 m-k+1
2) 如果是宽卷积,则输出向量长度为 m+k-1
示意如下
步长(stride)
每次移动的步长,如果步长为d,对于输入长度为m,卷积长度为k的卷积层
1) 如果是窄卷积,则输出向量长度为 m/d-k+1
2) 如果是宽卷积,则输出向量长度为 m/d+k-1
池化层
池化层也叫subsampling层,有多种方式
1. max-pooling\avg-pooling比较好理解
2. k-pooling:取前k个最大值最为输出
3. 分段k-pooling:想对向量进行分段,每段取前k个值
4. 按照给定窗口进行采样:对输出矩阵按照一定窗口进行采样
频道(Channels)
图片处理是有RGB三个频道,相当于有多个输入矩阵。相对于NLP可以采用多个词向量作为频道或者将词、字、字符等向量组合作为不同频道。
总结
CNN在NLP上主要优势 1)可以将变长向量转换为定长输入 2)可以获取局部词顺序特征,对于分类或者简单序列化等NLP应用有较好效果。