为什么需要卷积神经网络
(1)全连接层参数太多:100x100的图片作为输入,隐藏层设为1000,则计算一次有10的7次方个参数
(2)需要局部不变性:当对图片进行平移、缩放、旋转等操作时,我们认为这些操作并不会影响这张图片的语义,但是对于全连接层,它并不能有效的提取这些局部不变的特征
卷积
卷积就是信号的延迟累积
信息的衰减率w的组合称为滤波器或卷积核
卷积名称的由来
w与x的乘积是相反的,w1*xt,w2*xt-1,w3*xt-2,升序与降序相乘,在图上表示出来的时候就像被反转了,被翻卷着做乘积,所以叫作卷积
假设卷积核为[-1, 0, 1],则上面的-1是由 (1*1) + (0*-1) + (-1*2) = -1得到的
卷积前长度为7,卷积后长度为5,卷积核长度为3。所以 input-kernel+1 = output
卷积的作用
近似微分
1/2*x(t+1) + 0*x(t) + -1*x(t-1)得到上式
将x'(t)换元带入上图红色式子,得出x''(t),其也可用卷积表示
滤波
找出序列信号中的高频信息和低频信息
卷积扩展
滑动步长与零填充
卷积类型
二维卷积
特征提取
第一个为高斯卷积核,中间1/4,上下左右1/8,角上1/16,意义是用周围信息取填补噪声点
第二个为边缘提取,中间-4,上下左右1,意义是周围四个点加起来减去中间这个点,可以提取图像的高维信息
第三个为有针对性的提取,用右上角的值减去左下角的值,意义是提取主对角线方向的特征
卷积神经网络
权值共享
每一根红色、绿色、蓝色的线,对应的权重w都是相同的,加上bias,一共只有4个参数需要学习
互相关
对于标准的卷积操作,计算时需要翻转卷积核进行计算,然而对于神经网络而言,参数的位置并不重要,w3*xt可以是w1*xt,值会随着学习不断改变
因此在日常的卷积中默认w与x正序乘正序这种现象为互相关
多卷积核
卷积核里面的参数都是随机初始化的,所以每个卷积核不一样。多个卷积核去计算,最后得到的结果代表提取出的不同特征,把这些不同卷积核得出的结果个数称为通道数或深度
利用多卷积核可以实现特征映射
特征映射
从D个特征,映射到P个特征,D与P的关系是:P相当于是通过D的全连接层得出来的,P中每一个结果都与D中所有的特征有关
蓝色是3个feature map,想通过卷积来特征映射得到2个feature map,需要6个卷积核
左边三个卷积核计算结果相加+bias等于绿色feature map中的结果,右边同理
对于绿色的feature map来说,它们与蓝色的feature map是全连接关系
特征映射三维图
汇聚层(池化层)
卷积层减少了需要训练的参数,但是并没有大幅减少神经元个数
早期的时候,默认卷积步长为1,所以引入了池化层,图中做的是最大池化,去每个颜色中的最大值
卷积网络结构
感受野
卷积层越深,一个神经元对应的信号就越多,感受野就越大
其他种类卷积
空洞卷积
转置卷积/微步卷积
卷积是越卷越小,反卷积就是越卷越大,通过减小步长来实现
例如对2x2的矩阵中间填充0,如何对周边再进行零填充,这样原来的1个步长就相当于现在的1/2步长,所以每次卷积就能放大一倍
典型的卷积网络
1x1卷积作用
如上图右下角,1x1卷积将不同通道、不同深度的同一位置的特征进行加权求和,做到了特征融合
同时,特征的深度与卷积核大小无关,与卷积核数量有关,因此1x1卷积可以增加或者降低深度
实验中发现想让神经网络学习出一个f(x, θ)去逼近一个线性函数h(x)太难了,因此期望一个非线性的h(x),让f(x, θ)去逼近h(x) - x
将组合的卷积块看作f(x, θ),则得到了我们的目标函数h(x) = x + (h(x) - x)
梯度有个1,保证了层数加深时,梯度也不会太小,不容易出现梯度消失
应用到文本数据
Ngram
UNIGRAMS提取一个个词,但是丢掉了句子的语义信息
BIGRAMS提取两个连续词,TRIGRAMS提取三个连续词
但是固定提取几个连续词并不好,可能一句话中有的两个更好,有的三个更好,于是有了Ngram,像滑动窗口一样提取N个连续词
Ngram是用来在离散的信号上提取特征的,而卷积是在连续的信号上提取特征的,因此需要先把文本序列变成连续的信号
通过一个look up table把单词变成一个向量
Text CNN
卷积核大小不同,最后得出的向量长度也不同,需使用Max over time pooling处理得到Pooling层的结果