论文阅读|ResNetv2:Identity Mappings in Deep Residual Networks

首先回顾ResNetv1, 这里把第一版本的ResNet叫做原始版本,原始版本中的网络结构由大量残差单元(“Residual Units”)组成,原文中的残差单元有两种(见图1),一种是building block,一种是“bottleneck” building block,本文中以building block为例。
在这里插入图片描述
图1.原版本ResNet中提到的两种残差单元。左边是building block,右边是“bottleneck” building block。二者计算量接近,但是右边能取得更好性能。

这些残差单元,可由以下公式表示:
yl=h(xl)+F(xl,Wl),(1)y_l = h(x_l) + F(x_l, W_l) , (1)yl=h(xl)+F(xl,Wl),(1)xl+1=f(yl),(2)x_{l+1} = f(y_l),(2)xl+1=f(yl),(2)
xl和xl+1分别为第l个单元的输入和输出, FFF代表残差函数,h(xl)=xlh(x_l)=x_lh(xl)=xl代表恒等映射(identity mapping ),fff代表ReLU。

该篇论文主要聚焦于构建一条贯通全网络的直通车道,使得前向传播和反向传播都能在这条通道上很好的传播信息,减少因网络层增加而带来的信息损失,也即梯度信息损失等,使得网络能够够造更深层的网络。

作者推导得出,如果h(xl)h(x_l)h(xl)f(yl)f(y_l)f(yl)都是恒等映射,那么前向传播和反向传播的信号就能直接从一个单元传到任意一个其他单元。并且实验证明,但网络接近以上两个条件时网络更容易训练。
下面是推理:
h(xl)h(x_l)h(xl)f(yl)f(y_l)f(yl)都是恒等映射时,即h(xl)=xlh(x_l)=x_lh(xl)=x

### 深度残差网络中的恒等映射 深度残差网络(Deep Residual Networks, ResNets)的核心思想在于引入残差学习机制,使得神经网络能够更有效地训练深层结构。其中的关键组件之一是 **恒等映射**(Identity Mapping),也被称为 shortcut connection 或 skip connection。 #### 恒等映射的概念 在传统的前馈神经网络中,随着层数增加,梯度消失或爆炸问题可能导致模型难以收敛。ResNet 提出了通过构建残差块来缓解这一问题。在一个典型的残差块中,输入 \( x \) 经过若干卷积操作后得到输出 \( F(x) \),最终的输出表示为: \[ y = F(x) + x \] 这里的 \( x \) 即为恒等映射部分[^1]。这种设计允许网络直接学习输入与目标之间的差异(即残差),从而简化优化过程并提高模型性能。 #### 实现方法 为了实现上述功能,在实际编码过程中可以采用如下方式定义一个简单的残差块: ```python import torch.nn as nn class BasicBlock(nn.Module): expansion = 1 def __init__(self, in_channels, out_channels, stride=1, downsample=None): super(BasicBlock, self).__init__() # 定义两个连续的卷积层 self.conv1 = nn.Conv2d(in_channels, out_channels, kernel_size=3, stride=stride, padding=1, bias=False) self.bn1 = nn.BatchNorm2d(out_channels) self.relu = nn.ReLU(inplace=True) self.conv2 = nn.Conv2d(out_channels, out_channels * self.expansion, kernel_size=3, stride=1, padding=1, bias=False) self.bn2 = nn.BatchNorm2d(out_channels * self.expansion) # 如果维度不匹配,则需要调整shortcut路径 self.downsample = downsample def forward(self, x): identity = x # 存储原始输入作为identity mapping out = self.conv1(x) out = self.bn1(out) out = self.relu(out) out = self.conv2(out) out = self.bn2(out) if self.downsample is not None: identity = self.downsample(x) # 对齐维度 out += identity # 添加恒等映射 out = self.relu(out) return out ``` 在这个例子中,`out += identity` 表达了核心的恒等映射逻辑。当 `downsample` 不为空时,意味着当前层可能涉及特征图尺寸的变化或者通道数的不同,因此需要额外的操作使两者形状一致后再相加[^2]。 #### 数学解释 假设某一层的目标函数为 \( H(x) \),那么传统的方法试图让每一层逼近这个复杂函数;而利用残差连接之后,我们转而尝试拟合另一个相对简单得多的新函数——残差项 \( F(x)=H(x)-x \)[^3]。这样一来不仅降低了难度还促进了信息流动的有效性。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值