7 ResNet网络结构详解
系列进度
AI 30 个神经网络 · 第 7 / 62 篇
ResNet 的关键是让信息有一条更短的路回传。残差连接不是装饰,它决定了深层网络能不能稳定训练。这篇重点看结构。先把数据流、关键模块和输出层画清楚,再回头看公式或代码。
我会看每个残差块的输入输出通道是否一致,不一致时是否有投影分支。这里错了,网络通常会直接维度报错。
在前一篇关于BERT的训练技巧中,我们讨论了BERT模型如何利用其独特的架构和自监督学习从大量文本中进行特征提取,然后在各种任务上表现出色。接下来,我们将深入了解ResNet,一种在计算机视觉领域广泛应用的深度学习架构,分析其网络结构及其运作原理。
ResNet简介
ResNet(Residual Network)是一种深度卷积神经网络,最初由Kaiming He等人在2015年提出,并在ImageNet挑战赛中取得了优异的成绩。ResNet的成功在于其引入了残差学习(Residual Learning)的方法,这使得构建极深网络(如152层及以上)成为可能。
学习 ResNet 结构时,先看残差块、跳跃连接、恒等映射和层数变化。理解信息如何绕过复杂层,才能明白它为什么适合深层网络。
网络结构
ResNet的核心思想是通过引入跳跃连接(skip connections)来解决深度神经网络训练中的梯度消失和退化问题。在传统的CNN中,随着网络层数的增多,模型的训练准确性可能会下降,而ResNet通过如下结构来解决这一问题:
开始读《ResNet网络结构详解》前,可以先看图中从问题到结果的路径。读完后再对照正文,确认自己能不能照着复现。
残差块
ResNet的基本组成单元是残差块。每个残差块包含两个或三个卷积层,以及连接输入与输出的跳跃连接。其结构可以用如下公式表示:
这里,是残差块的输出,是通过卷积层的变换,是块的输入。通过这种方式,网络可以学习到实现这一变换的残差,而不是直接学习所需的映射。
残差块实现的关键代码
在PyTorch中,实现一个简单的ResNet残差块的代码如下:
import torch
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, kernel_size=3, stride=1, padding=1, bias=False)
self.bn2 = nn.BatchNorm2d(out_channels)
self.downsample = downsample
def forward(self, x):
identity = x
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
网络层级
ResNet模型可以有多种深度,主要有ResNet-18、ResNet-34、ResNet-50、ResNet-101和ResNet-152。其中,较深的网络使用了带有Bottleneck(瓶颈)的结构,以减少计算复杂性和参数数量。在ResNet-50及以上的版本中,每个残差块通常由三层构成:1x1的卷积层、3x3的卷积层和另一个1x1的卷积层。
如果《ResNet网络结构详解》还没完全消化,可以从这张卡片的四个动作重新走一遍。
回看《ResNet网络结构详解》时,不必一次做大项目,先用一条简单样例确认主线是否清楚。
总结
ResNet网络结构通过引入残差学习和跳跃连接,大大缓解了深度网络训练面临的挑战,使得网络能够更深,并且在各种视觉任务上获得了优异的结果。
下一篇将讨论ResNet的优势与不足,深入分析其在实际应用中的表现及改进方向。通过对比BERT与ResNet的特性,我们可以更好地理解深度学习模型在不同领域的应用场景。
相关教程
相关入口
分享文章
转发到常用平台
微信/朋友圈可先复制链接
相关教程
从相近问题继续读
相关内容