吴教授CNN课堂:进阶|从LeNet到ResNet和Inception Net。

第二周是关于卷积网络(CNN)的高级部分,学到了很多新东西。因为在了解了CNN的基础知识之后,大部分人都在跟RNN学习自然语言处理。CNN最近的很多动态虽然有所耳闻,但都不清楚。

尤其是每个论文模型都喜欢取一些奇怪的名字(比如我昨天看的两篇论文,一篇叫NTT,另一篇叫TMD)。如果我没有看过报纸,不知道一些原因,我真的很傻。

在我看视觉问答之前,我必须选择一个经过训练的网络对图片进行预处理。结果看到了一大堆VGG、Res、Incept等看不懂的名词,后面是16、19、101等数字和V1、V2、V3等版本。结果只能是两眼一抹黑,参考别人的论文,瞎选一篇。

事不宜迟,我们开始吧。

在提到ResNet和Inception Net之前,最好先回顾一下CNN中成功架构的发展历程,以便在讲解高级网络时,能把握一个清晰的发展脉络,快速理解。

第一个是祖父级的LeNet-5,因为它是大约20年前问世的。当时还是绿色的,现在是深度学习四大天王里乐存提出来的。LeNet也取自他名字的前半部分,5表示只有五层,用来处理手写数字识别如MNIST。

基础课的时候吴教授还自己画了整个结构,所以不是很复杂。经过两次卷积和汇集,可以直接输入全连接网络。

LeNet之后,人工智能因为寒冬,很长一段时间都没有太大的发展。

直到13,后起之秀Alex Krizhevsky(相信很多人都看过他的博客,听说过他著名的斯坦福cs231)提出了AlexNet,在ImageNet大赛中大获成功,向大家展示了深度学习的强大,从此掀起了一股浪潮。

AlexNet和LeNet区别不是很大,主要区别如下。

在AlexNet展示了深度学习在图像处理方面的成功之后,大家开始在上面改进图像处理的CNN架构。而VGG是第一个非常简洁系统的,就如何使用更深层次的网络进行训练提出了一套网络架构。

VGG的创新之处在于,与以往网络中的混合参数相比,它有计划、有序地安排架构中各层的结构。例如,您可以列出以下几点:

VGG是当时视觉几何小组的名称。一般现在人们用的是VGG-16或者VGG-19,16,19,是VGG版本中的对应层。

16和19的楼层看似很多,但和ResNet这样楼层101和152的巨头相比,还是杯水车薪。

那为什么不增加VGG的层数呢?

这里要提到深度神经网络训练中的一个大问题,就是当层数太多时,会出现所谓的爆炸梯度和消失梯度。

比如每次梯度相乘的系数都小于1,如果是0.6,那么算上19层,19的0.6次方已经是0.00061了,更别说几百层了。当这种情况传播到最底层时,可以学习的参数非常小,也就是梯度消失。

反之,在梯度爆炸的情况下,如果系数大于1,重复相乘后会得到一个很大的数,同样会造成不好的结果。有点像复利的概念,就是和国王赌一棋盘米的故事。

渐变爆炸很好解决,可以用渐变裁剪来修剪。而且梯度的消失有点难解决。

因为这个问题,虽然理论上普通深网越深越好,但实际上事与愿违。下图中,横轴是网络层数,纵轴是训练误差(越小越好)。理论上,随着层数的增加,误差会减小,但实际上,在某一点之后,误差会增大。

那么ResNet是怎么练到几百层的呢?难道不是怕上面的问题吗?

它以非常简单的方式解决了上述问题。

有很多很棒的论文。在我读它们之前,我觉得这些名字很有力量。但结果我看论文的时候发现方法非常简洁,尤其是一些简单的由数学知识推导出来的解法,让人不得不拍手称快的同时感叹自己的数学渣。

ResNet也是这样,名字很酷,但是打开纸,发现是这样的。

ResNet最重要的是快捷方式的概念。我们来看看这是什么。首先,假设我们从一个神经网络中取两层作为一个块,不管中间是MLP还是CNN。

快捷方式,如下图所示,在激活该功能之前,直接创建从第一层的输入到第二层的输出的快捷方式。

也就是说激活后第二层的输出可以这样变化。

经过

成为

这样处理后,我们得到的这个小块就叫做剩余块,把这些块叠加起来就是我们的剩余网络。很简单,像下面,一个34层的残网。

这样我们得到的是残差网络,那么实际训练会怎么样呢?

正是我们想要的模式,也非常符合理论。

最后说一下残网背后的原理,为什么简单改一下就能有这么好的性能。

原因是建立了捷径,使得每个残差块都可以很容易地学习到恒等函数,即f (x) = x,也就是说,加入残差块后,可以学习恒等函数,保留信息,直接把前面的结果传递下去,就不用担心前面说的梯度消失了。

在介绍盗梦空间网络之前,先介绍一个非常重要的概念,1x1卷积。

乍一看,1x1卷积的概念会很奇怪。像这样一次卷积一个像素有什么用?我们最初想检测局部特征。但是如果你理解了渠道的概念,就能很好的理解了。

因为,如果说普通大窗口卷积更注重一个通道内各个特征的相互作用,那么1x1卷积只是通道间的卷积运算,加强了通道间的相互作用。

这是第一点,加强了渠道之间的沟通。有了这个,你只能对通道做一些操作,比如用1x1卷积来增加通道数和减少通道数,也可以不增加或减少,而是把前面的通道整理出来。

1x1卷积网络还有一个优点,就是通过合理的应用可以降低整个网络的计算量。

我们举个例子。假设有如下卷积过程。

那么上述过程所需的计算量约为1.2亿次。

而如果我们巧妙地利用1x1卷积来合理处理信道,如下。

计算量会变成只有1200万左右,一下子减少十倍。

有了以上的知识,一切都会好办很多。《盗梦空间网络》的核心理念是,既然我们在选择CNN架构时要考虑半天滤波器的窗口大小,为什么不用所有的大小,最后把结果连接起来呢?

于是就有了下面的Inception模块。1x1,3x3,5x5的卷积是有用的,前面提到的用1x1卷积减少计算量的技巧也用上了。

最后,至于整个盗梦空间网络,就像前面的残网一样,把盗梦空间模块堆叠起来就好了。

当然,文中还有一些小细节,这里就不多说了。

而且从原纸开始,盗梦网络也改进了很多,增加了很多技能,比如之前残网里的技能。所以现在网上会出现V1,V2,V3等后缀,表示所有版本。

最后作为结论,我来说说盗梦空间网络为什么叫盗梦空间网络。

因为在这篇严肃的学术论文中,作者引用了一个链接,点击之后就会出现这个图片。