经典网络架构-ResNet

news2025/2/25 2:10:36

# 引言
深度残差网络的提出是深度学习领域的里程碑事件,它使得网络可以做大做深,现在主流的网络中都有残差结构
# 问题
- ##深度网络的退化
深度网络有一个普遍的问题:随着网络层数的增加,准确率是先增后减的,准确率增加是很好理解的,毕竟网络变深之后,模型的学习能力也随之变强,结果也相应地变好,但是结果变差是反直觉的,这种现象被称为网络退化,有人给出解释:模型的参数规模超过数据规模,模型可能发生了过拟合现象。但是作者通过实验指出,这种退化现象不是过拟合,事实上,训练集上的结果也变差了,过拟合并不会出现这种情况。

为了说明这一点,作者在CIFAR-10上分别使用20层的网络和56层的网络进行训练,并记录了训练误差和测试误差:

可以看到,在训练集上就出现了深的网络比浅网络效果更差的现象。下面从原理上进行分析

- ##梯度消失现象

梯度消失是深度神经网络训练中的一个常见问题。它指的是在网络的后向传播过程中,随着网络层数的增加,较浅的层在梯度更新时所受到的影响几乎为零,导致这些层的权重几乎不发生变化,模型的学习能力下降。梯度消失问题的主要原因之一是使用特定的激活函数,例如 $sigmoid$ 或 $tanh$ 函数。这些激活函数的导数在输入接近饱和区域时变得非常小,接近于零。当网络的深度增加时,这些较小的导数将被连续相乘,导致梯度指数级地减小,最终消失。以一个三层的神经网络、每层只有一个神经元为例,则有:
$$
x_{i+1}=\sigma(w_ix_i+b_i)\quad i=1,2,3 \\
\frac{\partial{y}}{\partial{x_1}}=\frac{\partial{y}}{\partial{x_3}}\cdot\frac{\partial{x_3}}{\partial{x_2}}\cdot\frac{\partial{x_2}}{\partial{x_1}}
$$

其中$x_1,x_2,x_3$分别为第1、2、3层网络的输入,$y=x_4$为网络的输出,由于每一层都经过激活函数,求导的结果会较小,因此最后相乘的结果也会很小,即浅层的网络的梯度很小,网络学习能力下降。

# 方法
作者提出了一个解决思路,我们希望经过一层后网络的输出结果$F(x)$不会比网络的输入$x$差,要实现这一点,我们希望网络能够在结果变差时直接拟合为网络的输入,作者认为学习一个恒等映射是困难的,而学习一个零映射是简单的,因此只需要在网络输出结果$F(x)$上加上一个这层网络的输入$x$,这样如果网络输出结果变差了,残差$F(x)-x$会被拟合为0,如下图所示:

从原理上来说,残差连接将公式做出了如下的改变:

$$
x_3=x_1+\sigma(w_2x_2+b_2)
\frac{\partial{y}}{\partial{x_1}}=\frac{\partial{y}}{\partial{x_3}}\cdot\frac{\partial{x_3}}{\partial{x_1}}=\frac{\partial{y}}{\partial{x_3}}(1+\frac{\partial{x_3}}{\partial{x_2}}\cdot\frac{\partial{x_2}}{\partial{x_1}})
$$
可以看到,由于多了1这一项,可以解决梯度消失这一问题。

- ## 模型结构
使用残差连接的模型结构如下:

# 实验
- ## ImageNet
作者在ImageNet上进行了实验,左图为不加残差结构的网络,右图为添加残差结构的网络。

可以发现,不使用残差结构,深层网络(34-layer)比浅层网络(18-layer)的训练误差更大,而加了残差结果的网络则不存在这个问题。
作者还进行了消融实验,对比了使用残差结构不同深度的下的网络的结果:

- ## CIFAR-10
作者在CIFAR-10上测试了不同层数的网络的测试误差
下图是不同层数网络的在训练误差曲线的对比和标准差对比:

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

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

相关文章

十四天学会C++之第二天(函数和库)

1. 函数的定义和调用 在C中,函数是组织和结构化代码的关键工具之一。它们允许您将一段代码封装成一个可重复使用的模块,这有助于提高代码的可读性和维护性。 为什么使用函数? 函数在编程中的作用不可小觑。它们有以下几个重要用途&#xf…

【数据结构---排序】很详细的哦

本篇文章介绍数据结构中的几种排序哦~ 文章目录 前言一、排序是什么?二、排序的分类 1.直接插入排序2.希尔排序3.选择排序4.冒泡排序5.快速排序6.归并排序总结 前言 排序在我们的生活当中无处不在,当然,它在计算机程序当中也是一种很重要的操…

【C语言】青蛙跳台阶 —— 详解

一、问题描述 跳台阶_牛客题霸_牛客网 (nowcoder.com) LCR 127. 跳跃训练 - 力扣(LeetCode) 二、解题思路 1、当 n 1 时,一共只有一级台阶,那么显然青蛙这时就只有一种跳法 2、当 n 2 时,一共有两级台阶&#xff…

你写过的最蠢的代码是?——前端篇

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页: 🐅🐾猫头虎的博客🎐《面试题大全专栏》 🦕 文章图文并茂&#x1f996…

LLVM 插桩 LLVM IR PHI指令

今天在进行 LLVM 插桩时,遇到一个神奇的报错 PHI nodes not grouped at top of basic block!%12 phi i32 [ %.pre, %if.then15 ], [ %argc, %maybe_close_fd_mask.exit ], !dbg !381 label %if.end19 PHI nodes not grouped at top of basic block!%18 phi i32 […

线程的状态与转换,组织与控制

进程和线程分析极其相似。见个人博客:进程的状态与转换以及组织方式 1.线程的状态与转换 2.线程的组织与控制 1.线程控制块(TCB) 2.线程表

运行中的代码,看不太懂的地方,可以实时查看运行值,以做进一步的判断

运行中的代码,看不太懂的地方,可以实时查看运行值,以做进一步的判断 运行中的代码,看不太懂的地方,可以实时查看运行值,以做进一步的判断 运行中的代码,看不太懂的地方,可以实时查看…

OpenCV 14(角点特征Harris和Shi-Tomasi)

一、角点 角点是图像很重要的特征,对图像图形的理解和分析有很重要的作用。角点在三维场景重建运动估计,目标跟踪、目标识别、图像配准与匹配等计算机视觉领域起着非常重要的作用。在现实世界中,角点对应于物体的拐角,道路的十字路口、丁字路…

机器学习 不均衡数据采样方法:imblearn 库的使用

✅作者简介:人工智能专业本科在读,喜欢计算机与编程,写博客记录自己的学习历程。 🍎个人主页:小嗷犬的个人主页 🍊个人网站:小嗷犬的技术小站 🥭个人信条:为天地立心&…

【Hello Linux】多路转接之 epoll

本篇博客介绍: 多路转接之epoll 多路转接之epoll 初识epollepoll相关系统调用epoll的工作原理epoll服务器编写成员变量构造函数 循环函数HandlerEvent函数epoll的优缺点 我们学习epoll分为四部分 快速理解部分概念 快速的看一下部分接口讲解epoll的工作原理手写epo…

找不到msvcr120.dll怎么办?电脑缺失msvcr120.dll的修复方法

msvcr120.dll 是 Microsoft Visual C Redistributable Package 中的一个动态链接库文件,它包含了 C 运行时库的一些功能。这个文件通常与 Visual C 2010 编译器一起使用,用于支持一些大型游戏和应用程序的运行。msvcr120.dll 文件的主要作用是提供 C 语言…

远程代码执行渗透测试—Server2128

远程代码执行渗透测试 任务环境说明: √ 服务器场景:Server2128(开放链接) √服务器场景操作系统:Windows √服务器用户名:Administrator密码:pssw0rd 1.找出靶机桌面上文件夹1中的文件RCEBac…

【AI视野·今日Robot 机器人论文速览 第四十六期】Tue, 3 Oct 2023

AI视野今日CS.Robotics 机器人学论文速览 Tue, 3 Oct 2023 Totally 76 papers 👉上期速览✈更多精彩请移步主页 Daily Robotics Papers Generalized Animal Imitator: Agile Locomotion with Versatile Motion Prior Authors Ruihan Yang, Zhuoqun Chen, Jianhan M…

RabbitMQ-网页使用消息队列

1.使用消息队列 几种模式 从最简单的开始 添加完新的虚拟机可以看到,当前admin用户的主机访问权限中新增的刚添加的环境 1.1查看交换机 交换机列表中自动新增了刚创建好的虚拟主机相关的预设交换机。一共7个。前面两个 direct类型的交换机,一个是…

运行程序时msvcr110.dll丢失的解决方法,msvcr110.dll丢失5的个详细解决方法

在使用电脑的过程中,我们经常会遇到各种问题,其中之一就是 msvcr110.dll 丢失的问题。msvcr110.dll 是 Microsoft Visual C Redistributable 的一个组件,用于支持使用 Visual C 编写的应用程序。如果您的系统中丢失了这个文件,您可…

保姆级Anaconda安装教程

一.anaconda下载 建议使用清华大学开源软件镜像站进行下载,使用官网下载速度比较慢。 anaconda清华大学开源软件镜像站 : https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ 一路next即可,注意添加环境变量得选项都勾上。 二.验证…

C++list模拟实现

list模拟实现 1.链表结点2.类模板基本框架3.构造4.插入普通迭代器实现4.1尾插4.2普通迭代器实现4.3对比list和vector的iterator4.4迭代器的价值4.5insert4.6尾插头插复用写法 5.删除erase5.1erase5.2尾删头删复用写法 6.析构emptysizeclear6.1clear6.2size6.3 empty6.4 析构 7.…

深度学习笔记之微积分及绘图

深度学习笔记之微积分及绘图 学习资料来源:微积分 %matplotlib inline from matplotlib_inline import backend_inline from mxnet import np, npx from d2l import mxnet as d2lnpx.set_np()def f(x):return 3 * x ** 2 - 4 * xdef numerical_lim(f, x, h):retur…

浅谈yolov5中的anchor

默认锚框 YOLOv5的锚框设定是针对COCO数据集中大部分物体来拟定的,其中图像尺寸都是640640的情况。 anchors参数共3行: 第一行是在最大的特征图上的锚框 第二行是在中间的特征图上的锚框 第三行是在最小的特征图上的锚框 在目标检测中,一…

[sping] spring core - 依赖注入

[sping] spring core - 依赖注入 所有代码实现基于 Spring Boot3,core 的概念很宽广,这里的 core concept 主要指的就是 Inversion of Control 和 Dependency Injection,其他的按照进度应该是会被放到其他的 section 记录 之前有写过 IoC 和…