残差结构Residual

  初次接触残差结构是在ResNets的网络中,可以随着网络深度的增加,训练误差会越来越多(被称为网络退化)的问题,引入残差结构即使网络再深吗,训练的表现仍表现很好。它有助于解决梯度消失和梯度爆炸问题,让我们在训练更深网络的同时,又能保证良好的信息。

python 残差块 残差块结构_计算机视觉


残差结构示意图

残差网络的设计思想

  残差元的主要设计有两个,快捷连接和恒等映射,快捷连接使得残差变得可能,而恒等映射使得网络变深,而恒等映射主要有两个:跳跃连接和激活函数。

python 残差块 残差块结构_python 残差块_02

  实验证明残差块往往需要两层以上,单单一层的残差块y = W 1 ∗ x + x并不能起作用。实际中,考虑计算的成本,对残差块做了计算优化,即将两个3x3的卷积层替换为1x1 + 3x3 + 1x1, 如下图。新结构中的中间3x3的卷积层首先在一个降维1x1卷积层下减少了计算,然后在另一个1x1的卷积层下做了还原,既保持了精度又减少了计算量。

python 残差块 残差块结构_深度学习_03

2.BN

What is BN

  Normalization是数据标准化(归一化,规范化),Batch 可以理解为批量,加起来就是批量标准化。

先说Batch是怎么确定的。在CNN中,Batch就是训练网络所设定的图片数量batch_size。

Normalization过程,引用论文中的解释:

python 残差块 残差块结构_python 残差块_04

卷积神经网络CNN—— BN(Batch Normalization) 原理与使用过程详解
输入:输入数据x1…xm(这些数据是准备进入激活函数的数据)
计算过程中可以看到,
1.求数据均值;
2.求数据方差;
3.数据进行标准化(个人认为称作正态化也可以)
4.训练参数γ,β
5.输出y通过γ与β的线性变换得到新的值

在正向传播的时候,通过可学习的γ与β参数求出新的分布值

在反向传播的时候,通过链式求导方式,求出γ与β以及相关权值

python 残差块 残差块结构_python 残差块_05

Why is BN
解决的问题是梯度消失与梯度爆炸。