卷积神经元网络初探

前言

大概从12年,吴恩达 在谷歌领导开发的人工神经网络系统,在没有外界信息帮助的情况,成功的从海量的图片中识别出哪个是猫咪之后。人工神经网络,像风暴一样席卷了科技届,工业界。整个世界好像对人工智能重拾了信心,大量的深度学习的框架开始雨后春笋般出现,Google开源的TensorFlow、Facebook开源的pyTorch,还有一个好用的Keras。大量的使用深度学习的产品出现,比如打遍围棋界无敌手的AlphaGo,使用卷积神经网络去马赛克的, 甚至还有使用机器学习让机器和人打星际的等等。

火归火,我们来研究下,支撑了深度学习大火的其中的一个算法。那就是CNN(卷积神经网络)。

文章的结尾会有彩蛋,附送业界已经开源的很好玩的深度学习的作品。

神经网络起源

神经网络的起源是受人的大脑神经元启发。我们今天学习的卷积神经元网络,可以用于图像分类。为了方便理解其工作过程,我们也可以借鉴人的视觉神经是如何识别物体的过程来理解卷积神经网络。如下:

人的大脑皮层中,掌控视觉有多部分区域组成,视觉的信息被眼球捕捉到,首先到光感受器上,然后经过视网膜内简单的神经环路的初步加工,层层传递,然后进入初级视觉皮层(V1),V1进一步加工视觉信息,然后传递到MT,V2,V3等区域,最后识别出物体。 这个研究让HubelWiesel获得了1981年的诺贝尔奖,也极大的启发计算机视觉的研究。

卷积神经元网络初探

人脑神经识别物体是多层,初级的识别简单特征,越往后识别出的物体特征越高级,这和我们下面要讲的CNN 道理是一样的。下面请看CNN 的架构。

卷积神经网络架构

卷积神经元网络初探

卷积神经网络的直观图:

卷积神经元网络初探

思维导图

卷积神经元网络初探

卷积

为了避免难懂,我们避开数学上的卷积的定义,从图像操作方面来直观的了解一下。

 

卷积神经元网络初探

绿色的5*5的矩阵是原图, 黄色的3 * 3 的矩阵被叫做滤波器。 滤波器也叫特征提取器,核(kernel)。滤波器从 图像上划过进行点击运算的过程叫做卷积。卷积后输出的图像被称为特征矩阵,也叫激活图。

卷积神经元网络初探卷积神经元网络初探

不同的滤波器作用在图像上面会有不同的效果:

•模糊

卷积神经元网络初探

•边缘检测

卷积神经元网络初探

影响特征图及后续卷积网络效果有三个因素:深度 滤波器的个数。 一般来说,滤波器个数越多,能获取的图像特征也就越丰富。步长滤波器在图像上一次滑动的像素个数。在上面的动图中,一次滑动一个像素, 步长也就是1。零填充在图像的边缘使用零值进行填充,这样可以对图像边缘进行滤波。使用零填充可以控制特征区大小。

ReLU

Rectified Linear Unit 修正线性单元。 目的是通过ReLU 给卷积神经网络引入非线性因素。

卷积神经元网络初探

ReLU将特征图像中的所有小于0的像素全部置0.

池化(Pooling)

池化操作是为了将经过ReLU处理过的图像 降维、减小。 图像矩阵小了,计算量就会减小,防止过度拟合。池化一般有 Max Pooling, Average Pooling. 对于最大池化(Max Pooling),我们定义一个空间邻域(比如,2x2 的窗口),并从窗口内的修正特征图中取出最大的元素。

卷积神经元网络初探

全连接(full conn)

全连接其实是多层感知器,输入是经过多次卷积、ReLU和池化过的特征图,输出是对图像分类的概率。如下图:

卷积神经元网络初探

原图是一张船,经过卷积、RelU、Pooling 之后 ,再传入全连接层。输出是 dog,cat,boat,bird 四个类别的概率。全连接层的计算过程是卷积网络的重点。到底计算机是如何自动识别输入图像,并把最大的概率分配给 这一选项的呢?

  • 初始化参数,确定网络架构,滤波器大小和个数, 但是滤波器的值是随机分配的。经过卷积、ReLU、Pooling 后把得到的特征图输入全连接层
  • 由于参数是随机的,第一次计算,全连接层并不知道这个图是什么,所以输出的四个类别中概率也是随机的。比如:[0.25,0.25,0.3,0.2].但我们的是输入是船,所以我们希望的输出概率是[0,0,1,0].所以真实输出和我们期待的输出之间会有一个误差。而这个误差和网络中的参数:滤波器的值等有关系。所以有如下公式:

    Total Error = ∑  ½ (target probability – output probability) ² 。这个函数也叫损失函数。

  • 所以重点来了,仔细看哈。如果我们能想办法把上述的损失函数的值降到最小,那么就意味着输出的概率就无限接近我们期望的输出了。所以我们成功的将一个图像分类问题转化成为一个数学中求最小值问题。

怎么求最小值呢?很简单,第一次计算概率,和期望输出有差距,计算好和期望输出之间的差值,然后反向传播,使用梯度下降算法求解合适的权重,然后更新权重,经过多次计算,我们就能找到合适的输出,这样我们就能正确的将图像分类了。如下:

卷积神经元网络初探卷积神经元网络初探

是不是有点小激动呢,看起来高大上的机器学习,其实也就是一个数学上求解最小值的问题。找到最小值了,机器就知道我们输入的到底是什么了。

然后我们使用大量的图像训练集和图像真实标签进行训练,反复重复上面的过程,最终我们就能训练出稳定的卷积神经元网络,他能比较好的处理图像分类问题。

参考资料

斯坦福CS231N卷积神经网络课程

从视觉层面理解CNN

彩蛋

让你的照片变成世界名画风格

无中生有---让机器自己生成图像---GAN生成对抗网络