最近为了完成作业,要做speaker separation,看的一篇论文Conv-TasNet里用到了相当多的卷积,读起来非常费劲。
遂决定找出下载了很久一直没看的花书Deep Learning,好好学一学卷积相关的部分。
卷积网络是指那些至少在网络的一层中使用卷积运算来替代一般的矩阵乘法运算的神经网络。
1. 什么是卷积运算?
本科是通信狗,本来对各种信号领域的卷积,不管是连续还是离散的,都算是相当熟悉的。
但是需要注意的是,深度学习领域中用到的卷积运算和其他领域(例如工程领域以及纯数学领域)中的定义并不完全一致。
书中首先由一个例子引入卷积运算的概念,这个例子和我们以前所学的连续一维卷积是一致的。
假设我们正在用激光传感器追踪一艘宇宙飞船的位置。我们的激光传感器给出一个单独的输出x(t)x(t)x(t),表示宇宙飞船在时刻ttt的位置。xxx和ttt都是实值的,这意味着我们可以在任意时刻从传感器中读出飞船的位置。
现在假设我们的传感器受到一定程度的噪声干扰。为了得到飞船位置的低噪声估计,我们对得到的测量结果进行平均。显然,时间上越近的测量结果越相关,所以我们采用一种加权平均的方法,对于最近的测量结果赋予更高的权重。我们可以采用一个加权函数w(Δt)w(\\Delta t)w(Δt)来实现,其中Δt\\Delta tΔt表示测量结果距当前时刻的时间间隔。(个人觉得书中使用20000w(a)w(a)w(a)容易产生误导)
如果我们对任意时刻都采用这种加权平均的操作,就得到了一个新的对于飞船位置的平滑估计函数:s(t)=∫x(a)w(t−a)das(t) = \\int x(a)w(t-a)das(t)=∫x(a)w(t−a)da
这种运算就叫做卷积(convolution)。卷积运算通常用星号表示:s(t)=(x∗w)(t)s(t) = (x*w)(t)s(t)=(x∗w)(t)
上图中的求和式,i,j为定值,m,n为变量。
下面是第一个要注意的点:
我们平时说的卷积,实际上用的是下面这个公式。
下面是一个在二维张量上进行卷积运算的例子:
可以看到核不断移动,和输入矩阵做同位元素对应相乘并求和。
这个操作对应的正是互相关函数的公式,如果去套二维离散卷积公式,是无论如何也想不通道理的。
2. 动机
卷积运算通过三个重要的思想来帮助改进机器学习系统:
- 稀疏交互
- 参数共享
- 等变表示
传统的神经网络使用矩阵乘法来建立输入与输出的连接关系,每一个输出单元与每一个输入单元都产生交互。
然而,卷积网络具有稀疏交互(sparse interactions)(也叫做稀疏连接(sparse connectivity)或者稀疏权重(sparse weights))的特征。这是使核的大小远小于输入的大小来达到的。
(上)当s是由核宽度为3 的卷积产生时,只有三个输出受到x3x_3x3的影响。
(下)当s是由矩阵乘法产生时,连接不再是稀疏的,所以所有的输出都会受到x3x_3x3的影响。
参数共享(parameter sharing)是指在一个模型的多个函数中使用相同的参数。
- 在传统的神经网络中,当计算一层的输出时,权重矩阵的每一个元素只使用一次,当它乘以输入的一个元素后就再也不会用到了。
- 在卷积神经网络中,核的每一个元素都作用在输入的每一位置上(是否考虑边界像素取决于对边界决策的设计)。卷积运算中的参数共享保证了我们只需要学习一个参数集合,而不是对于每一位置都需要学习一个单独的参数集合。
一个输出单元s3s_3s3以及x中影响该单元的输入单元。这些单元被称为s3s_3s3的接受域(receptive field)
处于卷积网络更深的层中的单元,它们的接受域要比处在浅层的单元的接受域更大。如果网络还包含类似步幅卷积或者池化之类的结构特征,这种效应会加强。
这意味着在卷积网络中尽管直接连接都是很稀疏的,但处在更深的层中的单元可以间接地连接到全部或者大部分输入图像。
对于卷积,参数共享的特殊形式使得神经网络层具有对平移等变(equivariance)的性质。
如果一个函数满足输入改变,输出也以同样的方式改变这一性质,我们就说它是等变(equivariant) 的。
当处理时间序列数据时,这意味着通过卷积可以得到一个由输入中出现不同特征的时刻所组成的时间轴。如果我们把输入中的一个事件向后延时,在输出中仍然会有完全相同的表示,只是时间延后了。
3. 池化
池化函数使用某一位置的相邻输出的总体统计特征来代替网络在该位置的输出。
- 最大池化函数
- 平均池化函数
不管采用什么样的池化函数,当输入作出少量平移时,池化能够帮助输入的表示近似不变(invariant)。
(未完待续)