卷积神经网络(CNN)
文章目录
1.卷积
-
卷积的定义:卷积是一种人为规定的运算规则
连续形式: ( f ∗ g ) ( n ) = ∫ − ∞ ∞ f ( x ) g ( n − x ) d x (f*g)(n)=\int_{-\infty}^{\infty}f(x)g(n-x)dx (f∗g)(n)=∫−∞∞f(x)g(n−x)dx
离散形式: ( f ∗ g ) ( n ) = ∑ x = − ∞ ∞ f ( x ) g ( n − x ) (f*g)(n)=\sum_{x=-\infty}^{\infty}f(x)g(n-x) (f∗g)(n)=∑x=−∞∞f(x)g(n−x)
-
卷积在图像处理上的应用
将图片视作关于像素值的二维矩阵,通过选取不同的卷积核(g矩阵)对图像做卷积运算(以每个像素点为中心选取适当大小的f矩阵),可以得到不同效果的图片,如模糊处理,边缘锐化。(这里的原理涉及到数字信号相关的知识,mark一下,以后有机会再了解~)既然卷积运算能够从原始图片中提取出特定效果的图片,那么理论上将卷积运算应用到神经网络中也是可行的。
-
卷积神经网络结构图
2.卷积层(Convolutional)
(1)准备
- CNN中的卷积操作和规定的卷积操作并不完全相同,CNN中的卷积运算时并不需要将卷积核翻转,更准确的说法是CNN中进行的是协相关运算。
- CNN中的卷积核并不是预先确定的,我们将其视作神经网络的参数通过训练得到。
- 在介绍CNN卷积运算时,一般将一维向量视作二维矩阵。
(2)卷积运算
假设有一个100(10x10)的输入向量,选取规格为9(3x3)的卷积核A。
- 局部感受野(local receptive fields):根据选取卷积核的规格在输入向量中选取的参与卷积运算的最小单元。
- 卷积核A:卷积核是CNN实现卷积的关键,卷积核上每个位置都有一个 ω \omega ω系数,一个卷积核有一个 b b b偏置系数。卷积核就是CNN中我们需要训练的参数集合。
- 跨距:在上图中,局部感受野没移动一个单位就能在卷积层产生一个新的神经元,此时的跨距即为1。显然,跨距的选取直接决定了卷积层神经元的数目。
(3)共享参数
和全连接神经网络比起来卷积神经网络的需要的参数个数大大降低,在卷积层上由于许多神经元都由相同的卷积核计算而来,故这些神经元之前是共享参数的。以上图为例,我们仅仅用到了9个共享权重和1个共享偏置。
(4)多卷积核
一个卷积核提取特征的效果是有限的,在实际应用中常使用多个卷积核。
3.池化层(Pooling)
(1)池化
紧接着卷积层之后的池化层的目的是减少卷积层得到的特征数,池化层对卷积层中得到得特征矩阵分块,对每一个小分块应用池化算法计算池化值,常用的池化层分块大小为2x2
(2)池化算法
- 最大值池化:选取分块中最大的值作为输出;
- 均值池化:使用分块中激活值的平均值作为输出;
- L2池化:分块中激活值平方和的平方根作为输出。
4.膨胀卷积/空洞卷积(Dilated Convolution)
(1)Dilated Convolution在有效参数不变的情况下扩充卷积核,有效参数之间的空洞用0填充,这里引入一个参数即膨胀率(dilation rate)。实际上,这样改变了卷积核的结构,也被认为扩大了局部感受野。
(2)膨胀率对卷积核的影响存在如下公式
d
i
l
a
t
e
d
_
k
e
r
n
e
l
s
i
z
e
=
d
i
l
a
t
i
o
n
_
r
a
t
e
∗
(
s
t
a
n
d
a
r
d
_
k
e
r
n
e
l
s
i
z
e
−
1
)
+
1
dilated\_kernelsize=dilation\_rate*(standard\_kernelsize-1)+1
dilated_kernelsize=dilation_rate∗(standard_kernelsize−1)+1