卷积网络(convolutional network) 又称卷积神经网络(convolutional neural network,CNN).
9.1 卷积运算
1.平缓估计函数:
s(t) = \int x(a) w(t-a) da
w(a)为加权函数对于函数x(a)的不同位置进行加权
该运算称为卷积(convlution)。其用*表示为:
s(t) = (x * w) (t)
在卷积网络中
x称为输入(input)
w称为核函数 (kernel function)
s 输出有时称为特征映射 (feature map)
2. 离散卷积和互关联函数
离散卷积:
s(t) = (x*w)(t) = \sum_{a = -\infty}^{\infty}x(a)w(t-a)
二维形式:
S(i,j) = (I*K)(i,j) = \sum_{m}\sum_{n} I(m,n)K(i-m,j-n)
由卷积的交换性质:
S(i,j) = (I*K)(i,j) = \sum_{m}\sum_{n} I(i-m,j-n)K(m,n)
一般在神经网络中使用互关联函数(cross-correlation),并称之为卷积。
互关联函数:
S(i,j) = (I*K)(i,j) = \sum_{m}\sum_{n} I(i+m,j+n)K(m,n)
卷积对应一个稀疏矩阵。因为核远小于输入。
离散形式的卷积可以看做矩阵乘法。对单变量离散卷积,矩阵每行的元素都为上一行对应位置平移一个单位的元素相同。该矩阵称为Toeplitz矩阵。对于二维情况,则对应双重分块循环矩阵(doubly block circulant matrix)
9.2 动机
卷积运算改进机器学习系统的三个重要思想:
-
稀疏交互(saprse interactions)
又称稀疏权重(sparse weights),这是因为核大小远小于输入大小。eg:当输入图像包含成千上万像素点,只采用几十个到上百个像素点的和来检测小而有意义的特征。
减少了存取需求,提高统计效率。 -
参数共享(parameter sharing)
是指,在一个模型中的多个函数中使用相同参数。卷积运算共享一个卷积核,保证我们只需学习一个参数集,而非在每一个位置学习同一个参数集。 -
等变表示(equivariant represetations)
如果一个函数满足输入改变,而输出也以同样方式改变则该函数是等变的。这在处理时间序列中事件延后,图像序列中对象的移动是非常有利的。
而一些其他的变换在卷积中并非必然。比如图像放缩和旋转变换,则需要其他机制处理。
9.3 池化
卷积网络中一个典型层包括三级:卷积级,探测级,池化级。
下图为典型卷积网络基本组件:
探测级(detector stage)采对于来自卷积级的每一个线性激活响应都会通过一个非线性激活函数。例如,Relu, Sigmoid, Tanh等。
池化级(pooling stage)采用池化函数来调整输出
池化函数
池化函数采用某一个位置相邻输出的总体统计特征来代替网络在该位置的输出。例如,最大池化函数(max pooling)给出相邻矩形区域的最大值。
- 常用函数
最大池化函数
相邻矩形区域内的平均值
L^2范数
基于距中心像素距离的加权平均函数 - 池化函数的性质
池化函数帮助输入的表示近似不变性(invariant)。平移不变性指当我们对输入进行少量平移时,经过池化函数后大多数输出不变。
使用池化
可以看做增加了无限强的先验:该层学得的函数具有对少量平移的不变性。使得池化极高提高统计效率。 - 池化的网络参量
池化综合了各个邻居的反馈,使得池化单元少于探测单元成为可能。
池宽:每一个池化单元接收的输入数据长度。
步幅:每一个池化单元间相隔的输入数据长度。
池化对于处理不同大小的输入具有重要作用。池化区域通过调整其偏置大小,使得分类层总能接受到相同数量的统计特征,而不管最初输入的大小。
9.4 卷积与池化是一个无限强的先验
先验概率分布(prior probability distribution)(备注:第5章,补)。该分布是模型参数的概率分布,刻画我们看到数据之前合理模型的理念。
1.先验
先验被认为是强或如果取决于先验中概率密度的集中程度。
- 弱先验:具有较高熵值,参数改变自由性高。eg,方差较大的高斯分布。
- 强先验:具有较低熵值,参数改变自由性低。eg,方差很小的高斯分布。
2.卷积与池化
卷积类似无限强先验的全连接网络:1.一个隐藏单元权重必须和其邻居相同;2.出隐藏单元小的连续空间外,其余权重均为零。
池化也类似:1.只包含局部连接关系;2.具有少量平移不变性。
3.相应启示
卷积与池化可能导致欠拟合。卷积和池化只有在先验假设合理且正确时才能使用。如果一项任务以来保存精确空间信息,那么在其所有特征上使用池化会增大训练误差。
比较卷积模型统计表现时,只能以基准中其他卷积模型作为比较对象。
9.5 基本卷积函数的变体
当提到神经网络中的卷积时,我们通常指由多个并行卷积组成的运算。这是因为单个核只能提取一种类型的特征,而我们希望提取网络中每一个层在多位置上的多种类型的特征。
1.卷积的多维输入和多维输出
1.输入举例
以彩色图像为例,其具有颜色索引:红、绿、蓝三种颜色的亮度,以及其他两个索引对应每个通道上的空间坐标。而在神经网络批量处理计算中的多个图像实例,还则对应相应的批处理索引(在此忽略)。因此,输入是3维张量。
2.多维卷积公式
核张量K为四维,对应元素K_{i,j,k,l},表示输出通道i的一个单元和处于输入通道j中一个单元的连接强度,并且在输入单元中具有k行j列的偏置。
输入张量V为三维,对于元素V_{i,j,k},表示在i通道中第j行,第k列的值。
输入张量Z为三维,对于元素Z_{i,j,k},表示在i通道中第j行,第k列的值。
则卷积公式如下:
Z_{i,j,k} = \sum_{l,m,n} V_{l,j+m-1,k+n-1}K_{i,l,m,n}
由于在线性代数中,索引通常从1开始,因此有-1项。在C或Python中则更简洁。
2.步幅卷积
为降低计算开销,通常会跳过核中的一些位置,虽然提取特征没有先前那样好。该过程可以看做对于全卷积函数输出的下采样(downsampling)。如对于输出每隔方向每隔s个像素进行采样,则下采样卷积函数c为:
Z_{i,j,k} = \sum_{l,m,n} V_{l,(j-1)\times s+m,(k-1)\times s+n}K_{i,l,m,n}
s为下采样卷积的步幅(stride)。
3.卷积填充
在卷积网络中的实现,能够隐含对输入V用零填充(pad)使其加宽,以防止宽度缩减。
相应的填充策略有:
有效卷积(valid) 不使用零填充,输出width = m -k +1,缺点:限制层数
相同卷积(same) 零填充保证输出和输入相同, 输出width = m,缺点:边缘像素欠表示
全卷积(full) 使用足够多的零填充,输出width = m +k -1,缺点:输出像素靠近边缘部分相比中间更少像素,更难学习一个在卷积映射的所有位置都表现不错的单核更为困难。
通常零填充策略最有数量为:有效卷积核相同卷积之间的某个位置。
4.局部连接层和平铺卷积
1.局部连接层
在一些情况下,我们只采用一些局部连接的网络层。在该情况下,我们的多层感知机对应的邻接矩阵是相同的,但每个连接都有自己的权重,用六维张量W表示。
W索引分别是:输出通道i,输出行j和列k,输入通道l,输入通道l,输入行偏置m和列偏置n。
局部连接层的线性部分可表示为:
Z_{i,j,k}=\sum_{l,m,n,}V_{l,j+m-1,k+n-1}W_{i,j,k,l,m,n}
这有时也称为非共享卷积(unshared convolution)。
它并不共享参数,各个连接层相互独立。
这对于识别特定位置的图像位置是极其有利的。eg:对于人脸特定特征不会出现在全空间上。
2.平铺卷积
平铺卷积(tiled convolution) 对于局部连接层和卷积层进行了折中。只学习一组卷积核进行空间上的循环利用。
这意味着临近位置上拥有不同过滤器,就像局部连接层一样,但是对于这些参数的存取需求仅仅增长常数倍。
令K是一个6维张量,其中两维对应输出映射中不同位置。输出位置在每个方向上对于K有t个不同核组成的集合进行循环。如果t为输出宽度,则为局部连接层,如果t为1,则为传统卷积。
相应公式如下:
Z_{i,j,k}=\sum_{l,m,n,}V_{l,j+m-1,k+n-1}K_{i,l,m,n,j\%t+1,k\%t+1}
3.限制通道连接
限制每一个输出通道i仅仅是输出通道l的一部分函数。通用的方法有:
输出的前m个通道仅仅连接到输入的前n个通道;输出的后m个通道仅仅连接到输入后n个通道。
5.卷积网络的梯度运算
为实现神经网络的学习,通常需要除了卷积以外三其他运算。
一般来说包括三种运算:卷积、从输出到权重的反向传播和从输出到输入的方向传播。这里提供一个二维的版本:
1.核的反向传播
假设训练的神经网络为步幅s的步幅卷积,卷积核为K,作用于多通道图像V,定义为Z=c(K,V,s)。损失函数$J(V,K)。在反向传播过程中,可以得到张量G满足:
G_{i,j,k} = \frac{\partial}{\partial Z_{i,j,k}}J(V,K)
核的反向传播矩阵为:
g(G,V,s)_{i,j,k,l} = \frac{\partial}{\partial K_{i,j,k,l}}J(V,K)=\sum_{m,n}\frac{\partial J(V,K)}{\partial Z_{i,m,n}}·\frac{\partial Z_{i,m,n}}{\partial K_{i,j,k,l}}
因此,核的反向传播矩阵为:
g(G,V,s)_{i,j,k,l} =\sum_{m,n}G_{i,m,n}V_{j,(m-1)\times s+k,(n-1)\times s+l}
2.输出到输入的反向传播
如果神经网络该层并非网络底层,则需要对V求误差进一步方向传播。得到函数如下,(推导过程忽略)。
h(K,G,s)_{i,j,k} = \frac{\partial J(V,k)}{\partial V_{i,j,k,l}}=\sum_{l,m}\sum_{n,p}\sum_q K_{q,i,m,p}G_{q,l,n}
其中(l-1)\times s+m=j \quad (n-1)\times s+p=j
3.偏置项
在非线性运算前,通常会添加偏置项。对于局部连接层和平铺卷积层都比较简单,而对于传统卷积通常做法是每一个输入通道上设定一个偏置项,该偏置在所有位置上共享。
然而输入是已知大小,也可以在输出映射的每一个位置上单独学习一个偏置。缺点:降低模型统计效率;优点:校正不同位置的统计差异。
9.6 数据类型
卷积网络是使用数据通常包括多个通道,每个通道是时间上或空间上某一个点不同观测量。卷积网络的一个优点是可以处理可变的空间尺度的输入。
卷积可以视为矩阵乘法,相同卷积核为每种大小输入引入一个不同大小的双重分块循环矩阵。当输出允许和输入具有可变大小时,不需要进一步设计。
当网络必须固定输出是,可以插入池化层,池化区域的大小与输入成比例,以固定池化输出。
意义:可变尺寸的输入,仅仅对于同种事物的不同量观察才有意义。
9.7高效卷积算法
现代卷积网络需要超过百万个单元的网络。在多数情况下,可以通过选择适当的卷积算法来加速卷积。
传统卷积:区域和通道并行。区域\times通道
可分离卷积(separable):先区域,再通道。区域+通道
9.8 随机或无监督特征
卷积网络最昂高贵的部分是学习特征。减少相应计算成本的方法是使用那些不是由监督方式训练得到的特征。其中,具有以下三种策略得到卷积核:
-
简单随机初始化卷积核
-
手动设置卷积核
设置每一个核在特定方向或尺度来检测边缘;使用k均值聚类算法来应用小图像块,然后使用每个学得的中心作为卷积核;使用赋予随机权重的滤波器。 -
学习特征
不需要每个梯度计算中使用完整的前向和反向传播算法
使用贪心逐层预训练,单独训练第一层,一次性从第一层提取所有特征后,用这些特征单独训练第二层,以此类推。
网友评论