shortcut和残差连接

最近搜索了下这几两个概念,记录一下个人理解。

  • shortcut
    在这里插入图片描述
    x、y是相邻两层,通过W_H连接,通过将多个这样的层前后串接起来就形成了深度网络。其中H表示网络中的变换。
    在这里插入图片描述
    为了解决深度网络的梯度发散问题,Highway在两层之间增加了(带权的)shortcut。
    在这里插入图片描述
    在这里插入图片描述
    其中C=1-T。

  • 残差连接(skip connect)在这里插入图片描述

若没有加入identity分支,那么就是用非线性变化函数来描述一个网络的输入输出,即输入为X,输出为F(x),F通常包括了卷积,激活等操作。

但是当我们强行将一个输入添加到函数的输出的时候,虽然我们仍然可以用G(x)来描述输入输出的关系,但是这个G(x)却可以明确的拆分为F(x)和X的线性叠加。将输出表述为输入和输入的一个非线性变换的线性叠加。它解决了深层网络无法训练的问题。

首先我们定义残差单元:
在这里插入图片描述

Xl和Xl+1表示的是第l个残差单元的输入和输出,F是残差结构,表示学习到的残差,当h(xl)=xl时表示的就是恒等映射,f是relu激活函数。
通过递归,可以得到任意深层单元L特征的表达:
在这里插入图片描述

反向传播过程为:

在这里插入图片描述
表示损失函数到达L的梯度,小括号里的1表示短路机制(identity x)可以无损地传播梯度,而另一项残差梯度则需要经过带有weights的层,残差梯度不会那么巧全为-1,就算其很小,由于1的存在不会导致梯度消失,所以残差学习会更容易。在这里插入图片描述

再举个例子看看残差网络是如何改善梯度消失现象的:
假设输入只有一个特征,没有偏置单元,每层只有一个神经元:
在这里插入图片描述
我们先进行前向传播,这里将Sigmoid激励函数写为s(x):

z1 = w1*x

a1 = s(z1)

z2 = w2*a1

a2 = s(z2)

zn = wn*an-1 (这里n-1是下标)

an = s(zn)

根据链式求导和反向传播,我们很容易得出,其中C是代价函数
在这里插入图片描述
那如果在a1和a2之间加入残差连接,如下所示:
在这里插入图片描述
那么z2=a1*w2+a1
所以z2对a1求导的结果就是(w2+1)
上边的链式求导、反向传输的结果中的w2就变成了(w2+1)
所以残差连接可以有效缓解梯度消失的现象。

最后一个例子:
在这里插入图片描述

ResNet网络就是用到了这种残差连接。

  • 10
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值