由于非常深的网络是很难训练的,因为存在梯度消失和爆炸的问题,残差网络可以从某一网络层**反馈给另外一层,甚至更深的一层。我们可以利用跳远连接结构来训练深度网络的ResNet,甚至超过100层,ResNet是由残差块构建的。残差块能防治网络爆炸或者消失,能保证网络良好的性能。

残差网络

上述过程中,残差网络中有一点变化,我们将al直接向后拷贝到神经网络的深层,在relu非线性**前线性**之后加上al,这是一条捷径,al的信息将直接达到网络的深层,不再沿着主路径进行传递。

残差网络

上述:通过捷径到达第二层。

1、普通的神经网络随着深度的加深,误差越大。残差网络使得误差减小。

2、使用残差块能够训练更深的神经网络,所以构建一个ResNet网络就是通过将很多的残差块,堆积在一起形成更深的神经网络。每两层构建一个残差块。

残差网络

对于x的**或者中间层的**,能够达到网络的最深层,这种方式有助于解决梯度爆炸问题或者消失问题。

上图中,把它变成ResNet的方法是加上所有的跳远连接。五个残差快构成一个残差网络。

残差网络

残差网络主要起作用的原因是:

虽然多了两层,但是只要把al的值赋值给al+2,所以给大型神经网络增加两层,不管把残差块在神经网络的中间或者末尾,都不影响网络的表现。

这些残差快学习恒等函数非常容易。所以创建网络残差可以提高网络性能。而这些不含有残差块的深度神经网络,随着网络的加深,即使是选择恒等函数的参数都很困难。

残差块起作用的重要原因是这些残差块学习恒等式非常容易,因此创建残差网络可以提高网络性能

还有一个细节需要注意的是:

残差网络

z[l+2]与a[l]具有相同的维度,所以在中间的过程中,经历了相同的卷积。

残差网络

注意:w是一个可以学习参数的矩阵。或者用0填充a[]

残差网络

上述图中,使用了相同的卷积,所以z[l+2]+a[l] 具有相同的维度。ResNet 和其他网络一样,其中偶尔会有池化层或者类似的池

化层的层。我们都需要调整Ws的维度。

残差网络

卷积结束用Relu函数。

残差网络

上述图中,一个神经元的输入(一个过滤器)是32个数字,乘以相同高度和宽度上某个切片上的32个数字。这32个数字具有不同的信道,乘以32个权重,使用Relu函数,在这里输出相应的结果。

多个过滤器就相当于多个神经元的输入。如下图:

残差网络

可以理解为:这32个单元都应用了一个全连接神经网络,全连接的作用是输入32个数字和过滤器的数量,标记nc[l+1],在36个单元重复此过程。输出结果6*6*过滤器的数量。以便在输入层实施一个非平凡的计算。这种方法为1*1 卷积运算。有时称为network in network。

残差网络

可以使用池化层压缩它的高度和宽度,上图中用了32个1*1的过滤器,过滤器为1*1*192 ,因为过滤器的信道数和输入层的信道数是一致的。

1*1 卷积可以减小信道数量。1*1只添加了一个非线性函数。从而减小和保持信道数的不变。我们可以通过1*1 的卷积压缩和保持信道数的数量。


相关文章: