对残差网络(ResNet/Residual Network)的基础理解

普通网络

 

假设有一个神经网络如上图所示,包含两个层(weight layer1、weight layer2,无激活函数)

对残差网络(ResNet/Residual Network)的基础理解_第1张图片

那么对这个神经网络进行一次正向传播+反向传播的过程为:

正向传播

输入x,经过第一层,f(x) = w1x + b1

经过第二层,g(f(x)) = w2f(x) + b2

Loss(y, g(f(x))) = (y – g(f(x)))^2(也可为其它损失计算方式,此处不重要)

反向传播

更新参数w1’ = w1 – Lr*,w2’ = w2 – Lr*(Lr为学习速率)

其中

可见计算w1梯度时比计算w2梯度时,连乘操作涉及的元素更多

即越上层的参数,更新时连乘涉及的元素越多(因为信息是反向逐层传播的)

连乘过程中会产生的问题(越上层的参数越容易发生这种情况):

(1) 当连乘时趋近于0的元素很多时:连乘元素越多,结果越趋近于0,造成梯度弥散

即参数更新时计算出的梯度非常小时,说明反向传播反馈回来的信息非常少了,这些参数几乎不更新了

(2) 当连乘时大于1的元素很多时:连乘元素越多,结果越大,造成梯度爆炸

即参数更新时计算出的梯度非常大时,这些参数变化将过于极端,导致模型效果下降


解决方法:残差处理

添加了残差处理后的结构:

假设在layer2处做残差处理,即layer2的输出 = layer2的计算结果 + layer2的输入

输出 = g(f(x)) + f(x)

对残差网络(ResNet/Residual Network)的基础理解_第2张图片

与非残差结构的区别在于,添加残差处理后是用g(f(x)) + f(x)来拟合目标结果而非g(f(x))

那么反向传播的过程中:

可以想象,即使连乘的部分数值过小/趋近于0也还有其它的项来保证参数的更新

可以说:

残差处理即为通过改变模型输出值的构成以在梯度计算时融入加法,使得当个别梯度计算时即使部分项过小/趋近于0时,信息传播也不会消失

你可能感兴趣的:(深度学习,学习,深度学习,神经网络)