我们知道越深的网络其实是越难以训练的,因为我们前面说过,越来越深的网络接近输入层的时候,他的梯度的更新力度是很小的。即使底层有更新,会给高层的网络造成动荡。前面也讲过了两种方法,
- (1)Xavier算法初始化
- (2)批量归一化,batch-normalization
那么ResNET是如何解决这个问题的呢?
这里推三层神经网络
- layer 1
- layer 2
- layer 3
根据链式法则,我们计算梯度的时候是从顶层往底层往下走。更新最顶层的参数的时候梯度可能还很大,但是经过后面连续乘以多个小数,这个梯度就会小的可怜,直至梯度消失。
ResNet之所以能够解决梯度消失的问题就是因为第三层网络的这种结构。它改变了原来函数套函数的结构,变成了函数加函数的结构。再求导的时候,可以根据加法原则,顶层的梯度是可以传递到底层去的。将原来的乘法改为了加法。解决了梯度消失的问题。
得益于网络结构的设计。