【AI知识点】残差网络(ResNet,Residual Networks)

news2024/11/23 1:00:07

AI知识点总结:【AI知识点】
AI论文精读、项目、思考:【AI修炼之路】


残差网络(ResNet,Residual Networks) 是由微软研究院的何凯明等人在 2015 年提出的一种深度神经网络架构,在深度学习领域取得了巨大的成功。它通过引入残差连接(Residual Connection) 解决了深层神经网络中的梯度消失(Vanishing Gradient) 问题,从而实现了对非常深层网络的有效训练。

ResNet 的提出使得神经网络可以训练出更深层的模型,极大提升了模型的性能。在 2015 年的 ImageNet 大规模视觉识别挑战赛(ILSVRC 2015)中,ResNet 获得了冠军,并且它也是许多后续深度学习模型的基础。


1. 深度网络中的问题

随着神经网络层数的增加,深度网络面临两个主要问题:

  1. 梯度消失和梯度爆炸:在反向传播中,梯度会随着层数的增加逐层变小或变大,导致前几层的权重更新非常缓慢或更新过大,模型难以有效训练。
  2. 退化问题:在非常深的网络中,增加更多的层有时反而会导致模型的训练误差增大,而不是进一步减少。理想情况下,增加更多的层应该至少不会使性能变差,但实际上在深度网络中,随着层数增加,网络的表示能力可能反而下降。

2. 残差学习的核心思想

ResNet 的核心思想是引入残差块(Residual Block),通过跳跃连接(Skip Connection) 让信息直接跳过一层或多层网络,从而解决深度网络中的退化问题。

下图为跳过两层的残差连接示意图

图片来源:ResNet的原始论文 Deep Residual Learning for Image Recognition

假设普通的深度网络中的映射为 H ( x ) H(x) H(x),在 ResNet 中,我们将其重新表示为残差函数 F ( x ) F(x) F(x) 加上输入 x x x 的直接跳跃连接:
H ( x ) = F ( x ) + x H(x) = F(x) + x H(x)=F(x)+x
其中:

  • x x x 是输入,
  • F ( x ) F(x) F(x) 是要学习的残差函数,它表示某一层对输入的变化量。

这种设计的核心思想是,与其直接学习映射 H ( x ) H(x) H(x),ResNet 通过学习残差 F ( x ) = H ( x ) − x F(x) = H(x) - x F(x)=H(x)x,让网络去拟合残差。在实践中,残差学习更容易收敛,因为直接保留输入 x x x,可以有效防止梯度消失。


3. ResNet 的结构

ResNet 的基本单元是残差块(Residual Block),其结构如下:

图片来源:https://en.wikipedia.org/wiki/Residual_neural_network

  • 输入 x x x 通过两层卷积,卷积层后接 Batch Normalization 和 ReLU 激活函数得到 F ( x ) F(x) F(x)
  • 跳跃连接:将输入 x x x 加到 F ( x ) F(x) F(x) 上得到输出 H ( x ) H(x) H(x)
  • 输出 H ( x ) H(x) H(x),该输出再输入到下一层。
  • 如果输入的维度和输出的维度不同,则会引入 1x1卷积 进行调整,以确保两者维度一致。如图右边所示。

4. 为什么残差学习有效?

在 ResNet 中,跳跃连接可以让网络层直接学习更深层次的特征,而不必从头学习每一层的映射。它的两个关键优势是:

  1. 更容易优化:因为每一层只是学习输入与输出之间的残差,它减小了学习的难度。这意味着,如果某一层无法学习到任何有效的信息,网络至少可以通过跳跃连接直接传递输入,确保不会出现退化现象。

  2. 防止梯度消失:在反向传播过程中,跳跃连接让梯度能够绕过一些中间层,直接传递到前面的层,从而缓解了梯度消失的问题。


5. ResNet 的不同版本

ResNet 提出了多个不同深度的版本,包括 18 层、34 层、50 层、101 层和 152 层等。

  • ResNet-18 和 ResNet-34:这些是比较浅的版本,通常用于计算资源有限的情况下。
  • ResNet-50、ResNet-101 和 ResNet-152:这些是较深的版本,能够学习更加复杂的特征,用于高性能任务,比如大规模图像分类和目标检测。

ResNet-50 为例,它由 49 个卷积层和 1 个全连接层组成,其中包括多个残差块,深度足以捕获复杂的模式,但通过残差连接,训练仍然较为稳定。

下图为原始的 Resnet-18 架构图.

图片来源:https://en.wikipedia.org/wiki/Residual_neural_network


6. ResNet 的改进版本

ResNet 的成功使得许多后续的深度学习模型引入了残差结构,且出现了一些改进版本:

a. Wide ResNet(WRN)

  • Wide ResNet 是通过增加每层的宽度(通道数)来提升网络的表示能力,提出了比增加深度更有效的优化方法。实验表明,增加网络宽度(而不是深度)在某些任务上表现更好。

b. ResNeXt

  • ResNeXt 是对 ResNet 的进一步扩展,它引入了“分组卷积”的概念,将卷积操作分为多个组进行并行计算,类似于“组卷积”的概念,从而提升网络的计算效率,同时保持较高的准确率。

c. DenseNet

  • DenseNet 也是一种基于跳跃连接的网络结构,但不同于 ResNet 中的简单残差连接,DenseNet 在每一层都连接了所有前面的层。它直接将前面所有层的输出拼接到一起,再传入当前层进行计算。DenseNet 的参数更少,且在某些任务上表现优于 ResNet。

7. ResNet 在实际中的应用

ResNet 在许多实际任务中表现优异,尤其是在图像处理任务上,它成为了许多深度学习模型的基础组件:

  • 图像分类:ResNet 广泛应用于图像分类任务中,特别是在 ImageNet 这种大规模数据集上的表现非常突出。
  • 目标检测和分割:ResNet 被广泛用于目标检测和语义分割的任务中,例如 Faster R-CNN、Mask R-CNN 等模型都使用 ResNet 作为特征提取器。
  • 自然语言处理:虽然 ResNet 主要用于图像处理,但它的残差思想也被迁移到自然语言处理(NLP)领域,用于构建深层语言模型。

8. ResNet 的成功原因总结

  • 有效解决了深度网络的训练问题:通过残差连接,ResNet 能够训练非常深的网络,而不会出现梯度消失或退化问题。
  • 简单有效的结构:残差块结构简单,容易实现,而且在各种深度学习任务中表现良好。
  • 可扩展性强:ResNet 的结构非常灵活,可以轻松地扩展到不同深度或不同宽度的版本,以适应不同的计算资源和任务需求。

9. ResNet 与传统卷积神经网络的比较

特性传统卷积神经网络(CNN)残差网络(ResNet)
层数层数相对较少层数可以非常深,50 层甚至更多
训练难度深层网络容易训练困难残差块降低了训练难度
梯度消失问题容易出现梯度消失问题跳跃连接缓解了梯度消失问题
网络性能层数增加后性能提升有限深层网络的性能提升显著
训练速度较难优化,训练速度较慢相对较快,优化效果更好

10. 总结

ResNet(残差网络) 通过引入残差连接,有效解决了深度神经网络中的梯度消失和退化问题,使得训练深层网络变得更加可行和高效。它的成功不仅提升了图像分类、目标检测等任务的性能,还成为了许多现代深度学习模型的重要组成部分。


11. 进一步了解

可以阅读ResNet的原始论文:Deep Residual Learning for Image Recognition

我个人认为其实我们人类学习也可以借鉴残差学习的思想、有时候不用按部就班去学,可以适当跳过一些地方(比如暂时不需要或者比较难懂的),直接学习关键的残差部分。另外,跳跃思维,也称为发散性思维,我感觉也有点残差学习的影子。

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

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

相关文章

Vue3封装消息提示框-基于element-plus

Vue3封装消息提示框-基于element-plus 图片示例 封装代码 创建modal.js文件 import {ElMessage,ElMessageBox,ElNotification,ElLoading, } from "element-plus";let loadingInstance;export default {// 消息提示msg(content) {ElMessage.info(content);},// 错误…

手机移动终端的土壤检测

手机OTG转USB串口,读取土壤检测设备信息,在APP展示。 总结一下 1. 用了MAUI框架,这东西感觉比xamarin好用,特别是contentpage和单例模式,数据绑定也很OK。 2. 串口驱动不好孤岛,废了不少功夫专门做这个。 3…

Lory: 推进大型语言模型训练的新篇章

人工智能咨询培训老师叶梓 转载标明出处 随着模型规模的增长,如何有效训练并利用这些模型成为了一个挑战。陈丹琦团队一项新的研究提出了一种创新的预训练方法——Lory,旨在解决大模型在混合专家(MoE)架构中的可微分性和计算效率…

开关打开输入框才能输入文字,否则为禁用状态

页面开关默认为关闭状态&#xff0c;输入框为禁用状态。 当点击开关&#xff0c;打开开关后&#xff0c;输入框禁用状态解除&#xff0c;才可以在输入框内输入。 html结构: <div class"page_top"><!-- 第一行 --><div class"top_first">…

使用three.js 实现一个 马赛克得 shader

使用three.js 实现一个 马赛克得 shader 源链接&#xff1a;https://threehub.cn/#/codeMirror?navigationThreeJS&classifyshader&idmosaicShader 国内站点预览&#xff1a;http://threehub.cn github地址: https://github.com/z2586300277/three-cesium-example…

HTML的介绍

HTML HTML是一种超文本标记语言,超文本是指,除了文本之外,还可能包含图片,音频,或者评注等的 文本形式,比文本强大,通过链接和交互方式来组织和呈现信息.标记语言是指,由标签构成的语言.HTML定义了多种不同的标签,用来表示不同的内容. 标签的介绍: 1.<h3> 三级 </h3&…

增强AI查询:使用Rewrite Retrieve Read框架优化RAG

增强AI查询&#xff1a;使用Rewrite Retrieve Read框架优化RAG 引言 在大规模语言模型&#xff08;LLM&#xff09;中&#xff0c;通过查询重写来提升检索增强生成&#xff08;RAG&#xff09;的性能是一个热门研究领域。本文将介绍如何使用rewrite_retrieve_read模板来优化R…

基于SpringBoot的图书推荐系统的设计与实现(论文+源码)_kaic

摘 要 网络信息技术的高速发展&#xff0c;使得高校图书馆的服务空间日益扩大&#xff0c;依据个人特点的针对性服务逐渐成为新服务模式的主导趋势。对于大多数用户而言&#xff0c;很难在大量的学术图书馆中快速找到他们想要的材料。另外&#xff0c;随着时代的不断发展&am…

Mysql的LSN是什么?

LSN的含义 ​ LSN全称为 Log Sequence Number&#xff0c;即日志序列号。它是一个不断递增的数字&#xff0c;用来标识事务日志中的每个操作或事件。LSN是一个64位的数字&#xff0c;每一个LSN值都是唯一的&#xff0c;并且随时间线性增加。 ​ 通过SHOW ENGINE INNODB STATUS;…

GADBench Revisiting and Benchmarking Supervised Graph Anomaly Detection

Neurips 23 推荐指数&#xff1a; #paper/⭐⭐⭐ 领域&#xff1a;图异常检测 胡言乱语&#xff1a; neurips 的benchmark模块的文章总能给人一些启发性的理解&#xff0c;这篇的insight真有意思。个人感兴趣的地方会加粗。此外&#xff0c;这篇文章和腾讯AIlab合作&#xff…

嵌入式基本知识

文章目录 调试接口仿真器MCU实际的调试接口 调试接口 调试接口用于对MCU进行编程和调试&#xff0c;这里的编程指将源代码编译后的.hex文件写入MCU闪存特定地址中&#xff0c;调试指MCU运行代码debug的过程。 不同的接口协议有不同的接口类型。SWD协议调试接口的引脚主要有&a…

卡码网C++基础课 |20. 排队取奶茶

目录 前言 一、题目描述 二、解题思路 1.队列 2.队列的操作 三、完整代码 总结 前言 仅个人记录所用 源自卡码网的C基础课 “这门C基础课 帮助 编程零基础学员快速学习刷算法题所需要的基础语法知识&#xff0c;学完之后&#xff0c;再来刷代码随想录&#xff0c;或者自己去…

CentOS 7.9 局域网配置指定同步时间服务器

在 CentOS 7.9 中&#xff0c;默认的时间同步工具是 chrony。以下是如何配置 NTP 服务器地址并使用 chrony 进行时间同步的步骤&#xff1a; 1. 安装 chrony&#xff08;通常已经预装可忽略&#xff09; 通过systemctl status chronyd检查是否已经安装启动 如果没网可以直接…

npm安装依赖报错npm ERR! Unexpected token ‘.

电脑是windows的&#xff0c;因为有多个项目做开发&#xff0c;每个项目需要的node版本不一样&#xff0c;所以使用了nvm做node管理。 电脑的nvm是1.1.7版本的。 新项目在安装依赖时突然报错如下&#xff1a; npm ERR! Unexpected token .在网上查了很多都说是nvm版本太低了&…

【MLP-Mixer】核心方法解读

abstract&#xff1a; 我们提出MLP-Mixer架构(或简称“Mixer”)&#xff0c;这是一个具有竞争力但在概念和技术上都很简单的替代方案&#xff0c;它不使用卷积或自关注。相反&#xff0c;Mixer的架构完全基于多层感知器(mlp)&#xff0c;这些感知器可以在空间位置或特征通道上…

渗透测试 之 域渗透手法【域内用户枚举】手法 Kerbrute msf pyKerbrute 工具使用详解

说明一下: 域内用户枚举工具使用说说&#xff1a; Kerbrute pyKerbrute MSF模块的使用 域内用户名枚举原理分析&#xff1a; 域内用户枚举攻击防御&#xff1a; 流量检测&#xff1a; 日志层面&#xff1a; 说明一下: 域环境或者内网环境下&#xff0c;可以在没有域环…

深入理解Transformer的笔记记录(精简版本)---- ELMO->GPT->BERT

1、ELMO word embedding无法区分多义词的不同语义,其本质上是个静态的方式,所谓静态指的是训练好之后每个单词的表达就固定住了,以后使用的时候,不论新句子上下文单词是什么,这个单词的Word Embedding不会跟着上下文场景的变化而改变 ELMO根据当前上下文对Word Embed…

有趣的python库:用 difflib 实现文本差异的可视化

一&#xff0c;介绍 difflib 模块是Python标准库的一部分&#xff0c;提供了一系列用于比较序列的类和函数&#xff0c;特别适用于文本比较任务。这个模块可以帮助用户发现两个文本文件或字符串序列之间的差异&#xff0c;并以多种格式展示这些差异&#xff0c;比如这样&#…

400行程序写一个实时操作系统RTOS(开篇)

笔者之前突发奇想&#xff0c;准备写一个极其微小的实时操作系统内核&#xff0c;在经过数天的努力后&#xff0c;这个RTOS诞生了。令读者比较意外的是&#xff0c;它的程序只有400行左右。但就是这短短的400行&#xff0c;完成了动态内存管理、多线程、优先级、低功耗管理、调…

深度学习--------------------------------使用注意力机制的seq2seq

目录 动机加入注意力Bahdanau注意力的架构 总结Bahdanau注意力代码带有注意力机制的解码器基本接口实现带有Bahdanau注意力的循环神经网络解码器测试Bahdanau注意力解码器该部分总代码 训练从零实现总代码简洁实现代码 将几个英语句子翻译成法语该部分总代码 将注意力权重序列进…