[阅读笔记]《解析卷积神经网络_深度学习实践手册》魏秀参著
书籍下载地址: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 深度学习开源工具简介
[阅读笔记]《解析卷积神经网络_深度学习实践手册》魏秀参著相关推荐
- [DeeplearningAI笔记]改善深层神经网络_深度学习的实用层面1.10_1.12/梯度消失/梯度爆炸/权重初始化...
觉得有用的话,欢迎一起讨论相互学习~Follow Me 1.10 梯度消失和梯度爆炸 当训练神经网络,尤其是深度神经网络时,经常会出现的问题是梯度消失或者梯度爆炸,也就是说当你训练深度网络时,导数或坡 ...
- 实用卷积神经网络 运用python pdf_解析卷积神经网络—深度学习实践手册 中文pdf高清版...
解析卷积神经网络-深度学习实践手册从实用角度着重解析了深度学习中的一类神经网络模型--卷积神经网络,向读者剖析了卷积神经网络的基本部件与工作机理,更重要的是系统性的介绍了深度卷积神经网络在实践应用方面 ...
- ann人工神经网络_深度学习-人工神经网络(ANN)
ann人工神经网络 Building your first neural network in less than 30 lines of code. 用不到30行代码构建您的第一个神经网络. 1.W ...
- 毕业设计 : 车牌识别系统实现【全网最详细】 - opencv 卷积神经网络 机器学习 深度学习
文章目录 0 简介 1 车牌识别原理和流程 1.1 车牌定位 1.2 基于图形图像学的定位方法. 1.3 基于机器学习的定位方法. 1.4 字符分割 1.5 字符识别 2 基于机器学习的车牌识别 2. ...
- 前馈神经网络_深度学习基础理解:以前馈神经网络为例
区别于传统统计机器学习的各类算法,我们从本篇开始探索深度学习模型.深度学习在应用上的重要性现如今已毋庸置疑,从2012年燃爆ImageNet,到2016年的AlphaGo战胜李世石,再到2018年的B ...
- 《解析卷积神经网络—深度学习实践手册》—学习笔记
书籍链接 百度网盘 谷歌云盘 绪论 机器学习是人工智能的一个分支,它致力于研究如何通过计算的手段,利用经验(experience)来改善计算机系统自身的性能.通过从经验中获取知识(knowledge) ...
- 昇思易点通 | 经典卷积神经网络的深度学习解析
1 经典CNN之LeNet 手写字体识别模型LeNet5诞生于1994年,是最早的卷积神经网络之一.LeNet5利用卷积.参数共享.池化等操作提取特征,避免了大量的计算成本,最后使用全连接神经网络进行 ...
- 深度卷积神经网络_深度卷积神经网络中的降采样
加入极市专业CV交流群,与6000+来自腾讯,华为,百度,北大,清华,中科院等名企名校视觉开发者互动交流!更有机会与李开复老师等大牛群内互动! 同时提供每月大咖直播分享.真实项目需求对接.干货资讯汇总 ...
- 卷积神经网络在深度学习中新发展的5篇论文推荐
转载自:Deephub Imba 1.Deformable CNN and Imbalance-Aware Feature Learning for Singing Technique Classif ...
- 1.10 卷积神经网络示例-深度学习第四课《卷积神经网络》-Stanford吴恩达教授
←上一篇 ↓↑ 下一篇→ 1.9 池化层 回到目录 1.11 为什么使用卷积? 卷积神经网络示例 构建全卷积神经网络的构造模块我们已经掌握得差不多了,下面来看个例子. 假设,有一张大小为32×32×3 ...
最新文章
- java学mybatis还用学jdbc吗,mybatis系统学习(二)——使用基础mybatis代替原始jdbc
- 在博文顶部添加文章字数及阅读时间信息:阅读本文需要xx分钟
- UML 类之间的几种关系
- 开源HTTP解析器---http-parser和fast-http
- Java设计模式12:装饰器模式
- QT动态库和静态库使用
- pandas读取xlsx文件,编码问题
- 常见移动机器人轮直径校准
- Gradle Maven部署,转化
- python选择排序算法_Python - 排序算法
- 软件架构设计思维导图
- 利用Gecco爬取(蚂蚁短租网)列表页数据
- 转:超越一切的熵增定律
- 越客汽车美容管理软件
- 利用抓包思想实现“优雅”请假
- WDS+MDT部署Windows7操作系统2—;导入启动映像和安装映像
- 论文研读-AI4VIS-可视化推荐-VizML: 一种基于机器学习的可视化推荐方法
- 《金匮要略》试卷二(A)
- jmeter入门——第一个jmeter脚本
- 科普计算机软硬件知识,科普显卡基础知识 让你更加了解显卡