基础网络架构探究之DiracNets

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/linolzhang/article/details/79721762

CNN研究者总是面临一个共同的话题:如何提升神经网络的表达能力?

分两个方向去探讨:

1)拉长

增加网络层数是最直观的一种方法,但这种方法所面临的是 梯度消失问题,网络越深,梯度的回传越困难。

基于此,MSRA提出了ResNet,通过skipconnection的方式,通过残差思想很好的解决了这个问题。

可以参考论文:Deep Residual Learning forImage Recognition

这一版本的 ResNet存在一个问题,作者也open了出来,并且很快提出了解决方案:

Identity Mappings in DeepResidual Networks

去掉了最外面的relu层,实现了Identity mapping,在1001层的网络上表现相当强悍(感叹一下,把一篇文章能解决的问题 凑两次,大神也套路)

2)变宽

变宽的思路包括很多种,主要做法就是拆分卷积层,每层通过不同的卷积核来引入提取的多样性,通过concat或者其他joint方式来合并,比如Inception、ResNext等。



3)结构优化

结构优化的方向比较多,比如常用的方法:

A)修改激活函数

包括PReLU、LReLU、CReLU、ELU、SELU等

B)定义卷积核

比如1*3的卷积核,膨胀卷积,不规则卷积等;

C)Batch Normalization(BN)和Layer Normalization(LN)、多尺度

D)Weight Normalization

即通过重写权值w来加速深度网络的参数收敛

A Simple Reparameterizationto Accelerate Training of Deep Neural Networks

4)轻量级网络

    通过Pruning、量化等方法来压缩网络,在相同计算量的情况下,构造最优的网络。

l  DiracNets

本文提出的DiracNet,是属于 Weight Normalization 的一种,先来认识一下dirac函数:

Dirac函数比较简单,公式描述为:

 

即在x=0点值为1,其它值为0,定义区间上积分为1,示意图:

其中卷积函数定义为(x为input,I为单位矩阵):

不考虑bias的情况:

    

    

a,b都是通过训练得到,其中a初始化为1.0,b初始化为0.1,

    对于每一个滤波器(Filter),W是按照欧式距离归一化后得到的权重向量。

 

猜你喜欢

转载自blog.csdn.net/linolzhang/article/details/79721762