论文笔记 | Identity Mappings in Deep Residual Networks

这一篇文章为上一篇ResNets提供了更加可信服的论据

Authors

Kaiming He, Xiangyu Zhang, Shaoqing Ren, and Jian Sun
都是“老熟人”了就不介绍了

Abstract

上篇文章中(http://blog.csdn.net/bea_tree/article/details/51735788)因residual builing blocks而得以建设100多层的深度网络,这里有介绍了新的residual unit,使训练更容易, 并且improves generalization。

1 Introduction

Residual Units:
这里写图片描述
上篇文章中, h(xl)=xl,是输入,f是Relu,x(l+1)是输出。如果h(xl)和f(yl)都是identity mappings, 信息就会直接从shortcut直接传输。
为了明白skip connections的作用,文章进行了分析与实验,发现identity mapping h(xl)=xl可以取得最快的error reduction和lowest training loss(参与实验的有 scaling,gating, 1x1convolutions)。
这里使用ReLU和BN放置于weightlayer前,作为新的residual unit,如下图:
这里写图片描述
新的结构更容易训练也更容易泛化,使用它建立了1001层网络。
另外在上篇文章中200层网络就开始过拟合,这里对其进行改进。

2 Analysis of Deep Residual networks

如果 f 也是一个identity mapping,那么其结构可以写成这样:
这里写图片描述
上式展现了ResNets两个特性:
1. 模型是以残差形式存在的
2. 这是以相加的形式存在而plain network是以矩阵相乘的形式存在的
上式的反向传播形式 ε 是loss function:
这里写图片描述
可见 εxl 分为两部分其中

### 深度残差网络中的恒等映射 深度残差网络(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]。这样一来不仅降低了难度还促进了信息流动的有效性。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值