深度学习基础—残差网络ResNets

1.残差网络结构


        当网络训练的很深很深的时候,效果是否会很好?在这篇论文中,作者给出了答案:Deep Residual Learning for Image Recognitionicon-default.png?t=O83Ahttps://www.cv-foundation.org/openaccess/content_cvpr_2016/papers/He_Deep_Residual_Learning_CVPR_2016_paper.pdf

        实际证明,越深的网络效果可能没有规模小的网络好。这是由于网络训练的很深的时候,会出现梯度消失或梯度爆炸的情况,网络难以训练,从而产生退化问题。而残差网络可以解决这个问题,帮助训练层数较多的网络。

(1)残差块

        对于网络的一层,原本的操作是先进行权重参数的线性组合,在进行激活函数的计算。而残差块直接将某一层的输出值转移到其后某层的激活函数计算前,即激活函数计算前将(上一层的输出+转移的值)一起作为输入。

        我们来推导一下计算公式,还以上图为例,假设当前的输入x为a[l],则经过l+1层的线性组合后变成:

        经过l+1层的Relu激活函数后变为:

        经过l+2层的线性组合后变为:

        此时,激活函数计算前应该加上a[l],经过l+2层的线性组合后变为:

        这就是一个残差块,由残差块组成的网络就是残差网络。残差又称为跳跃连接。

        注意:这只是在普通网络实现残差块,在文章开头的链接中,是在卷积神经网络中实现残差神经网络的,如下:

        最右侧的网络就是残差网络的作者实现34层残差网络,每两层卷积层作为一个残差层(池化层不含参数,不计入层数)。

(2)残差块的意义

        将上述推导的公式展开:

        当进行L2正则化或者权重衰减,参数的值会被压缩,W[l+2]和b[l+2]的值就可能接近0。假设W[l+2]和b[l+2]的值为0,此时进行Relu激活函数后a[l+2]=a[l]。也就是恒等式,经验表明网络学习一个恒等式很容易,说明增加残差块对网络的表现几乎没有影响。

        但是,我们的目的是让网络有更好的表现,如果残差块的神经元学习到一些有用的信息,就会为网络带来更好的表现。因此残差块的意义就是:保证网络表现不会更低的情况下,寻找更优的网络结构。

2.注意事项


        可能有人会注意到,a[l]直接转移到某一层激活函数前,万一维度不一致无法计算怎么办?

        实际上残差网络使用了许多same卷积,因此可以保证残差块计算的维度一致。但如果出现了维度不一致,可以进行如下操作:

        在a[l]前进行一次矩阵运算,保证Wsa[l]的输出维度和要运算的上一层输出维度一致,比如z[l+2]是256大小的向量,而a[l]的大小是128,就可以把Ws的大小固定为256*128,此时维度就保证了一致,然后把Ws作为参数进行学习。

        也可以扩充a[l]的大小,进行padding操作,用0填充。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值