本来打算本节开始循环神经网络RNN,LSTM等,但是觉得还是应该把商用比较火的网络介绍一下,同时详细介绍一下深度残差网络,因为他是基于卷积的。而后面的循环神经网络更多偏向于序列问题,偏向语音识别,自然语言处理等的应用,而卷积神经网络更偏向于图像识别方面的应用,因此在本节就介绍几种常用的神经网络,当然现在的网络很多了,但是我们不讲那么多,只讲很火的网络,其实如果大家把卷积神经网络彻底搞明白了,看其他的网络还是很容易的,因为就那些东西,不一样的算是在卷积的基础上加一点东西,因此从这里又看出基础的重要性,废话不多说,下面我们开始:
从上图的Imagenet的比赛上我们可以看到我们前面讲的hintion带领的团队使用深度卷积神经网络AlexNet赢得了2012年的比赛冠军,此时网络8层,2014年的比赛中Googlenet获得冠军,而VGG获得亚军,但是在后面的商用中,VGG被使用的更广而Googlenet就没有被使用的很广,原因是Googlenet的网络复杂,他们设计的是针对这个比赛的,而VGG更通用,可以直接移植使用,稍后大家会看到他们的区别,我们发现二者网络层很接近20多层,错误率也很接近,比AlexNet的网络要好很多。15年的比赛获得冠军的就是何凯明带领的微软研究院发明的RESNET获得冠军,此时我们看到网络层数达到惊人的152层,同时错误率也创下了惊人的3.57记录,稍后我们会好好研究他的文章的,在后面我们会研究一下基于RESNET的变体,看看有哪些变体然后简要的介绍一下。下面我们就看看VGG和Googlenet。
VGG(Visual Geometry Group,视觉几何组)
大家点击上面的网站去下载对应的论文即“非常深刻的卷积网络进行大规模图像识别”,我们下面就根据这篇论文简要介绍一下,因为和卷积神经网络很类似,所以学起来很容易。
VGG主要由卡伦· 西蒙尼扬 和 安德鲁·齐塞尔曼 这两个人在卷积神经网络的基础上演变而来的,网站里有坚硬的介绍的,我这里主要从论文开始介绍,下面给出网络结构:
该网络的简单主要体现在所有的卷积都使用3x3的维度,池化使用的2x2的维度,从上图我们可以看到ABCDE四种网络,层数是不同的,这里我们以Ë为例子进行简单的说明一下,E总共包含19个隐藏层,这里只算有权值的层,怎么算呢?如上红色的标记可知。
我们知道卷积层和池化层的都是3×3 2×2和的,另外就是没池化一次图片维度就减少一半,同时卷积核增加一倍,如下图:
至于如何学习和如何训练的,和前面的Alexnet网络基本相同,这里不在家解释了,以后用到在深入研究了,这里提一下,下面我们看看Googlenet。
这是谷歌团队发明的神经网络,之所以名为“GoogLeNet”而非“GoogleNet”,文章说是为了向早期的LeNet致敬。大家可以到网站下载论文进行研究。
与VGG不同的是,goog做了更大胆的网络上的尝试,为了获得高质量的模型,它也从增加模型的深度(层数)或者是其宽度(层核或者神经元数)这两方面考虑了,但是在这种思路下会出现两个缺陷(1参数太多,容易过拟合,若训练数据集有限; 2网络越大计算复杂度越大,难以应用; 3网络越深,梯度越往后穿越容易消失,难以优化模型)而GoogLeNet通过新的结构设计,在增加深度和宽度的同时避免了以上问题。:
1. 深度
GoogLeNet采用了22层网络,为了避免上述提到的梯度消失问题,GoogLeNet巧妙的在不同深度处增加了两个损耗来保证梯度回传消失的现象结构如图1所示:
2. 宽度
启的网络,将1x1,3x3,5x5的CONV和3×3的池,堆叠在一起,一方面增加了网络的宽度,另一方面增加了网络对尺度的适应性,但是如果简单的将这些应用到特色地图上的话,concat起来的特色地图厚度将会很大,所以为了避免这一现象提出的inception具有如下结构,在3x3前,5x5前,最大合并后分别加上了1x1的卷积核起到了降低特征图厚度的作用,这也使得虽然googlenet有22层但是参数个数要少于alexnet和vgg.inception的具体结构如图2所示。
先简单介绍到这里,以后有时间还会详细分析这两篇论文,从上面可以看出VGG更友好,容易调节参数,但是googlenet就相对比较麻烦了,但是也还好,如果使用的话一般都有框架,但是想调节参数搞定原理才是正道,这里就不详细讲了,有兴趣的可以先看看,以后实战时还会深入讲解,下面就讲解今天的主角RESNET。
RESNET
何凯明博士,广东省高考状元,进入清华。2007年清华大学毕业之后开始在微软亚洲研究院(MSRA)实习,2011年香港中文大学博士毕业后正式加入MSRA,目前在Facebook人工智能研究(FAIR)实验室担任研究科学家。曾以第一作者身份拿过两次CVPR最佳论文奖(2009年和2016年) - 其中2016年CVPR最佳论文为图像识别中的深度残差学习(对于法师识别的深度残留学习)更是一鸣惊人下面我们就从背景讲深度残差网络:
“传统”深度学习的困难
深度学习目前进展取决于技巧:初始权值选择,局部感受野,权值共享等等,但使用更深层的网络时(例如> 100),依然要面对反向传播时梯度消失这类传统困难,
退化问题:层数越多,训练错误率与测试错误率反而升高
如何解决上面的问题呢?
深度残差网络的思路
引入“捷径”,可以防止梯度消失问题,其实在ResNet出来以前已经有人对这方面进行研究了,Srivastava等人的“公路网络”,“培训非常深的网络”是类似的方法,他们认为更深层的网络应该也是易于优化的,层数越多准确率越高,训练方法与“传统”深度网络相比不会有很大变化,基于此,何凯明团队提出了一个新的深度残差网络,下面我们就先看看该网络的核心部分即:
上图的左半部分是常规的神经网络形式,每层有权值和激活函数,这里的激活函数采用的是RELU函数,目的是为了避免梯度消失的问题,右半部分是残差网络的基本单元,和左边最大的不同在于多了一个身份即多了一个直接到达输出前的连线,这代表什么意思呢?刚开始输入的X,按照常规的神经网络进行权值叠加然后通过激活函数,在次权值叠加后此时在把输入的信号和此时的输出叠加然后在通过激活函数,就是这样的一个网络,而那条线称为捷径,也称为高速公路,加这个高速公路有什用呢?这个残差怎么理解呢?大家可以这样理解在线性拟合中的残差说的是数据点距离拟合直线的函数值的差,那么这里我们可以类比,这里的X就是我们的拟合的函数,而H(x)的就是具体的数据点,那么我通过训练使的拟合的值加上F(x)的就得到具体数据点的值,因此这 F(x)的就是残差了,还是画个图吧,如下图:
下面我们看看整体的网络,然后通过数学说明的该网络的有效性:
大家通过上面的网络可以看到网络和VGG的对比一起看,VGG-19的学习原理基本上和常规卷积神经网络是一致的,不同的是他的卷积核的大小全是3×3的规模,池化层的大小为2x2规模,这样的模型容易移植应用,而Resnet则是由很多层的高速通道,我们先从直觉中体会一下,我们从提取特征的角度进行进行解释一下,如果第一层是提取全局特征即浅特征,深层提取的是深层特征,我们这个高速公路可不可以说在每层进行输出时,他是把深层特征和浅层特征结合在一起进行判断呢?我们可以这么理解的,那么凭感觉告诉我们就是该网络通过浅层和深层结合判断,同时梯度不容易消失,我们在把上面的图片拿下来讲解:
按理说上面的高速公路应该乘上权值会更好啊,但是为什么系数为1呢?稍后用数学知识进行讲解,现在我们来讨论一下该网络是如何学习的,这个网络还是和卷积学习方法类似的,高速公路并不影响误差反向传播的,下面我们利用数学进行解释:
应该按理说有一个权值矩阵的,但是原始论文的直接为1,我们看看怎么回事?
的这里映射采用的的英文RELU规则,因此可以直接得到:
通过迭代:
我们可以写成闭合的表达式:
根据反向传播的原理我们假设误差为,对
其偏是什么意思?导:
上式就我们误差函数的反向传播了,如果
此时:
代入(5)式中可得误差反向传播为:
通过(8)我们式可以看到如何系数为大于1或者小于1时会造成梯度爆炸或消失的问题,因此直接为1是最好的,即(5)。他们也从数据中给出了解释为什么直接映射是最好的,我们来看看吧:
从上图我们看到如果增加权值的,而且批量归一化的位置不同,正确了也不同,他们倡导的是在RELU之前正则化比较,但是即使这样还是有4.9%的错误率,而权值为1的是正确率为3.57%。好,到这里就解释了为什么在高速公路是的X的权值为1,那么大家有没有疑问就是,为什么高速高速公路只跨两层呢?三层,四层不可以吗其实都可以的,如果层数很多了,就可以使用更多的高速公路:如下图
下面给出结构的部署:
这个表大家这样看首先第一行表示不同层即18层,34层,50层,101层,152层这几种RESNET结构,那么这个层数怎么计算呢?这里以152层为例,同时说明一下,这里的高速公路都是三层的,就是上图右半边的图,因为深度太深,两层计算量太大了,好我们看看他是怎么计算层数的:(3 + 8 + 36 + 3)x3 = 150,再加两层的全连接层就是152层了,这里大家应该能看懂的,
好,这里的RESNET就结束了,下一节我们看看的他的变种的网络。