深度残差收缩网络(Deep Residual Shrinkage Networks,DRSN)是深度残差网络(Deep Residual Networks)的一种改进形式。顾名思义,深度残差收缩网络,就是对“深度残差网络”的“残差路径”进行“收缩(软阈值化)”的一种网络。深度残差收缩网络的设计体现了一种思想:在特征学习的过程中,剔除冗余信息也是非常重要的。
1. 深度残差网络基础
残差模块(Residual Building Unit, RBU)是深度残差网络基本组成部分。如下图所示,长方体表示通道数为C、宽度为W、高为1的特征图;一个残差模块可以包含两个批标准化(Batch Normalization, BN)、两个整流线性单元激活函数(Rectifier Linear Unit activation function, ReLU)、两个卷积层(Convolutional layer)和恒等映射(Identity shortcut)。恒等映射是深度残差网络的核心贡献,极大程度地降低了深度神经网络训练的难度。K表示卷积层中卷积核的个数,在此图中K与输入特征图的通道数C相等。在这张图中,输出特征图的尺寸和输入特征图的尺寸相等。
在残差模块中,输出特征图的宽度可以发生改变。例如,在下图中,将卷积层中卷积核的移动步长设置为2(用"/2"表示),那么输出特征图的宽度就会减半,变成0.5W。
输出特征图的通道数也可以发生改变。例如,在下图中,如果将卷积层中卷积核的个数设置为2C,那么输出特征图的通道数就会变成2C,也就是使得输出特征图的通道数翻倍。
深度残差网络的整体结构如下图所示。我们可以看到,一个深度残差网络,从前到后,包含了一个卷积层、一定数量的残差模块、一个批标准化、一个ReLU激活函数、一个全局均值池化和一个全连接输出层。深度残差网络的主体部分就是由很多个残差模块构成的。在深度残差网络进行基于反向传播的模型训练时,其损失不仅能够通过卷积层等进行逐层的反向传播,而且能够通过恒等映射进行更为方便的反向传播,从而更容易训练得到更优的模型。
2. 深度残差收缩网络
深度残差收缩网络面向的是带有“噪声”的信号,将“软阈值化”作为“收缩层”引入残差模块之中,并且提出了自适应设置阈值的方法。实际上,这里的“噪声”可以宽泛地理解为“与当前任务无关的特征信息”。
2.1 软阈值化
首先解释软阈值化的概念。软阈值化是将输入数据朝着零的方向进行收缩的一种函数,经常在信号降噪算法中使用。其公式如下:
x表示输入特征,y表示输出特征,τ表示阈值。在这里,阈值需要是一个正数,并且不能太大。如果阈值比所有的输入特征的绝对值都大,那么输出特征y就只能为零。这样的话,软阈值化就没有了意义。同时,软阈值化函数的导数公式如下:
我们可以看出,软阈值化函数的导数要么为零,要么为一。这个性质是和ReLU激活函数相同的,因此软阈值化函数也有利于防止“梯度消失”和“梯度爆炸”。将上述两个公式以图片的形式展示出来,得到下图:
2.2 网络结构
这部分首先介绍一种改进后的残差模块。我们可以对比图1和图6的区别。相较于图1,图6中的残差模块里多了一个小型的子网络。这个子网络的作用就是自适应地设置阈值。通过仔细观察这个子网络,可以发现,这个子网络所设置的阈值,其实就是(特征图的绝对值的平均值)×(一个系数α)。在sigmoid函数的作用下,α是一个0和1之间的数字。在这种方式下,阈值不仅是一个正数,而且不会太大,即不会使输出全部为零。
将图4中的基本残差模块,替换成图6中改进的残差模块RSBU-CS,就得到了第一种深度残差网络(Deep Residual Shrinkage Network with channel-shared thresholds, DRSN-CS)的结构,如下图所示:
再介绍另一种改进后的残差模块。相较于图6,图8中的残差模块所获得的阈值,不是一个值,而是一个向量,也就是特征图的每一个通道都对应着一个收缩阈值。
类似的,将图4中的基本残差模块,替换成图8中改进的残差模块RSBU-CW,就得到了第一种深度残差网络(Deep Residual Shrinkage Network with Channel-Wise thresholds, DRSN-CW)的结构,如下图所示:
3. 实验验证
论文采集了8种不同健康状态下的振动信号,进行深度残差收缩网络的分类效果验证。为了体现深度残差收缩网络对噪声的抑制能力,在振动信号中分别添加了不同量的高斯噪声、拉普拉斯噪声和粉红噪声,信噪比分别为-5dB至5dB,并且与卷积神经网络(ConvNet)和深度残差网络(ResNet)进行了对比。
下图展示了在不同程度高斯噪声情况下的实验结果:
然后是不同程度拉普拉斯噪声情况下的实验结果:
最后是不同程度粉红噪声情况下的实验结果:
将一组测试样本的高层特征约简到二维平面,以散点图的形式绘制出来,得到下图:
将算法训练过程中的交叉熵误差随迭代次数的变化,以曲线的形式绘制出来,得到下图:
2019年10月19日更新:
个人理解,软阈值化能把“一定取值范围[-τ,τ]内的特征”置为零,而且这个取值范围[-τ,τ]在论文里是可以自适应调整的,是一种更灵活的、删除冗余信息的方式吧。
如果跟前一层的偏置b放在一起看的话,被置为零的取值范围就变成了[-τ+b,τ+b]。τ和b都是可以自动学习得到的参数。这么看的话,这种删除冗余特征的方式,似乎可以将任意范围的特征给删除掉。
总之,大概就是,先通过卷积层学习得到一些特征,然后判断哪个取值范围内的特征是冗余的,并且删除掉它们。
2019年12月23日更新:
在TensorFlow里,我觉得软阈值化可以这么编:output_feature = tf.multiply(tf.sign(input_feature), tf.maximum(tf.abs(input_feature)-threshlds,0))
转载网址:
https://zhuanlan.zhihu.com/p/85238942
原文网址:
M. Zhao, S. Zhong, X. Fu, B. Tang, M. Pecht, Deep Residual Shrinkage Networks for Fault Diagnosis, IEEE Transactions on Industrial Informatics, 2019, DOI: 10.1109/TII.2019.2943898
https://ieeexplore.ieee.org/document/8850096/