文章目录
本篇文章知识偏概念型的讲解,并没有给出数学形式表达,旨在帮助初学者更好地理解CNN的特点
Convolutional Neural Network(卷积型神经网络)
前文介绍了许多的训练知识和方法之后,我们今天来介绍第一个神经网络模型。
CNN是专用于影像或图片的神经网络模型,是专门为它们设计的专用的网络模型。
图像表示
一张图片在计算机怎么表示呢,我们可以使用像素来表示,长x宽x深度。用这样的一个三维矩阵来表示一张图像,如果这张图像是黑白的,那深度也就等于1,表示灰度。如果是彩色的呢,因为计算机系统显示采用的是RGB色彩空间,使用(a,b,c)三个值的向量来表示一个颜色,所以深度也就等于3。我们习惯叫这个三维的矩阵为tensor。
第一种解释
我们刚开始的时候,解除了全连接的网络,fully connected,神经网络的输入是一个向量对不对,所以我们把三维矩阵拉直成为一个向量,就有了一个 l e n ∗ w i d t h ∗ d e p t h len*width*depth len∗width∗depth维的输入向量。这时候如果用全连接的话,模型的弹性太高了点,很容易过拟合,且训练也不容易。所以,就提出了新的简化方法。
简化方法1——receptive field
观察图片,如果要做图片识别的话,我们会发现,很多图片的Pattern只看一小部分就能看出来,而不用看整张的图片或者很大的区域才能甄别出这个Pattern,所以我们就用一个n*n的区域来筛选图片,n通常取值3,也可以自己视情况而定。我们就用这样一个field来监测图片的模式,比如说一个鸟嘴就在图片的那个特定区域,我们用这个区域筛选到这个鸟嘴,负责这个field的神经元就能学习到对应的pattern。而一个receptive field会有一组neurons来守备它,而不是只有一个。
你可能会问,这么小的一个field真的会侦测书来重要的pattern么?当然不是,我们在各个receptive field之间允许重叠和重复,每个新的receptive field产生的步骤为移动stride步,这个stride可以我们自己调节,高度的重叠保证了大部分的Pattern会被侦测到。
如果,超出图像范围的话需要padding,最简单的方法就是补0。这样,就不需要全连接了,第一步简化fully connected。
简化方法2——共享参数
可以发现,每个pattern可能出现在图片的不同位置。所以,可能多个receptive field被侦测出相同的pattern,但是这些receptive field对应的neurons在做同样的工作,如果每个neurons都在侦测某个模式,那这个模型的参数就过于多了。
所以,我们就让不同receptive field的neurons之间共享参数,即两个neuron之间的weight完全一样。至于怎么共享,可以自己决定,常见的共享方法为:每个receptive field都有一组守备的neurons,这些neurons之间共享参数,也就是说每个receptive field之间只有一组参数而已,这组参数被称为filter 1,filter 2,…。
第二种表示——Convolutional Layer
convolution中有甚多filter,它们的大小为3x3xchannel,这个channel与上文的depth概念相同。每个filter的作用就是去图片中抓取pattern。filter的值就是参数,是需要训练出来的。
以二维的图像演示,让filter与该filter范围内的图象值做卷积,然后每次移动stride单位并计算一个值,全部扫描完之后得到一个新的图层,每个filter都扫面完之后,我们得到了新的图像,叫做feature。
对得到的新图像也可以继续进行convolution,不过filter的深度需要根据图像的channel数变化。
例子中的filter对角线都为1,也就是说它偏向于侦测图像对角线上都是1的pattern,这就是filter侦测pattern最底层的原理。
这些filter就是第一种解释版本中共享的参数,以上就是两种解释方案,其实都是解释的CNN,是完全一模一样的。