从此明白了卷积神经网络(从此明白了卷积神经网络(CNN))
初识卷积神经网络(CNN)
从今天起,正式开始讲解卷积神经网络。这是一种曾经让我无论如何也无法弄明白的东西,主要是名字就太“高级”了,网上的
各种各样的文章来介绍“什么是卷积”尤为让人受不了。
一、引子————边界检测
我们来看一个最简单的例子:“边界检测(edge detection)”,假设我们有这样的一张图片,大小8×8:
图片中的数字代表该位置的像素值,我们知道,像素值越大,颜色越亮,所以为了示意,我们把右边小像素的地方画成深色。
图的中间两个颜色的分界线就是我们要检测的边界。
怎么检测这个边界呢?我们可以设计这样的一个 滤波器(filter,也称为kernel),大小3×3:
filter
然后,我们用这个filter,往我们的图片上“盖”,覆盖一块跟filter一样大的区域之后,对应元素相乘,然后求和。计算一个区域
之后,就向其他区域挪动,接着计算,直到把原图片的每一个角落都覆盖到了为止。这个过程就是 “卷积”。
(我们不用管卷积在数学上到底是指什么运算,我们只用知道在CNN中是怎么计算的。)
这里的“挪动”,就涉及到一个步长了,假如我们的步长是1,那么覆盖了一个地方之后,就挪一格,容易知道,总共可以覆盖
6×6个不同的区域。
那么,我们将这6×6个区域的卷积结果,拼成一个矩阵:
边界检测
诶?!发现了什么?
这个图片,中间颜色浅,两边颜色深,这说明咱们的原图片中间的边界,在这里被反映出来了!
从上面这个例子中,我们发现,我们可以通过设计特定的filter,让它去跟图片做卷积,就可以识别出图片中的某些特征,比如
边界。
上面的例子是检测竖直边界,我们也可以设计出检测水平边界的,只用把刚刚的filter旋转90°即可。对于其他的特征,理论上
只要我们经过精细的设计,总是可以设计出合适的filter的。
我们的CNN(convolutional neural network),主要就是通过一个个的filter,不断地提取特征,从局部的特征到总体的特征,
从而进行图像识别等等功能。
那么问题来了,我们怎么可能去设计这么多各种各样的filter呀?首先,我们都不一定清楚对于一大推图片,我们需要识别哪些
特征,其次,就算知道了有哪些特征,想真的去设计出对应的filter,恐怕也并非易事,要知道,特征的数量可能是成千上万
的。
其实学过神经网络之后,我们就知道,这些filter,根本就不用我们去设计,每个filter中的各个数字,不就是参数吗,我们可以
通过大量的数据,来 让机器自己去“学习”这些参数嘛。这,就是CNN的原理。
二、CNN的基本概念
1.padding 填白
从上面的引子中,我们可以知道,原图像在经过filter卷积之后,变小了,从(8,8)变成了(6,6)。假设我们再卷一次,那大小就变
成了(4,4)了。
这样有啥问题呢?
主要有两个问题:
每次卷积,图像都缩小,这样卷不了几次就没了;
相比于图片中间的点,图片边缘的点在卷积中被计算的次数很少。这样的话,边缘的信息就易于丢失。
为了解决这个问题,我们可以采用padding的方法。我们每次卷积前,先给图片周围都补一圈空白,让卷积之后图片跟原来一
样大,同时,原来的边缘也被计算了更多次。
评论5
最新资源