深度残差神经网络resnet与深度残差收缩网络DeepResnet

前一段时间看了一篇文章是深度残差网络的改进,深度残差收缩网络模型。
首先我们看一下resnet的网络结构与计算方式。
首先说一下深度的残差网络的诞生由来,在深度学习的模型中,我们知道在网络中增加网络的深度,可以有效的提高准确率,但是当模型过大时,或出现新的问题,网络层数过大,会造成网络的梯度爆炸,与梯度消失,造成模型反而不容易收敛。比如·VGG16,VGG19网络的层数已经很高,如果再提高层数,就会出现这个问题。但是层数高准确率高,层数太高又会出现梯度消失,有没有什么办法,可以两全其美,答案就是resnet网络。
resnet网络重点解决的是不收敛问题,我们之前解决不收敛问题一般使用BN正则化,我们先来看一下resnet中最特殊的残差块
深度残差神经网络resnet与深度残差收缩网络DeepResnet
F(X)=X是网络原来的输出,现在残差块使得H(x)=f(x)+x
现在的网络如果需要继续收敛,我们只需要让F(X)=H(x)-x=0
多层网络的非线性映射是无法与恒等映射对应,但是如果为0,优化就会容易很多。
具体而言,f(x)=x恒等映射的函数,我们f(5)=5.2,普通网络的输出5.2到5.3,增加0.1,相对整个的输出会很小,而使用H(x)=f(x)+x,增加了0.1,则会增加很多,简单来说,残差网络利用了无论增加多少,都与输入进行残差计算,使得优化作用放大,模型可以继续训练。也正是这样的原因,使得模型收敛,进一步提升准确率,resnet18,resnet50 ,甚至最后出现了resnet152,训练准确率提升巨大。
与之进行对比的还有深度残差收缩网络deep resnet
他并不是说resnet网络的缺点,而是对resnet网络进行了优化,使得网络抗噪声的能力增强。
在整个模型中引入软阈值函数进行降噪,软阈值函数图像如下:

深度残差神经网络resnet与深度残差收缩网络DeepResnet
可以看出输入在0附近的信号输入,都会输出为0信号吗,超过一段的输出信号会被保留,从而达到降噪的效果。
深度残差收缩网络中融合了深度残差网络与SEnet(注意力机制),以及软阈值函数。
深度残差神经网络resnet与深度残差收缩网络DeepResnet
在残差块的输出中增加软阈值函数进行降噪,但是具体的软阈值参数,通过注意力的机制进行设定,相当于在大的残差块中加入一个小型网络进行软阈值函数的参数设定,从而达到更好的效果。达到更好的准确率。
使用深度残差收缩网络进行cifar100数据集的训练代码开源在本人的github社区:
https://github.com/qianyuqianxun-DeepLearning/DResnet-cifar100

参考文献
1.https://ieeexplore.ieee.org/document/8850096
2.https://github.com/zhao62/Deep-Residual-Shrinkage-Networks
3.https://mp.weixin.qq.com/s?__biz=MzA5ODEzMjIyMA==&mid=2247498406&idx=2&sn=96f017225ed639158c65d00a3a763188&chksm=9094f335a7e37a234d9a26bfb827c1c8b2e9a481837ed946951f3fe4f4515c468f3287ef0a98&mpshare=1&scene=23&srcid=&sharer_sharetime=1586694272544&sharer_shareid=51c7dc0dc77bea39fb5433582dbbd13a#rd
4.百度图片——软阈值函数