[阅读笔记]《解析卷积神经网络_深度学习实践手册》魏秀参著

article/2025/9/28 16:24:25

书籍下载地址:http://lamda.nju.edu.cn/weixs/book/CNN_book.pdf
这本书名虽然有实践两个字,但内容还是主要介绍在实践框架中涉及的基本概念、方法和技巧介绍,侧重于实践中的概念介绍并不是手把手告诉你如何在某平台上搭建一个卷积神经网络,因此想要动手实践方面的指导的话并不推荐此书,建议有一些基础实践后再阅读。
以下是笔者的阅读笔记,因为我也是新手在入门,因此主要为章节内容摘要
只是想要查漏补缺的读者推荐直接选读每个章节的小结部分,覆盖了大部分要点且凝练

解析卷积网络

绪论

  • 从“人工针对任务设计特定特征”到“机器自动学习特征”
  • 三次高潮两次衰落
    – 1940s -1960s: 控制论-线性网络,因为无法解决异或和计算量太复杂而衰落
    – 1980s -1990s: BP算法提出,上述两个问题被解决;连接主义;存在数据获取瓶颈、不可解释性、巨大的计算代价的问题(此时SVM为领域主角,因为可解释性强)
    – 2006s: Hinton 发表 DBN证明神经网络训练的可行性(有效数据的急剧扩增、高性能计算硬件的实现以及训练方法的大幅完善,三者作用最终促成了神经网络的第三次“复兴”)

基础理论篇

章1 卷积神经网络基础知识

  • 优化目标通常是非凸函数,因而通过随机梯度下降或误差反向传播更新参数
  • Mini-batch: 选取一批样本完成前馈和反向传播更新参数(batch size 过小会产生震荡;上限则取决于硬件资源限制;一般而言,批处理大小设为32、64、128或256即可
  • epoch:无放回的,通过mini-batch处理完一遍数据集
  • 实际上每层操作都对应了两部分导数:一部分是误差关于第 i 层参数的导数(用于参数更新),另一部分是误差关于该层输入的导数(视作最终误差从最后一层传至第i层的误差信号)
  • 卷积神经网络中的两类基本过程:前馈运算和反馈运算。神经网络模型通过前馈运算对样本进行推理和预测,通过反馈运算将预测误差反向传播逐层更新参数,如此两种运算依次交替迭代完成模型的训练过程。
    在这里插入图片描述
    在这里插入图片描述

章2 卷积神经网络基本部件

  • 深度学习相对于传统的分治法提供了端到端(end-to-end)的学习方式
  • 卷积操作的作用:通过一定大小的卷积核作用于局部图像区域获得图像的局部信息(检测颜色、形状、纹理等等众多基本模式的滤波器)
  • 池化层本质上是进行降采样(三种功效);非必须的网络元件,已有研究可用卷积实现这一功能
    在这里插入图片描述
  • 激活函数的引入是为了增加整个网络的表达能力(非线性)
  • Sigmoid函数(最开始是因为其能模拟生物神经元特性)存在梯度的饱和现象,即大于-5/+5的区域梯度接近0,使在反向误差传播中处于该区域的误差很难传递到前层函数;要避免参数初始化(过大)直接将输出值域带入梯度饱和区致使无法训练。
  • ReLU是目前深度卷积神经网络中最为常用的激活函数之一;相比于Sigmoid,ReLU在大于0部分完全消除了梯度饱和效应,且有助于随机梯度下降收敛。

章3 卷积神经网络经典结构

  • 感受野:小卷积核(如 3 × 3)通过多层叠加可取得与大卷积核(如 7 × 7) 同等规模的感受野,采用小卷积核同时可带来其余两个优势:第一,由于 小卷积核需多层叠加,加深了网络深度进而增强了网络容量和复杂度;第二,增强网络容量的同时减少了参数个数。
  • 深度学习只是表示学习的一种方式
  • 其他表示学习研究:计算机视觉比较著名的“词包”模型
  • 与其不同的是,深度卷积神经网络中同一层神经元的特性:呈现**“分布式表示”**的特性(即“语义概念”到神经元是一个多对多映射)另一特点是神经网络响应的区域呈现稀疏特性,即响应区域集中且占原图比例较小
  • 不同层神经元间的表示特点:层次性(逐渐从泛化特征(如边缘、纹理等)过度到高层语义表示(躯干、头部等模式)
  • 经典网络案列分析
    Alex-Net
    贡献:首次将CNN应用于计算机视觉的海量数据上、利用GPU实现网络训练、一些训练技术的引入(如ReLU激活函数、局部响应规范化操作、为防止过拟合而采取的数据增广和dropout)
    VGG-Nets
    贡献:具备良好的泛化性能,其在ImageNet数据集上的预训练模型被广泛应用于除最常用的特征抽取外的诸多问题:如物体候选框生成、细粒度图像定位与检索、图像协同定位等;相比Alex-Net, VGG-Nets中普遍使用了小卷积核以及“保持输入大小”等技巧,为的是在增加网络深度(即网络复杂度)时确保各层输入大小随深度增加而不急剧减小;同时卷积层通道数也是逐层增加。
    Network-In-Network
    贡献:使用多层感知机替代传统简单的线性卷积层从而增加层间映射的可能并增加网络卷积层的非线性能力;全局汇合操作代替全连接层做分类
    深度和宽度是表征网络复杂性的核心因素,尤其是前者,但深度过深存在梯度“弥散”或梯度“爆炸”;残差网络很好的解决了深度带来的训练困难
    – 长短期记忆( Long Short Term Memory, 简称LSTM )是一种时间递归神经网络,适合于处理和预测时间序列中间隔和延迟非常长的重要事件;其作为非线性模型, 可作为复杂的非线性单元用于构造更大型深度神经网络
    在这里插入图片描述
    – 高速公路网络:输出y为非线性函数和x的加权组合,通过变换门和携带门来控制两部分的权重
    – 残差网络:瓶颈残差模块”可大量减少计算代价;近路连接也可以使梯度信息在多个神经网络层之间进行有效的传播,因而很深的网络依然可以用简单的随机梯度下降进行训练

章4 卷积神经网络的压缩

压缩技术可分为两类:

  • 前端压缩:不改变原网络结构,主要包括知识蒸馏、紧凑的模型结构设计以及滤波器层面的剪枝等; 可完美适配现有的深度学习库
    – 低秩近似:利用若干小规模的矩阵来近似重构稠密而巨大的权重矩阵;在中小型网络模型中取得了不错的效果
    方式:使用结构化矩阵、使用奇异值分解
    – 剪枝与稀疏约束
    关键之处在于如何衡量个别权重对于整体模型的重要程度
    – 知识蒸馏:迁移学习的一种,效果有限

  • 后端压缩:目标在于尽可能地减少模型大小,因而会对原始网络结构造成极大程度的改造;包括低秩近似、未加限制的剪枝、参数量化以及二值网络等;必须开发相对应的运行库甚至是硬件设备,维护成本高
    – 参数量化:从权重中归纳出若干“代表”,由这些“代表”来表示某一类权重的具体数值
    – 二值网络:所有参数的取值只能是 ±1

实践应用篇

章5 数据扩充

  • 数据扩充的几种常用方法:图像水平翻转、随机抠取、尺度变换和旋转
  • 更多图像数据扩充方法代码可参见http://github.com/aleju/imgaug
  • 高级扩充方法:“Fancy PCA”,和“监督式数据扩充”方法(利用相关性热力图选择扣取区域)等
    在这里插入图片描述

章6 数据预处理

  • 图像(训练集、验证集、测试集中的所有图像)减均值(训练集图像像素均值)

章7 网络参数初始化

  • 随机初始化:随机参数服从高斯分布或均匀分布都是较有效的初始化方式,此时参数期望依旧接近0
    在这里插入图片描述
    Xavier方法未考虑非线性映射函数对输入 s 的影响;He方法-方差规范化的分母为根号下二分之n(相比Xavier方法有更好的收敛性)。
  • 使用已预训练好的模型的参数进行初始化是一种简便且有效的初始化方法
  • 比较推荐的网络初始化方式为He方法
  • “数据敏感的参数初始化方式”代码链接:http://github.com/philkr/magic_init

章8 激活函数

七种常用的激活函数:

  • sigmoid型:输出响应被压缩至[0,1],但存在梯度饱和(小于5和大于5部分)和不符合均值为0的设想
  • tanh(x)型:在sigmoid基础上解决均值问题,但存在梯度饱和问题
  • Relu 修正线性单元:ReLU(x) = max{0, x}, 在大于0部分梯度恒为1,消除了这部分梯度饱和问题,且计算更为简单、收敛速度更快;小于0部分,梯度为0,存在“死区”
  • Leaky ReLU:Leaky ReLU(x) = x if x>=0 a*x if x< 0,a 为超参,合适的值较难选定且较敏感,故这个函数在实际中性能不稳定
  • 参数化ReLU:在训练中将a也视作需学习的变量;自由度大但存在过拟合的风险
  • 随机化ReLU:随机化设定超参
  • ELU 指数化线性单元:具备ReLU的优点且解决了死区问题,不过计算量增大

章9 目标函数

分类任务中的目标函数交叉熵损失函数是最为常用的分类目标函数,且效果一般优于合页损失函数;大间隔损失函数和中心损失函数从增大类间 距离、减小类内距离的角度不仅要求分类准确,而且还有助提高特征的分 辨能力;坡道损失函数是分类问题目标函数中的一类非凸损失函数,由于 其良好的抗噪特性,推荐将其用于样本噪声或离群点较多的分类任务。
分类任务损失函数:

  • 交叉熵 Softmax 损失函数:
  • 合页损失 hinge损失函数:
  • 坡道损失函数:具有良好的抗噪特性
  • 大间隔交叉熵损失函数:增大类间距离
  • 中心损失函数:在考虑类间距离的同时考虑减小类内差异

回归任务损失函数: l1 损失函数和 l2 损失函数是两个直观且常用的 回归任务目标函数,实际使用中 l2 损失函数略优于 l1 损失函数; 损失函数为回归问题中的一类非凸损失函数,同样具有良好的抗噪能力;

  • l1 损失函数和 l2 损失函数
  • Turkey’s biweight 损失函数 抗噪的鲁棒损失函数
    在这里插入图片描述

章10 网络正则化-约束模型复杂度,防止过拟合,从而提高模型泛化能力

  • l2正则化效果优于l1
  • L1正则化,除了约束参数以外还起到稀疏化的作用
  • 最大范数约束:优势-即使学习率设置的过大也不会梯度爆炸
  • Dropout 随机失活,实际应用中多采用“倒置随机失活”
  • 验证集使用:用来检验模型泛化能力,可判别是否欠/过拟合
  • 早停:选择在验证集上准确率最高的网络在测试集上进行测试
  • 增加训练数据
    在这里插入图片描述
    在这里插入图片描述

章11 超参数设定和网络训练

  • 网络超参数设定
    – 输入像素通常是2的指数倍,方便GPU并行;改变输入像素需改变全连接层或其他参数
    – 小卷积核相对于大卷积核的优势:增强网络容量和模型复杂度、减少卷积参数个数;推荐使用 3 × 3 及 5 × 5 这样的小卷积核
    – 汇合层常用的参数设定为 2 × 2、汇合步长为2
  • 训练技巧
    – 训练数据随机打乱
    – 学习率调节
    – 批规范化 BN,加快收敛速度和缓解梯度弥散
  • 模型优化算法选择
    – 随机梯度下降法:最常见、收敛效果较稳定,但收敛速度慢,可能产生震荡现象
    –基于动量的机梯度下降法:抑制震荡、在后期收敛可跳出局部最优解
    – Nesterov型动量随机下降法:表现更好
    – Adagrad:引入学习率自适应;缺陷-仍需人为指定全局学习率且可能导致训练过早停止
    – Adadelta:引入衰减因子消除Adagrad法对全局学习率的依赖
    – RMSProp、Adam
  • 微调神经网络:整体上学习率应设置的较小;层数越深学习率越大;根据数据相似程度采用不同的微调策略

章12 类别不平衡问题

  • 上下采样
  • 类别重组法
  • 算法层面则利用“代价敏感”方法
    – 代价敏感矩阵:反映类别级别的错分惩罚
    – 代价敏感向量:每个样本有其自己对应的代价敏感向量,敏感矩阵是敏感向量的特殊情况
    – 敏感权重需提前指定:按照样本比例指定、根据混淆矩阵指定

章13 模型集成方法

  • 数据集成:数据扩充、简易集成法
  • 模型集成
  • 多层特征融合,使用深层网络的特征,因为高级语义性越强
  • 单模型集成:利用循环余弦退火获得模型快照,最终模型集成多个模型快照
  • 多模型集成:直接平均法、加权平均法、投票法、堆叠法(二次学习)

章14 深度学习开源工具简介


http://chatgpt.dhexx.cn/article/jOHdy52A.shtml

相关文章

CVPR 2020评审结果放出,魏秀参博士教你如何rebuttal!!!

关注上方“深度学习技术前沿”&#xff0c;选择“星标公众号”&#xff0c; 资源干货&#xff0c;第一时间送达&#xff01; 来源&#xff1a;知乎 作者&#xff1a;魏秀参 链接&#xff1a;https://zhuanlan.zhihu.com/p/104298923 近日&#xff0c;在此文章中&#xff0c;旷视…

魏秀参:如何理解全连接层的作用?

点击上方“机器学习与生成对抗网络”&#xff0c;关注"星标" 获取有趣、好玩的前沿干货&#xff01; 来自 | 知乎 作者 | 魏秀参 文仅分享&#xff0c;侵删 https://www.zhihu.com/question/41037974/answer/150522307 全连接层到底什么用&#xff1f;我来谈三点。…

28岁少帅统领旷视南京研究院,LAMDA魏秀参专访

记者和魏秀参专访约在旷视科技北京总部&#xff0c;北临清华大学&#xff0c;西靠中关村的融科写字楼&#xff0c;公司三层中厅是一整面落地屏幕&#xff0c;实时显示着人脸识别、人脸检测、年龄估计、人体关键点预测等多种视觉应用demo。 这家计算机视觉公司在2017年10 月 31 …

极市直播丨南京理工大学魏秀参、沈阳:大规模细粒度图像检索

| 极市线上分享 第102期 | 一直以来&#xff0c;为让大家更好地了解学界业界优秀的论文和工作&#xff0c;极市已邀请了超过100位技术大咖嘉宾&#xff0c;并完成了101期极市线上直播分享。往期分享请前往&#xff1a;http://bbs.cvmart.net/topics/149&#xff0c;也欢迎各位…

[读书笔录]解析卷积神经网络(魏秀参)——目录和绪论

解析卷积神经网络——基础理论篇 *南京大学计算机系机器学习与数据挖掘所&#xff08;LAMDA&#xff09;在读博士魏秀参开放了一份较系统完整的 CNN 入门材料《解析卷积神经网络——深度学习实践手册》。这是一本面向中文读者轻量级、偏实用的深度学习工具书&#xff0c;内容侧…

R Talk | 旷视南京研究院魏秀参:细粒度图像分析综述

「R Talk 」是旷视研究院推出的一个深度学习专栏&#xff0c;将通过不定期的推送展示旷视研究院的学术分享及阶段性技术成果。「R」是 Research 的缩写&#xff0c;也是旷视研究院的内部代号&#xff1b;而所有的「Talk」都是来自旷视的 Researcher。「R Talk 」旨在通过一场场…

【Web】控制台操作

浏览器控制台 重定向空白页面使用调用函数eval()执行函数命令使用时间类函数执行代码通过匿名function()执行脚本创建Function对象并执行代码通过apply执行代码通过call执行函数通过成员对象执行函数通过top执行函数通过WINDOW.WINDOW或任何等价值执行函数通过页面事件执行代码…

浏览器控制台Network面板简述

浏览器控制台Network面板简述 如何打开NetWork面板控制台Network的作用面板组成请求列表请求列表每列&#xff1a;查看单个资源的详细信息查看HTTP头信息General部分&#xff1a;Response Headers&#xff08;响应头&#xff09;部分:Request Headers &#xff08;请求头&#…

浏览器随笔 -- 谷歌浏览器控制台使用

谷歌浏览器控制台使用 1. 使用说明2. 整体布局介绍3. Element3.1 页面元素查找&修改css样式3.2 操作HTML元素 4. Console4.1 日志打印4.2 代码编辑器 5. Sources6. Network6.1 接口状态码6.2 接口传参&数据返回 7. Application -- 浏览器存储7.1 cookie 存储7.2 localS…

如何监听浏览器控制台的打印信息?

注意&#xff1a; 拦截并监听控制台打印并不是一个好的行为&#xff0c;为了网站安全请谨慎使用 需求背景 当我们在项目中引入某些第三方依赖时&#xff0c;该第三方依赖会在浏览器控制台打印相关信息&#xff0c;如 stompjs 会打印 stomp 连接情况 今天有个新需求是需要将控…

Chrome 控制台console的用法

转自&#xff1a;http://www.open-open.com/lib/view/open1421131601390.html 原文出处&#xff1a; ctriphire 大家都有用过各种类型的浏览器&#xff0c;每种浏览器都有自己的特色&#xff0c;本人拙见&#xff0c;在我用过的浏览器当中&#xff0c;我是最喜欢Chrome的&am…

Chrome控制台console的各种用法(方便调试)

https://www.cnblogs.com/qubernet/p/5794812.html 1、输出信息 console.log(消息内容&#xff01;); //输出普通信息   console.info(消息内容&#xff01;); //输出提示信息   console.error(消息内容&#xff01;);//输出错误信息   console.warn(消息内容&#xff0…

chrome控制台中console的强大

在使用谷歌浏览器进行前端开发的时候&#xff0c;console作为控制台的一个主要方法&#xff0c;相信大家都用过&#xff0c;一般都是用console.log()来输出部分内容&#xff0c;但是console还有很多强大之处&#xff0c;下面主要说一下console的更重强大的地方&#xff1a; 首…

浏览器控制台的一些输出方法---console

1.首选是常见的console.log(); console.log(hello);console.log(hi,friend);在浏览器按F12&#xff0c;控制台输出的是这样的 2.在console.log()里使用%s console.log(Hello, my name is %s,kon);%s会替换成第二个参数 3.在console.log()里使用%c console.log(%c styled te…

Edge浏览器调整控制台位置

默认edge浏览器f12控制台是在右边的&#xff0c;但是个人比较喜欢在下面&#xff0c;显示的全面一些 点击右上角的省略号&#xff0c;出现&#xff1a; 注意这几个图标&#xff1a; 点击第三个&#xff0c;就可以把控制台调到下面啦~

【Chrome】浏览器控制台设置成中文

文章目录 按 F12 或 鼠标右键点击检查打开控制台界面&#xff0c;如下 此时可以看到我们的控制台界面是英文的&#xff0c;这对新手来说可能有点不太友好所以如果需要设置成中文&#xff0c;可以按以下步骤设置 点击控制台中的设置图标&#xff0c;如图所示 找到 Language 选项…

chrome控制台使用

1.输入代码片段的时候 总是遇到 Enter回车代码没敲完 就被执行了 试试使用ShiftEnter 直接在控制台换行 2.当你在控制台计算了一个数值的时候 可以用$_来代替上一个表达式执行的结果 数值计算的 同样适用 3.当时在Element里面选中一个元素时 你可以回到控制台 用$0-$5去输出这个…

谷歌浏览器控制台位置调整

1.如何打开 使用快捷键F12即可 2.如何设置

浏览器控制台接口学习

我们在做项目开发时&#xff0c;想知道一个功能调用了后台哪个接口&#xff0c;我们就可以在浏览器控制台中进行查看。 举一个例子&#xff0c;我们在看博客时&#xff0c;发现这一篇文章写的不错&#xff0c;我们在做点赞这个动作时&#xff0c;调用了哪个接口呢&#xff1f; …

这才是 Chrome 控制台的正确使用方法!太重要了!

Chrome 控制台是很多开发者的必备工具之一&#xff0c;但你真的掌握了它的精髓吗&#xff1f;是否还是全靠 console.log() 排查问题&#xff1f; 其实&#xff0c;控制台的功能远比这更强大&#xff0c;用好控制台&#xff0c;能帮助我们更加准确高效地发现问题、定位问题&…