第二周《卷积神经网络-实例探究》

2017-11-13  本文已影响83人  十曰立

P2.1为什么要进行实例探究

就是列了一下提纲,告诉我们我会讲这些内容,可能尽管你不是搞图像方向的,但是你可以借鉴里面的一些重要思想啊!


P2.2经典网络

第一个是1980年的LeNet-5,其中有几个注意点:

第二个是AlexNet,由于是Alex最先发现的所以以之命名,其特点如下:

第三个是VGG-16,一句话总结的话就是它使得网络的结构变简洁了。

P2.3 残差网络

讲到了深度神经网络会有各种问题,比如梯度消失啊梯度爆炸啊什么的!

之前有说到了,由于sigmod激活函数的非线性会导致梯度消失或者爆炸;而是会消失还是会爆炸,这由激活函数跟权值一起决定,因此这里就算将激活函数改为ReLU但是也还是存在梯度消失或者爆炸的问题的,因此残差网络的出现对网络深度地拓展具有重要意义。

残差网络的架构如下图所示,本来的深度模型就是输入然后经过:[线性操作(linear) + 激活函数(ReLU)]的叠加来构成深度,这样子很容易发生梯度的问题,原因上面也讲了。

然后我们的残差网络结构基本原理就是:把前面层的输出直接短接到后面层那里去,需要注意的就是:插入的位置是在线性激活之后跟ReLU激活之前,如图所示。

看到作者何凯明把这种接法叫short cut,还有种叫法是skip connection,其实这也好理解,你既然把信息传递到后面层,那么我很自然地想“我萌能不能把信息传到后面的不同层呢?因为我们也不知道具体传到哪层合适嘛!!!”

一般的残差网络如下图所示:这里有5块,每块叫做残差块,这五块叠加起来构成了残差网咯。


那你这个效果如何呢?

下图表示的是:常规的深度网络,也就是plain,理论上是那条绿色的theory曲线,然而实际上却是蓝色那条reality曲线,这说明深度网络中的机理我们了解的还并不是特别清楚,某种程度上来说还是个黑盒子

而我们的ResNet网络表现出来的效果却是跟理论曲线是相近的,也就是说残缺信息(层间信息)是深度网络的一个重要特性啊!


P2.4 为什么残缺网络表现如此之好?

从图中可知,假设输入x经过一个big NN大型网络之后输出a[l],那么我们再在后面给他加上两层网络,而且这两层通过加上short cut线来构成残缺网络,因此(假设非线性激活函数数ReLU,也就是说激活输出的值全部都是大于等于0的)从这往上数第三张图写出了残差网络的激活函数,于是有:

a[l+2] = g(z[l+2] + a[l]) = g(w[l+2]*a[l+1] + b[l+2] + a[l]) **
往我们对W或者b进行L2正则化就可以使得其均取值为0,这样子的话,如图所示最后的结果就是a[l],也就是说这个网络直接就去掉了,这可是在深度增加的情况下,却不增加计算量的啊!,其实这里就是在学习一个恒等函数啊,也就是一个自编码器啊!

这也就是为什么常规的深度学习网络在一定程度上学习着学习着效果反而不好了!因为他们学恒等函数很难啊!?

保证网络功能(恒等函数)的前提下提高效率(恒等函数参数为0,即减少参数)!

残差网络的卷积操作是same操作,维度不同的话是需要变维度的!


有个细节就是,ResNet(下图中)中的3*3卷积都是same的,因此才有Z[l+2] + a[l]是同维度的。conv、pool、softmax这些都是有的。

P2.5 1*1卷积核的作用?(网络中的网络)

这玩意儿是啥?

这玩意的作用是啥?

P2.6 inception network(谷歌) motivation

硬伤是啥?

我们加入1*1卷积核之后的计算量看看好多少!

思考:为什么不直接用32个1*1的卷积核得到28*28*32的输出?我个人理解是,1*1主要的作用不是提取特征,而是进行计算量压缩的,因此必须要有个大一点的卷积核来提取特征啊!

小结:inception module:当你不想自己去选择那些个卷积核类型合适的时候,say: let's do them all. and let's concatenate the results.

P2.7 inception网络

inception模块构成如下图所示,将前面激活函数的输出,再组合出一些卷积核进行输出,将这些输出叠起来就是输出啦!是按通道这个维度叠起来哟~

这个才是论文中描述的整个网络结构,单单就其中某个block来说的话就是上面那个!

总结:

  • Inception:注意是大写开头,这个是官方引用的电影梗!“我们需要进入更深层次!”
  • 版本更新成V2、V3、V4,还有个甚至是跳跃连接,效果不错!

P2.8 我们不要自己重复造轮子!

用好github网站!

P2.9 迁移学习

问题:我们目标都不一样的话还能随便用别人的模型嘛?怎么使别人的模型适应我们的任务?具体细节是什么?

P2.10 数据扩充(数据增强)

第一种:

第二种:

数据生成的软件流程如下所示:开一个线程专门做数据产生的,从硬盘读数据然后构造出我们要的数据(mini batch),然后送给其他线程或者GPU去执行训练操作。

总结:图像颜色失真大小、分布等这些是超参数,随机剪切大小、模式也是超参数,这些是需要我们人为根据实际场景来设计的,因此,具体场景具体分析吧!童鞋们!

P2.11计算机视觉现状

数据量和手工工程的关系:
数据量少的时候我们需要人工构建特征,数据量大(当然在机器视觉领域我们从来不认为数据量是足够的)的时候就构建复杂的网络架构来实现任务;

发论文的算法都是在一个标准测试集上的表现,并不是在真实的生产环境中产生;

其中他们用到的一些小tips如下:

集成Ensembling:

多剪切:


使用开源代码:

总结

上一篇 下一篇

猜你喜欢

热点阅读