9-卷积神经网络实例探究

卷积神经网络实例探究

残差网络(ResNets)

非常非常深的神经网络时很难训练的,因为存在梯度消失和梯度爆炸的问题。

使用**跳跃连接(skip connection)**可以构建残差神经网络。

跳跃连接,可以使某一层获取激活值,然后迅速反馈给另外一层,甚至是神经网络更深层。

ResNets是由残差块(Residual block)构建的。

残差块

有一个两层的神经网络:

在L层激活得到a[l+1]a^{[l+1]},然后再次激活,两层后得到a[l+2]a^{[l+2]}

计算过程为:

z[l+1]=W[l+1]a[l]+b[l+1]a[l+1]=g(z[l+1])z[l+2]=W[l+2]a[l+1]+b[l+2]a[l+2]=g(z[l+2])z^{[l+1]} = W^{[l+1]}a^{[l]} + b^{[l+1]} \\ a^{[l+1]} = g( z^{ [l+1] } ) \\ \\ z^{[l+2]} = W^{[l+2]}a^{[l+1]} + b^{[l+2]} \\ a^{[l+2]} = g( z^{ [l+2] } ) \\

这里的激活函数gg使用ReLu非线性激活函数。

image-20220929093908420

因此,从a[l]a^{[l]}a[l+2]a^{[l+2]}要经过上面的所有步骤。

在残差网络中有一点变化,将a[l]a^{[l]}直接向后,拷贝到神经网络的深层,并在Relu激活函数前加上a[l]a^{[l]},等于跳过了中间层,不再沿着主路径传递,走了捷径。

image-20220929094719557

即在计算a[l+2]\boldsymbol{ a^{[l+2]} }的时候,不仅使用z[l+2]\boldsymbol{ z^{[l+2]} },还要加上前两层的a[l]\boldsymbol{ a^{[l]} },求和再通过激活函数计算出a[l+2]\boldsymbol{ a^{[l+2]} }

所以a[l]a^{[l]}的插入时机是 线性激活之后,Relu激活之前。

“跳跃连接”就是指a[l]a^{[l]}跳过一层或者好几层,从而将信息传递到神经网络更深层。

这里的两层神经网络,就称为一个残差块。

而ResNet网络就是将很多这样的残差块堆积在一起,形成一个很深的网络。


ResNet的论文给出了一个ResNet网络。

image-20220929095158680

这是一个普通的网络,包含多个卷积层。

image-20220929095224738

这是加入了残差块的ResNet网络,有多个残差块构成。

如果使用一个标准优化算法来训练一个普通的网络,那么可以根据训练经验得到:随着网络深度加深,训练的误差会减小,然后再增大。

而从理论上说,随着网络深度加深,应该训练的越来越好才对,但实际上,如果没有残差网络,深度越深意味着用优化算法越难训练。

残差网络为什么有效

还以上面给出的两层神经网络为例,对于a[l+2]a^{[l+2]}有:

a[l+2]=g(z[l+2]+a[l])=g(W[l+2]a[l+1]+b[l+2]+a[l])\begin{aligned} a^{[l+2]} &= g(z^{[l+2]} + a^{[l]} ) \\ & = g(W^{[l+2]} a^{[l+1]} + b^{[l+2]} +a^{[l]} ) \end{aligned}

如果使用L2正则化或权重衰减,那么W[l+2]W^{[l+2]}的值会减小,同样bb的值也会减小。

假设W[l+2]=0,b[l+2]=0W^{[l+2]} = 0, b^{[l+2]} = 0,那么(W[l+2]a[l+1]+b[l+2])(W^{[l+2]} a^{[l+1]} + b^{ [l+2] } )的值为0。

激活函数是Relu,可得:a[l+2]=g(a[l])=a[l]a^{[l+2]} = g(a^{[l]}) = a^{[l]}

因此即使发生梯度消失的情况,激活值并不会变为0。


如果a[l+2]a^{[l+2]}a[l]a^{[l]}有不同的维度,不能直接相加,那么需要在增加一个矩阵,标记为WsW_s

例如,输入维度是128,而a[l+2]a^{[l+2]}维度是256,那么WsW_s的维度是256×128,它同样通过神经网络学习参数,是一个固定矩阵。

1×1卷积

使用池化层可以减小输入的宽度和高度,但是无法减小输入的通道。

使用1×1的过滤器进行卷积,可以减小(也可以增加)输入的信道。

image-20220929142519373

例如上图,输入维度为28×28×192,要想将通道减小为32,使用32个维度为1×1×192的过滤器可以实现,这样在保证了所有元素值的同时,减小了通道数。


9-卷积神经网络实例探究
https://zhaoquaner.github.io/2022/10/01/DeepLearning/CourseNote/9-卷积神经网络实例探究/
更新于
2022年10月2日
许可协议