ResNet 网络中的残差单元

news2024/11/24 11:14:01

今晚看《深度学习推荐系统实战》这本书,读到这样一句话,残差单元中的两层 ReLU 网络其实拟合的是输出和输入之间的“残差” x o − x i x^o-x^i xoxi ,想看看微信读书的 AI 问书新功能对这句话怎么理解,原以为会像其他大模型一样,弹出一个对话窗口输入问题,没想到它直接给出了答案,而且还给出了书籍引源、可能想问的问题,我刚好在问题列表中找到想继续深入问的问题,虽然最后给出的答案不太满意,我用它给出的相关问题去 GPT 深入了解了残差单元,但这个用户体验设计很棒。

下面我们来看一下残差单元是什么回事。

残差单元是一种常见的神经网络架构组件,在 ResNet 架构中首次提出。考虑一个图像识别的任务,在带有残差单元的网络(如 ResNet )中,残差单元的工作流程如下:

  • 输入:残差单元接收一个输入 x 。
  • 主路径:输入 x 首先通过两个卷积层进行处理,这两个卷积层尝试学习输入和输出之间的残差(即变化)。假设这两个卷积层之间还有激活函数 ReLU 。
  • 跳跃连接:残差单元包含一个“跳跃连接”(或称为快捷连接),它允许输入 x 直接跳过这两个卷积层,与卷积层的输出相加。
  • 输出:最终的输出是主路径上卷积层的输出(残差)与输入 x 直接相加的结果。这意味着如果没有必要的变化,即如果一个残差单元的输入已经足够接近最终的目标输出,那么该单元可以学习输出一个接近于零的残差。这样,该单元的输出几乎等于其输入,从而实现了仅将输入“传递”到输出,而无需进一步的复杂变换。

残差单元的操作可以被视为:

y = x + F ( x ) y = x + F(x) y=x+F(x)

其中 x 是输入, F(x) 是经过卷积层的变换后得到的残差, y 是输出。

  • 如果 F(x) 接近于零,那么 $ y \approx x $。这意味着残差单元基本上是在做恒等变换,即直接传递输入到输出。
  • 如果 F(x) 不接近于零,说明输入 x 需要通过 F(x) 进行变换以达到理想的输出 y 。

我们来看一段 PyTorch 实现残差单元的代码,

import torch
import torch.nn as nn
import torch.nn.functional as F

class ResidualBlock(nn.Module):
    def __init__(self, in_channels, out_channels, stride=1):
        super(ResidualBlock, self).__init__()
        # 第一个卷积层,使用3x3卷积核,改变通道数和尺寸
        self.conv1 = nn.Conv2d(in_channels, out_channels, kernel_size=3, stride=stride, padding=1, bias=False)
        self.bn1 = nn.BatchNorm2d(out_channels)
        # 第二个卷积层,维持尺寸和通道数
        self.conv2 = nn.Conv2d(out_channels, out_channels, kernel_size=3, stride=1, padding=1, bias=False)
        self.bn2 = nn.BatchNorm2d(out_channels)
        # 维度匹配层,使用1x1卷积调整输入的通道数和尺寸
        self.downsample = nn.Sequential(
            nn.Conv2d(in_channels, out_channels, kernel_size=1, stride=stride, bias=False),
            nn.BatchNorm2d(out_channels)
        )

    def forward(self, x):
        identity = x

        # 主路径
        out = self.conv1(x)
        out = self.bn1(out)
        out = F.relu(out)
        out = self.conv2(out)
        out = self.bn2(out)

        # 调整原始输入的尺寸和通道数以匹配主路径输出
        identity = self.downsample(x)

        # 将调整后的输入与主路径输出相加
        out += identity
        out = F.relu(out)

        return out

如果步长不为 1 或输入输出通道不一致,可以通过维度匹配层,调整输入以便能加到输出上。维度匹配层(通常是一个包含 1x1 卷积的层)在残差单元中的作用是调整输入的维度,使其与残差路径的输出尺寸匹配,从而可以将两者相加。这是在残差网络(如 ResNet )中处理输入和输出通道数不匹配或步长改变导致的尺寸变化时常用的技术。它通常有两个作用:

  • 通道数调整:当输入和输出的通道数不一致时,1x1 卷积可以用来改变通道数,以匹配残差路径的输出。
  • 空间维度调整:当步长不为 1 时,卷积操作通常会改变特征图的高度和宽度。使用 1x1 卷积和适当的步长可以相应地调整输入的空间维度,使其与输出的高度和宽度匹配。

例如,假设我们有一个输入特征图,其尺寸为 56 × 56 × 64(高度56,宽度56,通道数64)。现在我们想通过一个残差块,使输出特征图的尺寸变为 28 × 28 × 128
(即通道数增加,同时特征图大小减半)。

在这个例子中,输入尺寸 56 × 56 × 64 通过设置 stride=2 在 conv1 层被减半到 28 × 28 ,同时通道数增加到 128 。由于原始输入和经过 conv1 和 conv2 后的输出在尺寸和通道数上都不匹配,我们使用一个 1x1 卷积的维度匹配层来调整输入的通道数和尺寸,使之能够与残差路径的输出相加。这样, identity 与 out 的尺寸和通道数均相同,可以直接进行相加操作。


微信公众号「padluo」,分享数据科学家的自我修养,既然遇见,不如一起成长。关注【老罗说AI】公众号,后台回复【文章】,获得整理好的【老罗说AI】文章全集。

数据分析二维码.gif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1986506.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

H20 首发!上 Neolink.AI 免费尝鲜

AI 原生服务平台 Neolink.AI 正式上线!Neolink.AI 致力于整合关键要素——算力、数据、知识、模型与企业应用,旨在为 AI-Native 应用的构建提供高效能的 GPU 算力资源和全面的一站式数据与 AI 平台产品服务。 #高性能千卡集群免费尝鲜# 今天&#xff0…

[Vue3] 4 computed

前言 … 目标 1 computed的用法 computed的用法 computed 计算属性用法与vue2的类似 引入 import { reactive,computed } from vue使用 setup(){let person reactive({firstName:张,lastName:三})// 简单写法 - 只有读// person.fullName computed(()>{// return…

Windows11手动安装linux分发版

Manual installation steps for older versions of WSL | Microsoft LearnStep by step instructions to manually install WSL on older versions of Windows, rather than using the wsl install command.https://learn.microsoft.com/en-us/windows/wsl/install-manual下载完…

【算法 03】雇佣问题

“雇用问题”及其算法优化 在日常生活和工作中,我们经常会遇到需要从多个选项中做出选择的情况,而“雇用问题”正是这样一个典型的例子。在这个问题中,我们不仅要考虑如何高效地找到最佳候选人,还要关注整个过程中的成本。今天&a…

Tomcat漏洞

一、Tomcat 漏洞描述 当 Tomcat运行在Windows操作系统时,且启用了HTTPPUT请求方法(例如,将readonly初始化参数由默认值设置为false),攻击者将有可能可通过精心构造的攻击请求数据包向服务器上传包含任意代码的JSP 文件,JSP文件中…

docker系列11:Dockerfile入门

传送门 docker系列1:docker安装 docker系列2:阿里云镜像加速器 docker系列3:docker镜像基本命令 docker系列4:docker容器基本命令 docker系列5:docker安装nginx docker系列6:docker安装redis docker系…

蒲公英G5-2250路由器之收集各种硬件的配置页面

前言:此篇文章是为了更好的让大家了解各个路由器的后台设置页面具体有哪些功能,更加的清晰直观!(如有雷同纯属巧合,如有侵权联系删除!) 云管理平台 本地地址IP/oraybox/login.html 本地配置页…

一把手带你了解Bigo Ads联动休闲真金游戏出海营销策略

一把手带你了解Bigo Ads联动休闲真金游戏出海营销策略 在探索Bigo Ads作为投放海外游戏广告的平台时,精准定位与创意融合成为了成功的关键。首先,深入理解目标市场的文化习俗与玩家偏好至关重要。不同地区的玩家对于游戏类型、画风乃至广告语言风格都有…

【链表OJ】常见面试题 3

文章目录 1.[环形链表II](https://leetcode.cn/problems/linked-list-cycle-ii/description/)1.1 题目要求1.2 快慢指针1.3 哈希法 2.[随机链表的复制](https://leetcode.cn/problems/copy-list-with-random-pointer/description/)2.1 题目要求2.2 迭代法 1.环形链表II 1.1 题目…

KEIL5芯片包下载

一、打开KEIL芯片包下载网址 Arm Keil | Devices 二、搜索要下载的芯片型号 三、安装

CSP初赛知识点讲解(二)

CSP初赛知识点讲解(二) 进制转换基本定义n进制转十进制十进制转n进制n进制转m进制小数的进制转换 例题训练(四) 进制转换 基本定义 十进制:逢十进一(包含数字0~9) ( 365 ) 10 3 1 0 2 6 1 0 1 5 1 0 0 (365)_{…

如何提高编程能力?(来自准大三学长的含泪建议)

种一棵树最好是十年前,其次是现在 想了解更多内容可以看我主页:GGBondlctrl-CSDN博客 1.前言 以下是小编的亲身经历哟 (1)大一,摆烂 -------和每个人一样,大学都是带着美好的憧憬,我开始学习…

Apache漏洞

四、 CVE-2021-41773 Apache HTTP Server 路径穿越漏洞 漏洞简介 该漏洞是由于Apache HTTP Server 2.4.49版本存在目录穿越漏洞,在路径穿越目录<Directory/>Require all granted</Directory>允许被访问的的情况下(默认开启)攻击者可利用该路径穿越漏洞读取到Web…

C++ 基础练习 - Chapter 12 (基础练习 完结版)

Review Questions 12.1 What is generic Programming? How is it implemented in C? Answer: Generic programming is an approach where generic types are used as parameters in algorithms so that they work for variety of suitable data types and data structures…

【Spring】通过Aspects实现面向切面编程(AOP)

目录 1.概念理解 2. 案例说明 1.概念理解 【注】一些概念来自&#xff1a;https://blog.csdn.net/Kaiser__/article/details/135894150 横切关注点 分散在每个各个模块中解决同一样的问题&#xff0c;如用户验证、日志管理、事务处理、数据缓存都属于横切关注点。这个概念不是…

【C++刷题】优选算法——贪心第一辑

什么是贪心算法 贪心策略&#xff1a;局部最优 -> 全局最优 “贪婪鼠目寸光” 1、把解决问题的过程分为若干步 2、解决每一步的时候&#xff0c;都选择当前看起来“最优的”解法 3、“希望”得到全局最优解 贪心算法的特点 贪心策略的提出是没有标准或者模板的 正确的贪心策…

项目小结(中)

一.文件分片上传 在文件上传的逻辑中&#xff0c;文件以MD5唯一&#xff0c;然后记录已经储存的文件md5&#xff0c;如果已上传&#xff0c;就秒传&#xff0c;并记录班级上传文件信息。 如果请求文件上传时&#xff0c;发现班级已经上传了一部分&#xff0c;这里就会把班级上…

秋招复习笔记——八股文部分:网络IP

终于来到了网络的最后一篇&#xff0c;继续加油&#xff01; IP 知识全家桶 IP 基本认识 IP 在 TCP/IP 参考模型中处于第三层&#xff0c;也就是网络层。 网络层的主要作用是&#xff1a;实现主机与主机之间的通信&#xff0c;也叫点对点&#xff08;end to end&#xff09…

【Vue3】Pinia修改数据

【Vue3】Pinia修改数据 背景简介开发环境开发步骤及源码总结 背景 随着年龄的增长&#xff0c;很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来&#xff0c;技术出身的人总是很难放下一些执念&#xff0c;遂将这些知识整理成文&#xff0c;以纪念曾经努力学习奋斗的日子…

锐捷RCNA | 远程登录与路由技术

锐捷RCNA | 远程登录与路由技术 一、远程登录配置1. Telnet远程登录介绍2. 案例1--设置远程登录密码实现远程登录3. 案例2--定义不同用户账户实现远程用户权限隔离4. SSH远程登录介绍5. 案例--通过SSH功能远程管理设备 二、路由技术1. 直连路由的数据通信2. 间接路由的数据通信…