卷积神经网络(CNN)

CNN(卷积神经网络)

引言

卷积神经网络(Convolutional Neural Network,CNN)是一种前馈神经网络,它由若干卷积层和池化层组成,尤其在图像处理方面CNN的表现十分出色。卷积神经网络种有一个感受野的概念。感受野(Receptive Field) 是卷积神经网络每一层输出的特征图(feature map)上的像素点在输入图片上映射的区域大小。

1989年,LeCun结合反向传播算法与权值共享的卷积神经层发明了卷积神经网络,并首次将卷积神经网络成功应用到美国邮局的手写字符识别系统中。1998年,LeCun提出了卷积神经网络的经典网络模型LeNet-5,并再次提高手写字符识别的正确率(Gradient-based learning applied to document recognition)。CNN的基本结构由输入层、卷积层(convolutional layer)、池化层(pooling layer,也称为取样层)、全连接层及输出层构成。卷积层和池化层一般会取若干个,采用卷积层和池化层交替设置,即一个卷积层连接一个池化层,池化层后再连接一个卷积层,依此类推。由于卷积层中输出特征图的每个神经元与其输入进行局部连接,并通过对应的连接权值与局部输入进行加权求和再加上偏置值,得到该神经元输入值,该过程等同于卷积过程,CNN也由此而得名。
在这里插入图片描述

在这里插入图片描述

输入层用于输入图像信息,卷积层用于提取图像底层特征,池化层用于防止过拟合以及降维,全连接层用于汇总卷积层和池化层得到的信息,输出层根据全连接层的信息输出概率最大的结果。

因此本文全部内容分为:引言、背景(卷积的介绍)、输入层、卷积层、池化层、全连接层、输出层、理论分析、总结以及代码。

背景

首先我们来介绍一下为什么会出现卷积神经网络,顾名思义,相比于神经网络,卷积神经网络多了一个卷积的概念。引言中提到,CNN在图像处理方面表现很好,那么在卷积神经网络出现之前,对于图像处理的方法具有哪些缺陷呢?首先研究人员需要手工提取图片特征,然后输入到神经网络全连接层,从而进行图像处理,而手工设计的特征往往只能捕捉到图像的某些特定方面的信息,特征表示能力有限。其次对于图像的变换适应性弱,影响影响图像识别的准确性。

其次我们来介绍一下卷积的概念(可以观看B站王木头的视频从“卷积”、到“图像卷积操作”、再到“卷积神经网络”,“卷积”意义的3次改变——B站王木头)

对于两个函数 f ( x ) f(x) f(x) g ( x ) g(x) g(x)卷积可以表示为:
∫ − ∞ ∞ f ( τ ) g ( x − τ ) d τ \int_{-\infty}^{\infty}f(\tau)g(x-\tau)d\tau f(τ)g(xτ)dτ
用一个例子来帮助理解什么是卷积:
我们假设 f f f表示吃进去食物,用 g g g函数表示食物消化后剩多少(比例),那么我们就可以进行计算。
在这里插入图片描述

比如上图中,8点吃进去了豆腐脑,10点吃进去了面包,12点吃进去了米饭,那么到14点胃里还剩下多少,就可以用图中右侧的方法来计算,米饭是12时吃进去的,表示为 f ( 12 ) f(12) f(12),同理其他食物分别表示为 f ( 10 ) f(10) f(10) f ( 8 ) f(8) f(8),由于进食和消化量一直都在边化(消化速率和吃进去的食物是无关的,因为最后会全部消化完),所以要计算胃中剩下的食物比较麻烦,但是利用卷积可以轻松解决。当12点吃入米饭,到14点(两个小时候),剩余比例就是g(14-12),那么剩余量就是 f ( 12 ) ∗ g ( 14 − 12 ) f(12)*g(14-12) f(12)g(1412),其他同理。

推广到一般情况,从x时刻吃,到t时刻剩下多少,那么计算t到x时刻吃的食物经过时间(t-x),然后用x时刻进食量乘上t-x后对应的剩余比例
在这里插入图片描述

这只是某个时刻进食后的情况,我们需要把前面所有时刻累加起来,最后求得t时刻胃里食物剩余量。最后可以转化为一个积分过程。

判断卷积的一个重要指标:f函数和g函数中自变量相加是否能够消去一个未知数,比如f(x)和g(t-x)可以消去未知数x。

接下来我们看看 τ \tau τ x − τ x-\tau xτ在图像上的对应情况
在这里插入图片描述

τ \tau τ时刻刚吃下去食物,此时还未开始消化,所以在g图像上就对应横坐标为0的点(即 τ − τ = 0 \tau - \tau = 0 ττ=0 τ \tau τ时刻前的对应每一种食物在 τ \tau τ时刻的剩余比例都是可以用直线一一对应。图中每一条直线都可以看成一对 f ( x ) ∗ g ( τ − x ) f(x)*g(\tau - x) f(x)g(τx),最后我们把所有直线相加,就是胃里食物的总剩余量。此时就有一个相加积分公式 ∫ 0 τ f ( x ) g ( τ − x ) d x \int_0^{\tau} f(x)g(\tau-x)dx 0τf(x)g(τx)dx,只需要替换上下限和变量就有卷积公式了。

因此我们可以找一个系统,这个系统的输入(f(x))是一个不稳定的输入(因为一直不间断吃东西,始终在变化),输出是一个稳定的输出(因为g函数对于任何食物都是稳定的,随着时间变化,以同样比率消化食物)。通过卷积就可以计算这个系统的存量(即胃里剩余的食物)。这也就是卷积的一个价值所在。

卷积的“卷”:我们讲上面的图,也就是g(x)进行一个翻转,可以得到下面的图
在这里插入图片描述

那么就可以体现出一一对应了(类似的图还有B站UP梗直哥用火车穿山洞对于卷积的讲解)。那么卷积看上去就是把一一对应的直线卷曲变成了之前的那张图。

我们将上面的卷积解释带入到对图像处理的应用场景中,那么就无法进行理解,找不出不稳定的输入和稳定输出。
对于图像卷积的操作如下图,通过一个3x3的卷积核,获得特征图。
在这里插入图片描述

图像原本的像素点先和对应的卷积核相乘后再相加,即可得到对应新的像素点,用卷积核把整个图像都扫一遍,得到的就是卷积操作后的新图像。
在这里插入图片描述

此时有一个存在问题的地方,就是每次扫描时,中间的数据会被反复扫描,但是外圈只会被扫到一次,那么外层特征就可能会丢失,此时可以通过添加padding(一般设置为0)来保证外层特征被扫描到。

在这里插入图片描述

但是上述与卷积的关系中,f函数和g函数的判断如何进行呢?图像的卷积似乎就是感受野中的图片和卷积核相乘,再进行相加,那么就和卷积公式 ∫ − ∞ ∞ f ( τ ) g ( x − τ ) d τ \int_{-\infty}^{\infty}f(\tau)g(x-\tau)d\tau f(τ)g(xτ)dτ类似了。因此图像就是一个f函数,卷积核就是一个g函数(图像总是变化的,是不稳定输入,卷积核是不变的,是稳定输出)。

我们将吃饭的例子换成蝴蝶效应,在某时刻蝴蝶震动翅膀,后续某个时刻就发生了飓风,但是发生飓风的概率是随着时间减小的,所以可以表示为下图:
在这里插入图片描述

那么此时的卷积就表示之前蝴蝶扇动翅膀对飓风发生的影响。那么卷积就又可以总结为众多事件对某时刻发生的事件的影响值
类比到图像上的卷积,我们就可以看成,计算周围像素点对于某个像素点的影响
我们用一个3 * 3的卷积核,每个数值都为1/9,来进行卷积,那么表示的意义就是找一个像素点,把它周围的像素点全部加起来,然后求平均,这样子对图像进行卷积后,图像就会变得更加平滑。因此又叫平滑卷积。平滑卷积使得周围像素点与当前像素点相差不要太多,因此就是求平均。类似的还有5×5的卷积核以及7×7的卷积核,也就是周围两圈像素点和三圈像素点对当前像素点产生的影响。
在这里插入图片描述

在这里插入图片描述

现在只考虑点(x,y) 周围像素点对当前像素点的影响:
在这里插入图片描述

我们找到(x-1,y-1)像素点的像素值f(x-1,y-1)然后乘上影响比例g(),就能得到影响值。
我们使用之前吃饭例子中的 g (

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

czijin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值