卷积神经网络详解
前言
近几年来,随着计算机性能提升及大数据治理技术的成熟,深度学习也在快速发展,基于卷积神经网络的深度学习网络在各个领域大放异彩,在计算机视觉领域更是取得了空前的成绩。
一、什么是卷积
首先介绍一下卷积的概念,跳出卷积神经网络,在泛函分析中,卷积(convolution)是通过两个函数f和g生成第三个函数的一种数学算子,表征函数f与g经过翻转和平移的重叠部分的面积,其物理意义是一个函数在另一个函数上的加权叠加(离散的情况)或积分(连续的情况)。这个加权叠加(积分)描述了一个动态过程,表达了系统不断衰减又不断受到激励的综合结果。
其连续定义的数学表达式为
(
f
×
g
)
(
n
)
=
∫
−
∞
+
∞
f
(
τ
)
g
(
n
−
τ
)
d
τ
{\Large (f\times g)(n)=\int_{-\infty }^{+\infty } f(\tau )g(n-\tau )d\tau }
(f×g)(n)=∫−∞+∞f(τ)g(n−τ)dτ
其离散定义的数学表达式为
(
f
×
g
)
(
n
)
=
∑
τ
=
−
∞
+
∞
f
(
τ
)
g
(
n
−
τ
)
{\Large (f\times g)(n)=\sum_{\tau =-\infty}^{+\infty } f( \tau )g(n-\tau )}
(f×g)(n)=τ=−∞∑+∞f(τ)g(n−τ)
不管是连续还是离散,都有一个共同的特点,即函数f的参数加上函数g的参数等于n.
举例说明
小明到银行存入1000元,年利率为3%,按复利计算6年后可以的发哦1000*(1+3%)^6元,如下表所示
在该笔钱存入1年后,小明又到银行存入1000元,年利率仍然为3%,按照复利进行计算,5年后得到的钱的总数如表所示
以此类推,小明每年都到银行存入1000元,直到第六年。其获取的总收益如表所示。
我们可知到第六年小明能拿到的总收益为6662.5元,用数学公式简化上面的过程,即
(
f
×
g
)
(
t
)
=
∑
t
=
0
6
f
(
t
)
g
(
6
−
t
)
{\Large (f\times g)(t)=\sum_{t=0}^{6 } f( t )g(6-t )}
(f×g)(t)=t=0∑6f(t)g(6−t)
其中f(t)=1000,g(6-t)=1.03^(6-t)
式中,f(t)为小明的存钱函数,每年固定存入1000元;g(t)为每年存入钱的复利计算函数。小明最终得到的收益,就是他的存钱函数和复利计算函数卷积的结果。当然,这是离散的情况,如果考虑连续的情况下。假设小明从0到t这段时间内,每时每刻都到银行存钱,他的存钱函数为,银行的复利计算公式为,则小明到时间t能够获取的总收益为
f
(
τ
)
(
0
≤
τ
≤
t
)
{\normalsize f(\tau )(0\le \tau \le t)}
f(τ)(0≤τ≤t)
银行的复利计算公式为
g
(
t
−
τ
)
=
1.0
3
t
−
τ
{\normalsize g(t-\tau )=1.03^{t-\tau } }
g(t−τ)=1.03t−τ
则小明到时间t能够获取的总收益为
∫
0
t
f
(
τ
)
g
(
t
−
τ
)
d
τ
=
∫
0
t
f
(
τ
)
(
1.0
3
t
−
τ
)
d
τ
{\Large \int_{0}^{t} f(\tau ) g(t-\tau )d\tau = \int_{0}^{t}f(\tau ) (1.03^{t-\tau } )d\tau }
∫0tf(τ)g(t−τ)dτ=∫0tf(τ)(1.03t−τ)dτ
这就是标准的卷积公式。
再如求两枚骰子点数和为7的概率可以分为以下多种情况考虑:
第一枚骰子的点数 | 1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|---|
第二枚骰子的点数 | 6 | 5 | 4 | 3 | 2 | 1 |
将所有情况考虑在内,概率和公式如下
(
f
×
g
)
(
n
)
=
∑
n
=
1
6
f
(
n
)
g
(
6
−
n
)
{\Large (f\times g)(n)=\sum_{n=1}^{6}f(n)g(6-n)}
(f×g)(n)=n=1∑6f(n)g(6−n)
其中f(n)为骰子1点数为n的概率,g(7-n)为骰子2点数为7-n的概率。将所有情况的概率求出来相加就可得到两枚骰子点数和为7的概率。
回到卷积神经网络中的卷积操作,也是相同的情况。3X3卷积核进行卷积操作大家都比较熟悉,如下图所示可以看成是一个3X3卷积核,其中的数字代表坐标。
卷积核进行卷积操作就是将卷积核与原图一个3X3大小的位置进行对应元素相乘然后再相加得到卷积后的结果。这是我们都知道的卷积过程,但是也会偶尔听说卷积操作是需要把卷积核旋转180度,然后在和原图位置进行相应元素相乘然后相加。其实单纯的卷积操作是需要这样的。只是在卷积神经网络中卷积核中的参数是通过数据训练出来的,因此进不进行翻转操作也就无所谓了。为什么卷积操作需要翻转180度之后再进行矩阵的相乘呢?通过卷积的思想我们可以写出二维卷积的公式如下图所示
(
f
×
g
)
(
x
,
y
)
=
∑
x
=
1
3
∑
y
=
1
3
f
(
x
,
y
)
g
(
4
−
x
,
4
−
y
)
{\Large (f\times g)(x,y)=\sum_{x=1}^{3}\sum_{y=1}^{3}f(x,y)g(4-x,4-y) }
(f×g)(x,y)=x=1∑3y=1∑3f(x,y)g(4−x,4−y)
其中f(x,y)是指卷积核坐标为(x,y)的位置的数字,g(4-x,4-y)同理为原图被卷积位置坐标为(4-x,4-y)的数字。通过公式我们可以看出卷积核坐标为(1,1)位置的数字乘上被卷积位置坐标为(3,3)位置的数字。同理可知其他位置的对应相乘的位置坐标。可知确实需要将卷积核旋转180度后进行对应位置相乘后相加才满足卷积公式的要求。
二、卷积解决什么问题
1.进行图片分类不需要看完整张图片,我们知道进行图片分类时不需要将整个图片都看完才能进行识别,全连接层网络需要将整张图片全部输入,这样就会造成参数过于巨大,使模型训练陷入困难。而且输入整张图片进行识别还会额外引入干扰信息造成模型准确性下降。通过卷积操作可以解决这个问题,通过设置卷积核可以对图片的部分进行特征的识别。
2.分类问题只需要识别某些特定部位,但不同物体需要识别的小部位差异巨大,我们知道要识别物体的某些特定小部位,可以用卷积操作,但是不同物体需要识别的小部位是差异非常大的,怎么将所有这些小部位都能准确识别出来,我们可以设置多个卷积核,分别识别不同物体的特定部位。
3.特定部位在图片中的位置不定,假设我们识别图片中的鸟嘴,那每个鸟的姿势状态都是不一样的,因此鸟嘴的位置在图中是不固定的。我们需要搜索完整张图片才能将所有位置都搜索一遍。卷积操作是如何完成这项工作的呢,只需要卷积核在图片进行滑动操作就可以遍历整张图片,搜索完所有的位置了。
4.图片大小不能影响特定部位识别,同一种部位在不同图片中除了位置差异大小也可能差异巨大,卷积需要把不同尺寸的特定位置都能准确的识别出来。卷积神经网络中使用池化层,进行图像特征的缩小,还可以减少网络参数。
三、各式各样的卷积操作
此部分内容过多请参看另一篇博客
四、卷积的过程
由上图可知卷积过程如图所示,当输入图片大小为7X7X3的彩色图片时。经过一个由128个3X3卷积核、padding=0,stride=1构成的卷积层时,张量变化如图所示成为5X5X128的张量。卷积操作特征图变化公式如下
x
=
⌈
N
+
2
p
a
d
d
i
n
g
−
w
+
1
s
t
r
i
d
e
⌉
x=\left \lceil \frac{N+2padding-w+1}{stride} \right \rceil
x=⌈strideN+2padding−w+1⌉
卷积层参数计算公式
N = (卷积核大小^2+1)特征图通道数卷积核个数
则上图所示卷积层的参数数量为(3X3+1)X3X128=3840