ResNet 深度残差网络 & DenseNet

ResNet 

       残差神经网络,由华人学者何恺明在微软亚洲研究院时提出

      在2014年的时候,深度网络的层数已经达到了22层,当时的一些学者就肯定会在想,更深层次的网络结构会带来更好的效果,而当人们去堆叠更深层次的网络结构的时候,发现网络的性能并没有得到提升,反而会有所下降,因为网络层次较深,误差的累计产生了梯度弥散的情况,等反向更新到最开始基层的时候,梯度就趋近于0了。

      怎么解决呢

 

ResNet 深度残差网络 & DenseNet_第1张图片

     ResNet解决的思路就是,比如我们有一个30层的网络,那么我们的30层的网络最少最少也要比22层不差才行。所以我们就在网络上加一个shortcut短路层,在短路层上梯度的传播没有进行衰减

ResNet 深度残差网络 & DenseNet_第2张图片

如果加的8层的train的结果不好,就直接走右边的短路,就不走它了

在具体实施上,不是对后面的所有曾加一个shortcut,是每隔多少层加一个shortcut

每一个加了shortcut的都是一个小单元,网络结构是由多个小单元堆叠形成的

CNN是堆叠“conv-BathNormalize-pooling-ReLu”这样的单元来形成更深层次的网络

 

对shortcut的理解

ResNet 深度残差网络 & DenseNet_第3张图片

F是求和前网络映射,H是从输入到求和后的网络映射。比如把5映射到5.1,那么引入残差前是F’(5)=5.1,引入残差后是H(5)=5.1, H(5)=F(5)+5, F(5)=0.1。这里的F’和F都表示网络参数映射,引入残差后的映射对输出的变化更敏感。比如s输出从5.1变到5.2,映射F’的输出增加了1/51=2%,而对于残差结构输出从5.1到5.2,映射F是从0.1到0.2,增加了100%。明显后者输出变化对权重的调整作用更大,所以效果更好。残差的思想都是去掉相同的主体部分,从而突出微小的变化,看到残差网络我第一反应就是差分放大器…

 

ResNet中的shape变化

ResNet 深度残差网络 & DenseNet_第4张图片

对一个unit,最好是使用2-3层的卷积层比较合适

因为要相加,所以x和x’的shape必须相同

所以,在unit中的卷积的操作后是不能有维度的衰减,也不能有一个channel的衰减

输入是256.输出也必须是256

 

输入[256,224,224]
经过1*1的64channel的卷积核,变成了[64,224,224]
......
到了最后再经过一个1*1的256个卷积核,又变成了[256,224,224]


我们中间在做cov的时候,是会有padding操作的,所以[224,224]的大小不会变


 

ResNet 深度残差网络 & DenseNet_第5张图片

这个画法很讲究,34层的残差网络可以退化成vgg-19

 

 

ResNet 深度残差网络 & DenseNet_第6张图片

 

 

15年的时候ResNet的辉煌战绩

ResNet 深度残差网络 & DenseNet_第7张图片

 

 

ResNet的实现

ResNet 深度残差网络 & DenseNet_第8张图片

 

ResNet 深度残差网络 & DenseNet_第9张图片

这里就是在shortcut那里加上一个1*1的卷积核,如果ch_in和ch_out的shape不相同,就把他们搞相同

也就是说,shortcut上那个1*1的卷积就是extra模块

 

 

 

DenseNet

ResNet 深度残差网络 & DenseNet_第10张图片

每一个点都有机会和前面的所有层加shortcut

 

你可能感兴趣的:(ResNet,CNN,残差神经网络)