《深度学习500问》笔记
第1章 数学基础
向量的范数
- 1范数:向量中各个元素的绝对值之和
- 2范数:向量中每个元素的平方和的平方根
- 负无穷范数:向量中所有元素的绝对值中最小的
- 正无穷范数:向量中所有元素的绝对值中最大的
- 范数:向量元素绝对值的次方和的次幂
矩阵的范数
- 1范数(列范数):对矩阵每一列上的元素的绝对值先求和,再从中去一个最大的(列和最大)
- 2范数:的最大特征根的平方根
- 无穷范数(行范数):对矩阵每一行上的元素的绝对值先求和,再从中去一个最大的(行和最大)
- 核范数:矩阵的奇异值之和
- 范数:矩阵的非0元素的个数
- 范数:矩阵中的每个元素的绝对值之和
- 范数(范数):矩阵的各个元素平方之和再开平方根
- 范数:求每一列的2范数,再对结果求1范数
判断一个矩阵是否为正定矩阵
考察是否满足以下几个条件之一:
- 顺序主子式全部大于0
- 存在可逆矩阵使
- 正惯性指数等于
- A与单位矩阵合同
- 标准型中主对角线元素全为正
- 特征值全为正
- 是某基的度量矩阵
奇异值和特征值的关系
这里就是右奇异向量,的特征值为,则:
是奇异值,是左奇异向量。可以用前(远小于)个奇异值来近似描述矩阵
随机变量与概率分布
- 概率质量函数(Probability Mass Function,PMF):描述离散型随机变量的概率分布,通常用大写字母表示
- 概率密度函数(Probability Density Function,PDF):描述连续型随机变量的概率分布,通常用小写字母表示
期望、方差、协方差、相关系数
期望:反映随机变量平均取指的大小
方差:度量随机变量和其数学期望之间的偏离程度
协方差:衡量两个变量线性相关性程度及变量尺度
相关系数:研究变量之间线性相关程度的量,取值范围是[-1,1]
第2章 机器学习基础
特征工程
包含特征提取和特征选择,常见的手工特征有尺度不变特征变换(SIFT)、方向梯度直方图(HOG)等。CNN本身就是一种特征提取和选择的引擎。
常用术语
二分类算法评价指标
精度precision=TP/(TP+FP),表示被分为正例的实例中实际为正例的比例
召回率recall=TP/(TP+FN),度量有多少个实际正例被预测为正例
综合考虑精度与召回率,可以得到新的评价指标F1分数,
梯度下降
下表简单对比批量梯度下降(BGD)、随机梯度下降(SGD)、小批量梯度下降(Mini-batch GD)的区别:
BGD | SGD | Mini-batch GD | |
---|---|---|---|
训练集 | 固定 | 固定 | 固定 |
单次迭代样本数 | 整个训练集 | 单个样本 | 训练集的子集 |
算法复杂度 | 高 | 低 | 一般 |
时效性 | 低 | 一般 | 一般 |
收敛性 | 稳定 | 不稳定 | 较稳定 |
线性判别分析(LDA)
投影后类内方差最小,类间方差最大。
如何解决欠拟合与过拟合
如何解决欠拟合
- 添加其他特征项。组合、泛化、相关性、上下文特征、平台特征等特征是特征添加的重要手段,有时候特征项不够会导致模型欠拟合。
- 添加多项式特征。例如将线性模型添加二次项或三次项使模型泛化能力更强。例如,FM(Factorization Machine)模型、FFM(Field-aware Factorization Machine)模型,其实就是线性模型,增加了二阶多项式,保证了模型一定的拟合程度。
- 可以增加模型的复杂程度。
- 减小正则化系数。正则化的目的是用来防止过拟合的,但是现在模型出现了欠拟合,则需要减少正则化参数。
如何解决过拟合
- 重新清洗数据,数据不纯会导致过拟合,此类情况需要重新清洗数据。
- 增加训练样本数量。
- 降低模型复杂程度。
- 增大正则项系数。
- 采用dropout方法,dropout方法,通俗的讲就是在训练的时候让神经元以一定的概率不工作。
- early stopping。
- 减少迭代次数。
- 增大学习率。
- 添加噪声数据。
- 树结构中,可以对树进行剪枝。
- 减少特征项。
第3章 深度学习基础
卷积前后图像大小公式
其中,是卷积后特征图的宽度,是卷积前图像的宽度,是滤波器的宽度,是Zero Padding的数量,Zero Padding是指在原始图像周围补几圈0,如果P的值为1,那么就补1圈0,S是步长,是卷积后特征图高度,是卷积前图像的宽度。
Pooling 层主要的作用
下采样,通过去掉 Feature Map 中不重要的样本,进一步减少参数数量。Pooling 的方法很多,最常用的是 Max Pooling
对于深度为 的 Feature Map,各层独立做 Pooling,因此 Pooling 后的深度仍然为 。
为什么需要激活函数?
- 激活函数对模型学习、理解非常复杂和非线性的函数具有重要作用。
- 激活函数可以引入非线性因素。如果不使用激活函数,则输出信号仅是一个简单的线性函数。线性函数一个一级多项式,线性方程的复杂度有限,从数据中学习复杂函数映射的能力很小。没有激活函数,神经网络将无法学习和模拟其他复杂类型的数据,例如图像、视频、音频、语音等。
- 激活函数可以把当前特征空间通过一定的线性映射转换到另一个空间,让数据能够更好的被分类。
为什么激活函数需要非线性函数?
- 假若网络中全部是线性部件,那么线性的组合还是线性,与单独一个线性分类器无异。这样就做不到用非线性来逼近任意函数。
- 使用非线性激活函数 ,以便使网络更加强大,增加它的能力,使它可以学习复杂的事物,复杂的表单数据,以及表示输入输出之间非线性的复杂的任意函数映射。使用非线性激活函数,能够从输入输出之间生成非线性映射。
Softmax 回归
在合理范围内,增大Batch_Size有何好处?
- 内存利用率提高了,大矩阵乘法的并行化效率提高。
- 跑完一次 epoch(全数据集)所需的迭代次数减少,对于相同数据量的处理速度进一步加快。
- 在一定范围内,一般来说 Batch_Size 越大,其确定的下降方向越准,引起训练震荡越小。
盲目增大 Batch_Size 有何坏处?
- 内存利用率提高了,但是内存容量可能撑不住了。
- 跑完一次 epoch(全数据集)所需的迭代次数减少,要想达到相同的精度,其所花费的时间大大增加了,从而对参数的修正也就显得更加缓慢。
- Batch_Size 增大到一定程度,其确定的下降方向已经基本不再变化。
调节 Batch_Size 对训练效果影响到底如何?
- Batch_Size 太小,模型表现效果极其糟糕(error飙升)。
- 随着 Batch_Size 增大,处理相同数据量的速度越快。
- 随着 Batch_Size 增大,达到相同精度所需要的 epoch 数量越来越多。
- 由于上述两种因素的矛盾, Batch_Size 增大到某个时候,达到时间上的最优。
- 由于最终收敛精度会陷入不同的局部极值,因此 Batch_Size 增大到某些时候,达到最终收敛精度上的最优。
为什么要归一化?
- 为了后面数据处理的方便,归一化的确可以避免一些不必要的数值问题。
- 为了程序运行时收敛加快。
- 同一量纲。样本数据的评价标准不一样,需要对其量纲化,统一评价标准。这算是应用层面的需求。
- 避免神经元饱和。啥意思?就是当神经元的激活在接近 0 或者 1 时会饱和,在这些区域,梯度几乎为 0,这样,在反向传播过程中,局部梯度就会接近 0,这会有效地“杀死”梯度。
- 保证输出数据中数值小的不被吞食。
3D 图解未归一化
例子:
假设 的范围在 ,而 的范围在 ,梯度每次都前进 1 单位,那么在 方向上每次相当于前进了 ,而在 上只相当于 !某种意义上来说,在 上前进的步长更小一些,而 在搜索过程中会比 “走”得更快。
这样会导致,在搜索过程中更偏向于 的方向。走出了“L”形状,或者成为“之”字形。
什么是批归一化(Batch Normalization)
以前在神经网络训练中,只是对输入层数据进行归一化处理,却没有在中间层进行归一化处理。要知道,虽然我们对输入数据进行了归一化处理,但是输入数据经过 这样的矩阵乘法以及非线性运算之后,其数据分布很可能被改变,而随着深度网络的多层运算之后,数据分布的变化将越来越大。如果我们能在网络的中间也进行归一化处理,是否对网络的训练起到改进作用呢?答案是肯定的。
这种在神经网络中间层也进行归一化处理,使训练效果更好的方法,就是批归一化Batch Normalization(BN)。
批归一化(BN)算法的优点
下面我们来说一下BN算法的优点:
- 减少了人为选择参数。在某些情况下可以取消 dropout 和 L2 正则项参数,或者采取更小的 L2 正则项约束参数;
- 减少了对学习率的要求。现在我们可以使用初始很大的学习率或者选择了较小的学习率,算法也能够快速训练收敛;
- 可以不再使用局部响应归一化。BN 本身就是归一化网络(局部响应归一化在 AlexNet 网络中存在)
- 破坏原来的数据分布,一定程度上缓解过拟合(防止每批训练中某一个样本经常被挑选到,文献说这个可以提高 1% 的精度)。
- 减少梯度消失,加快收敛速度,提高训练精度。
Batch Normalization在什么时候用比较合适?
在CNN中,BN应作用在非线性映射前。在神经网络训练时遇到收敛速度很慢,或梯度爆炸等无法训练的状况时可以尝试BN来解决。另外,在一般使用情况下也可以加入BN来加快训练速度,提高模型精度。
BN比较适用的场景是:每个mini-batch比较大,数据分布比较接近。在进行训练之前,要做好充分的shuffle,否则效果会差很多。另外,由于BN需要在运行过程中统计每个mini-batch的一阶统计量和二阶统计量,因此不适用于动态的网络结构和RNN网络。
深度学习中常用的数据增强方法?
-
Color Jittering:对颜色的数据增强:图像亮度、饱和度、对比度变化(此处对色彩抖动的理解不知是否得当);
-
PCA Jittering:首先按照RGB三个颜色通道计算均值和标准差,再在整个训练集上计算协方差矩阵,进行特征分解,得到特征向量和特征值,用来做PCA Jittering;
-
Random Scale:尺度变换;
-
Random Crop:采用随机图像差值方式,对图像进行裁剪、缩放;包括Scale Jittering方法(VGG及ResNet模型使用)或者尺度和长宽比增强变换;
-
Horizontal/Vertical Flip:水平/垂直翻转;
-
Shift:平移变换;
-
Rotation/Reflection:旋转/仿射变换;
-
Noise:高斯噪声、模糊处理;
-
Label Shuffle:类别不平衡数据的增广;
第4章 卷积神经网络的经典网络
第5章 卷积神经网络
- 平移不变性(translation invariance):不管检测对象出现在图像中的哪个位置,神经网络的前面几层应该对相同的图像区域具有相似的反应,即为“平移不变性”。
- 局部性(locality):神经网络的前面几层应该只探索输入图像中的局部区域,而不过度在意图像中相隔较远区域的关系,这就是“局部性”原则。最终,可以聚合这些局部特征,以在整个图像级别进行预测。
CNN层次结构 | 输出尺寸 | 作用 |
---|---|---|
输入层 | 卷积网络的原始输入,可以是原始或预处理后的像素矩阵 | |
卷积层 | 参数共享、局部连接,利用平移不变性从全局特征图提取局部特征 | |
激活层 | 将卷积层的输出结果进行非线性映射 | |
池化层 | 进一步筛选特征,可以有效减少后续网络层次所需的参数量 | |
全连接层 | 将多维特征展平为2维特征,通常低维度特征对应任务的学习目标(类别或回归值) |
对应原始图像或经过预处理的像素值矩阵,3对应RGB图像的通道;表示卷积层中卷积核(滤波器)的个数; 为池化后特征图的尺度,在全局池化中尺度对应;是将多维特征压缩到1维之后的大小,对应的则是图像类别个数。
卷积层次 | 特征类型 |
---|---|
浅层卷积 | 边缘特征 |
中层卷积 | 局部特征 |
深层卷积 | 全局特征 |
每层卷积是否只能用一种尺寸的卷积核?
经典的神经网络一般都属于层叠式网络,每层仅用一个尺寸的卷积核,如VGG结构中使用了大量的卷积层。事实上,同一层特征图可以分别使用多个不同尺寸的卷积核,以获得不同尺度的特征,再把这些特征结合起来,得到的特征往往比使用单一卷积核的要好,如GoogLeNet、Inception系列的网络,均是每层使用了多个卷积核结构。如图5.3所示,输入的特征在同一层分别经过、和三种不同尺寸的卷积核,再将分别得到的特征进行整合,得到的新特征可以看作不同感受域提取的特征组合,相比于单一卷积核会有更强的表达能力。
提高卷积网络泛化能力的方法
方法 | 说明 |
---|---|
使用更多数据 | 在有条件的前提下,尽可能多地获取训练数据是最理想的方法,更多的数据可以让模型得到充分的学习,也更容易提高泛化能力 |
使用更大批次 | 在相同迭代次数和学习率的条件下,每批次采用更多的数据将有助于模型更好的学习到正确的模式,模型输出结果也会更加稳定 |
调整数据分布 | 大多数场景下的数据分布是不均匀的,模型过多地学习某类数据容易导致其输出结果偏向于该类型的数据,此时通过调整输入的数据分布可以一定程度提高泛化能力 |
调整目标函数 | 在某些情况下,目标函数的选择会影响模型的泛化能力,如目标函数$f(y,y')= |
调整网络结构 | 在浅层卷积神经网络中,参数量较少往往使模型的泛化能力不足而导致欠拟合,此时通过叠加卷积层可以有效地增加网络参数,提高模型表达能力;在深层卷积网络中,若没有充足的训练数据则容易导致模型过拟合,此时通过简化网络结构减少卷积层数可以起到提高模型泛化能力的作用 |
1x1卷积的作用
1x1的卷积核由于大小只有1x1,所以并不需要考虑像素跟周边像素的关系,它主要用于调节通道数,对不同的通道上的像素点进行线性组合,然后进行非线性化操作,可以完成升维和降维的功能,选择2个1x1大小的卷积核,那么特征图的深度将会从3变成2,如果使用4个1x1的卷积核,特征图的深度将会由3变成4。
- 实现信息的跨通道交互和整合
- 对卷积核通道数进行降维和升维
每层卷积是否只能用一种尺寸的卷积核
同一特征图可以分别使用多个不同尺寸的卷积核,以获得不同尺度的特征,再把这些特征结合起来,得到的特征往往比使用单一卷积核的要好。
如何减少卷积层参数量
- 使用堆叠小卷积核代替大卷积核,2个3x3代替1个5x5
- 使用分离卷积操作,
- 添加1x1的卷积操作
- 在卷积前使用池化
池化层作用
池化层又称为下采样层,作用是对感受野内的特征进行筛选,提取区域内最具代表性的特征,有效减小输出特征尺度,减少模型所需要的参数。
卷积层 | 池化层 | |
---|---|---|
结构 | 零填充时输出维度不变,而通道数改变 | 通常特征维度会降低,通道数不变 |
稳定性 | 输入特征发生细微改变时,输出结果会改变 | 感受域内的细微变化不影响输出结果 |
作用 | 感受域内提取局部关联特征 | 感受域内提取泛化特征,降低维度 |
参数量 | 与卷积核尺寸、卷积核个数相关 | 不引入额外参数 |
全连接层
负责对卷积神经网络学习到的特征进行汇总,将多维的特征输入映射为二维的特征输出。
第6章 循环神经网络
第7章 生成对抗网络
第8章 目标检测
目标检测的算法分类
1、two-stage
主要思路:先进行区域(Region Proposal, RP)生成,再通过卷积神经网络进行样本分类
任务路线:特征提取→生成目标候选区域→分类/定位回归
2、one-stage
主要思路:不用进行区域生成,直接在网络中提取特征来预测物体分类和位置
任务路线:特征提取→分类/定位回归
R-CNN
-
预训练模型。选择一个预训练 (pre-trained)神经网络(如AlexNet、VGG)。
-
重新训练全连接层。使用需要检测的目标重新训练(re-train)最后全连接层(connected layer)。
-
提取 proposals并计算CNN 特征。利用选择性搜索(Selective Search)算法提取所有proposals(大约2000幅images),调整(resize/warp)它们成固定大小,以满足 CNN输入要求(因为全连接层的限制),然后将feature map 保存到本地磁盘。
-
训练SVM。利用feature map 训练SVM来对目标和背景进行分类(每个类一个二进制SVM)
-
边界框回归(Bounding boxes Regression)。训练将输出一些校正因子的线性回归分类器
R-CNN有哪些创新点?
- 使用CNN(ConvNet)对 region proposals 计算 feature vectors。从经验驱动特征(SIFT、HOG)到数据驱动特征(CNN feature map),提高特征对样本的表示能力。
- 采用imagenet大样本下(ILSVRC)有监督预训练和小样本(PASCAL)微调(fine-tuning)的方法解决小样本难以训练甚至过拟合等问题。
Fast R-CNN
Fast R-CNN有哪些创新点?
- 只对整幅图像进行一次特征提取,避免R-CNN中的冗余特征提取
- 用RoI pooling层替换最后一层的max pooling层,同时引入建议框数据,提取相应建议框特征
- Fast R-CNN网络末尾采用并行的不同的全连接层,可同时输出分类结果和窗口回归结果,实现了end-to-end的多任务训练【建议框提取除外】,也不需要额外的特征存储空间【R-CNN中的特征需要保持到本地,来供SVM和Bounding-box regression进行训练】
- 采用SVD对Fast R-CNN网络末尾并行的全连接层进行分解,减少计算复杂度,加快检测速度。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!