卷积神经网络CNN简介

2016-10-26陈伟才事在人为智能学堂😉

面前几篇都是轻松愉快的篇章,这篇就来点烧脑的,调节调节。本文重要讲解卷积神经网络CNN,这也是TensorFlow
MNIST官方进阶篇接纳的深浅学习算法。深度学习是机械学习的一个根本分支,特别是这几年一流互联网公司如Google以及大数据的推进下,取得新的拓展和突破。

一、神经网络

神经网络Neural
Networks方面的研讨实际上在二十世纪四十年份就从头了,尤其以N-P神经元模型为代表,掀起了神经网络发展的率先个高潮期。当时单层的神经网络不可以缓解非线性问题域,导致当时的神经网络适应场景受限,对神经网络的研商随之就跌入峡谷。

以至于二十世纪八十年代,BP算法的轰动,解决了多层神经网络练习的算法问题,从而推进神经网络解决了非线性问题领域,推动神经网络第二次高潮。

趁着进入二十一世纪,互联网技术,分布式系统,特别是这几年云总计、大数量在互联网商家如谷歌,非死不可的推进下,神经网络分支下的“深度学习Deep
Learning”再次将神经网络推向高潮。

轰动全球的2016年九月AlphaGo一款围棋人工智能程序,由谷歌(Google)旗下DeepMind公研制。这些程序在2016年一月与围棋世界亚军、职业九段选手李世石举行人机大战,并以4:1的总比分获胜。该程序的规律就是深浅学习,引领着我们对神经网络学习的第三回浪潮。本公众号“人工智能学堂”也是在这一次浪潮的有助于下发生的。

M-P神经元模型

神经网络,我们很容易想到高中生物课本上的神经细胞细胞协会,每个神经元只有一个轴突,可以把化学物质传送到另一个神经元,收到神经元同样会做出相应的反应,把音讯传送到下一个神经元,如此循环。

神经网络就是受到生物学神经系统的启示,来模拟生物神经系统对外界真实环境做出的交付式反应。那里需要澄清的是,神经网络的目标不是不过为了生物神经系统,而是为了兑现一套网络,可以学习,并且可以做出相应的反应。

神经网络中最要旨的因素是神经元模型,近日最经典的模型是M-P神经元模型,是1943年由McCulloch
and Pitts指出的。如下图所示:

如上图所示,神经元模型中,神经元接受来自 n
个其他神经元(xi)传递过来的信号,这多少个信号是富含权限Weight(Wij),对这些神经元传递的音讯进行求和,并与该神经元的阈值举行比对,然后才通过激活函数f的处理,给出最终的输出,该出口即该神经元对此次输入的信号做出的影响。如下公式表示上述过程:

对此激活函数,其效能就是Yes和No的判断,也就是用一个阶跃函数即可。不过阶跃函数的不总是缺陷,近期界内用的相比多的是Sigmoid函数。

Sigmoid函数取值范围是[0,
1],正无穷大则没有于1,负无穷大则收敛于0,切在任何区间是接连的,光滑的,如下图所示:

二、传统神经网络

把许两个神经元连接起来,上一个输入,经过本神经元处理后的消息,作为下一个神经元的输入,如此下来,便组成了神经网络。我们先看多少个输入神经元的情景。

套入上一节的公式得:

y = f(X1 * W1 + X2 * W2 -θ)

上述模型,很容易实现与、或、非:

与:即 X1 = X2 = 1时,y = 1,显明只需令 W1 = W2 = 1,θ = 2;

或:即 X1 = 1 或者 X2 = 1,时,y = 1,显然只需令 W1 = W2 = 1,θ = 0.5;

非:即 X1 = 1 时,y = 0,或者X1 = 0 时,y = 1,彰着只需令 W = -0.6, W2
= 0,θ = 0.5;

单层的神经系统,其深造能力是简单的,对于广大问题,如非线性问题,单层神经系统是力不从心解决的。

多层前馈神经网络

要解决非线性可分问题,需要考虑采取多层效率的神经系统。多层升级系统具有如下特点:

每一层的神经细胞与下一层神经元全连接

如出一辙层神经元之间不存在同层连接

不设有跨层神经元连接

装有上述3个特点的神经系统,一般称为多层前馈神经网络,multi-layer
feedforward neural networks,如下图所示:

上图中,输入层神经元接收外界的输入,隐含层与输出层神经元对信号举办处理加工,最后的结果是透过输出层对外输出的。即输入层神经元只担负信息的吸纳,而隐含层和出口层神经元是索要对音信举办加工处理的。

三、卷积神经网络

上节中多层前馈神经网络扩张性不佳,原因重要有两点,一是神经元是全连接的,二是同层的神经细胞是相互独立的。这样造成随着隐含层层数或者隐含层的神经细胞个数的增多,需要建立的链接是指数级的加强,其统计量是庞大的挑衅,或者用机器学习园地的专有词汇描述是overfitting,即过度拟合。

以CIFAR-10为例,一张图片的轻重缓急是 32*32*3 (32 width,32 height, 3
colors),如假如单层全连接神经网络,则需要32*32*3 =
3072个weights,假使图片大小是200*200*3(200 width,200 height, 3
colors),则需要200*200*3 = 120000个weights。

多层前馈神经网络需要展开立异,进步其扩张性才能满意实际用于的要求。为此,卷积神经网络CNN(Connetional
Neural Networks)应用而生。那么CNN是怎么样做到降低参数的了?

部分连通性

首先个是Local
Connectivity,局部连通性。与全连接神经网络不同的是,CNN的神经细胞和下一层神经元不是全连接的。我们得以这么来精晓,对于一张图片,图片本身也是分不同部分组成的,而各类部分,他们可以具备近乎的权值参数。

比方说一张人头的照片,有毛发,鼻子,耳朵,嘴巴,牙齿,眼睛等等。所以大家在举办学习的时候,没必要多所有人口举行全量学习,而是先对堵塞的部位开展学习,最终再集中周全学习。这样实实在在降低了神经网络权值参数的求学成本。

上图假设是1000*1000的图样,左侧是全连接神经网络,对于1M的神经细胞来说,它必须学习抱有的input音信,就意味着它必须学习1000*1000*1M=10^12
的权值参数。右侧就是CNN,倘若滤波的轻重10*10,10*10*1M=10^8,降低了4个数据级。

下图是 RGB CIFAR-10 image,32*32*3
(width,height,colors),作为输入层,假若CNN的滤波大小是5*5,所以对应输入层5*5*3的区域,卷积层的每个神经元需要全连接的权值参数个数为
5*5*3 =
75。注意,虽然是5*5的区域,可是必须是全深度的读书,即depth为3.途中有5个神经元,每个神经元的权值参数个数为75.

有关滤波,还有多少个举足轻重的定义,一个是stride,一个是zero-padding。stride是步幅大小,即每回滤波学习区域活动的宽度,zero-padding则是用0填充,可以设想一下,对于图片边缘的有些,学习的力度肯定没有图片当中的屡屡,所以大家将图纸四周都用0来填充,用0来包裹。

上图可以看来,input的数组为5个(1,2,-1,1,-3),两边用0填充则变为(0,1,2,-1,1,-3,0)。固然filter
size为3,假若stride为1,则output有5个出口(-2,2,1,2,1),倘使stride为2,则output唯有3个(-2,1,1)。

参数共享

第二个是参数共享。先举一个忠实的例证,二零一二年的ImageNet挑战赛。输入是227*227*3的图片。假设filter
size F = 11,stride S = 4,没有做zero
padding(实际上是做了的,原因是图形原始大小是224*224*3,只是没有特别指出来),
所以 (227 – 11)/4 + 1 = 55,且卷积层的深度K = 96,所以卷积层一共需要55
*55 * 96 =
290400个神经元,每个神经元对应出入图片227*227*3中的11*11*3的区域。即11*11*3这么一个3D区域对应一个神经元,这样一个神经元需要11*11*3

  • 1 = 364个全权值参数。所以,对应227*227*3的图片输入,卷积层一共需要
    364 * 290400 = 105705600 个权值参数。

227*227*3卷积层就需要105705600个weights,虽然是更大的图形了,这明确也是丰硕的,即便和全连接神经网络已经优化好多少个数据级了。

从下边仍可以够考察到,11*11*3区域对应一个神经元,同时从深度方向看,depth维度的96个神经元对应同一个11*11*3区域。从depth切面看,一共有96个切片,227*227*3对应的切换一共有
55 * 55
个神经元。假设大家对同一个depth的切换的55*55个神经元采取同一的weights和bias,这样一个切换就需要11*11*3

  • 1 = 364个权值参数了。对于227*227*3的图片就需要 364 * 96 = 34944.
    如此权值参数的多少级又降低了4个。

此地的同一个断面的神经细胞采纳相同的权值参数举行个数优化,在CNN中称之为参数共享,Parameters
Sharing。

此处需要提点一下,为啥是同一个断面是使用参数共享,而不是深度维度采取参数共享了,笔者在首先次学习参数共享这么些特点就有这一个问号。我可以简简单单想象一下,不同的断面就意味着不同层次的卷积,每一层次的卷积作为下一个卷积的输入,所以最好遵照卷积的层次也就是严穆说的切面,不同的断面采纳不同的权值参数,而同一个断面的神经细胞选取参数共享。

CNN图解

下边以切实列子举行CNN局部连通性和参数共享举办出现说法。下图中是5*5*3的灰色图片区域是原有的input,为了演示方便,将3D的图样切成3个平面纵向排列。棕色的方圆都采纳0举行填充,蓝色部分,可以zero
padding = 2,中间 3
*3的区域是滤波器的深浅,我们得以领略这多少个CNN卷积层是有两层的滤波器,每一层的滤波器接纳相同的权值参数,所以每一层的权值参数个数为
3*3*3 + 1= 28。

咱俩上述图为例,卷积神经元的output是怎么总括出来的。黑色区域和肉色区域对应的数字举办相乘然后再求和,末了和Bias相加,拿到相应的数字,依次存放到青色矩阵里面。第一个矩阵结果是3,
第二个矩阵的结果是2,第多少个矩阵的结果是0,所以3 + 2 + 0 =
5,最终加上第一个Bias参数1,所以首先个3*3*3的区域神经输出结果是 6.

从地点的图可以看出,这多少个CNN卷积层需要学习到的权值参数的个数是2 * 28 =
56个,即途中红色部分。

CNN的可视化

CNN卷积过程是很复杂的,整个经过也不是很直观的,所以,对于神经网络CNN可视化,也是一个很热的天地,下图是法国巴黎大学可视化和可视分析研商小组对CNN卷积的可视化系统,系统demo地址是http://shixialiu.com/publications/cnnvis/demo/。

参考资料

Machine Learing机器学习,周志华,复旦大学出版社

http://cs231n.github.io/convolutional-networks/

http://vis.pku.edu.cn/blog/%E6%9B%B4%E5%A5%BD%E7%9A%84%E7%90%86%E8%A7%A3%E5%88%86%E6%9E%90%E6%B7%B1%E5%BA%A6%E5%8D%B7%E7%A7%AF%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C%EF%BC%88towards-better-analysis-of-deep-convolutional-neural-net/

                                                       
 长按二维码关注群众号人为智能学堂

相关文章