动手学深度学习新知
动手学深度学习新知
预处理
-
pd.get_dummies()
可获得one-hot编码,但有陷阱,可参考文献1。 -
降维时候的指定轴是保留轴。
-
点积、数量积、标量积都是向量相同位置的按元素乘积的和,即
torch.dot()
函数。 -
哈达玛积是矩阵的点积,即
A*B
。 -
矩阵-向量积用
torch.mv()
函数。 -
矩阵乘法用
@
或torch.mm()
函数。 -
范数是
。
线性神经网络
-
熵是信息量的期望。
-
高级索引
a[[row_index],[col_index]]
。 -
只有标量可以反向传播,所以一般torch中内置criterion都是在内部将张量mean()化。
-
反向传播将张量mean()或sum()为标量,一般都是mean(),可以减少梯度中的噪声。
-
net.apply(fn)
函数能将函数fn
递归到每一层网络。 -
规避softmax的overflow和underflow,可以首先将项减去最大值,然后将softmax与交叉熵相结合,即
log(exp(*)) = *
,这类似于LogSumExp技巧,可参考文献2。 -
单纯的增加隐藏层而不加入激活函数没有任何益处,因为单层网络就已经可以表示任何仿射函数。
-
学习率过小会局部收敛。
-
过拟合原因:
- 参数量(自由度)过大。
- 初始参数权重取值范围过大(参数空间大、梯度消失爆炸)。
- 训练样本的数量过少。
-
训练误差和验证误差都很大,且其差距很小,继续训练无法降低误差,则在证明该模型欠拟合,该复杂模型结构。
-
(对于线性回归),函数阶数等于数据样本数的多项式函数可以完美拟合训练集。
多层感知机
-
权重衰退是最常用正则化技术,有效性可以从拉格朗日乘数、权重衰减、贝叶斯、模型复杂度等多个角度理解,可以参考文献3进行学习。
-
正则化用范数的柔性限制限制权重大小,其
范数惩罚与权重矩阵的点积等价,可证,且范数惩罚是加入损失函数中,从而使权重受罚(权重受罚公式待推导)。 -
Dropout暂退法有效的有效性原理是具有噪音输入的训练等价于吉洪诺夫正则化,即在计算后一层之前每一层注入噪音会增加输入-输出的平滑性,有性生殖相较于无性生殖会破坏共适应性(但会是健壮性变强),同理,会使神经元健壮性更强,具体原理与表现可参考文献4、5。
-
暂退法将激活值替换为具有相同期望值的随机变量。
-
dropout放在激活函数后,如果放在激活函数前仍会导致置0的神经元在前向传播造成贡献,待证(可参考答案参考.4.6)。
-
神经网络层数过深会使得梯度乘积过深,而且特征值具有多样多样性 则会使得出现梯度爆炸或者梯度消失问题。
-
梯度爆炸是参数更新过大,破坏了模型的稳定收敛;梯度消失是参数更新过小,在更新时几乎不会移动。
-
激活函数sigmoid容易导致梯度消失,由函数的导数特性导致,只有在每层输入接近0时梯度正常。
-
神经网络参数的初始化问题(排列对称性、过大、过小)会导致梯度爆炸,排列对称性迭代无法打破(可加入正则化dropout打破)。
-
分布偏移是在许多情况下训练集和测试集不来自于同一个分布。
-
分布偏移一般有协变量偏移(训练和测试输入特征不一致,例如训练时是真照片,测试时是虚拟形象)、标签偏移(测试和训练标签分布不一致,或者标签分布随时间变化)和概念偏移。
-
真实风险或期望风险是模型在全体数据分布上的平均损失,而经验风险是模型在训练数据集上的平均损失,是真实风险的估计。
-
神经网络的真实目的是真实风险最小化,但训练数据对分布的体现不全面,使得训练中是使经验风险最小化,用经验风险近似真实风险。
-
协变量偏移纠正典型算法(前提是目标分布和源分布有重叠):
- 生成二元分类训练集
- 使用logistic回归训练二元分类器得到函数
- 使用
或更好的 对训练数据进行加权。 - 使用权重
进行 中 的训练。
- 生成二元分类训练集
-
概念分布偏移纠正:使用新数据更新现有的网络权重代替从零开始训练。
-
在线学习:不断实时观测、估计、评估损失、训练、更新模式。
-
环境的变化(方式、速度...)决定采用算法的类型。
-
要实时监控评估优化系统,避免失控反馈循环。
-
影响经验风险接近真实风险程度的因素除分布偏移外:
-
样本大小:经验风险的准确性通常随着样本大小的增加而增加。较大的样本量提供了更多的信息,使得估计的风险更加可靠。
-
特征选择:选择恰当的特征可以减少噪声和冗余信息的影响,从而提高对真实风险的估计。良好的特征选择有助于提高模型的泛化能力。
-
模型复杂度:模型的复杂度与其在训练数据上的表现以及对真实风险的估计密切相关。过于简单的模型可能无法捕捉到数据中的复杂关系,而过于复杂的模型可能过度拟合训练数据。
-
数据质量:数据质量对于经验风险的准确性至关重要。低质量的数据、含有错误或缺失值的数据可能导致错误的模型训练和风险估计。
-
样本选择偏差:如果样本选择不恰当或存在偏差,例如采样方式不随机或样本并非代表总体。
-
噪声和异常值:数据中的噪声和异常值可能对经验风险的估计造成干扰。这些异常值可能使模型过度拟合,并导致对真实风险的估计不准确。
-
-
自定义module需要继承Module类,参数是复合对象,包含值、梯度、额外信息。
-
参数绑定,即多个一样的层共享一组参数,CNN卷积核权重在整个输入数据上共享(特征检测、平移不变性、层次化特征提取、局部性限制)。
-
多个卷积核不会学习到重复特征,因为初始化随机权重、梯度更新、数据多样性,如果发现相似的学习特征,可以通过正则化、增加卷积核数、调整网络结构等多种方式解决。
-
共享参数可以减少参数量,降低计算量,加速收敛,加强模型可解释性,提高泛化能力(捕捉数据共性)。
-
框架有延后初始化,当模型中有形状不确定的时候,模型可以直到数据第一次通过模型传递时,框架才会动态推断出层的大小(自动)。
-
如果输入具有不同维度,可以增加一层额外层并于该层权重绑定。
卷积神经网络
-
全连接层可以通过引用平移不变性和局部性的变成卷积层,即一维全连接层参数变成二维,且将参数尺寸固定且不依赖输入的值,通过正偏移和负偏移覆盖整张图像,即产生卷积(实际为交叉相关或互相关),卷积本身是把一个函数翻转并移位,测量两个函数f、g之间的重叠。
-
一系列具有二维张量的通道(隐藏表示)称为特征映射,即经过卷积核处理后反映了输入数据的某种特征分布情况。
-
文本向量化的特征矩阵卷积有效。
-
在卷积网络中,对于某一层的任意元素的感受野是指在前向传播期间可能影响该元素计算的所有元素,如果要检测更大区域的输入特征时,可以构建一个更深的网络。
-
1*1的全连接层可以看作每个像素位置应用的全连接层,可用于调整网络层的通道数量和控制模型复杂度。
-
池化层(汇聚层)的目的是降低卷积层对位置的敏感性,同时降低对空间降采样表示的敏感性。
-
使用最大汇聚层以及大于一的步幅可减少空间维度。
-
LeNet由两个卷积层和三个全连接层组成,使用Sigmoid激活函数。
现代卷积神经网络
-
AlexNet由五个卷积层和三个全连接层组成,且使用ReLU激活函数,同时使用了Dropout和数据增强。
-
batch大,显存占用大,精度变低。
-
AlexNet中主演占用显存的是卷积层,因为需要保留核参数与中间结果;但是全连接层需要更多计算。
-
VGG网络也是由卷积层和全连接层组成,只不过运用了块的思想,VGG块由n个卷积+一个池化层构成,同时使用了较窄的卷积。
-
VGG中主要意识到深层且窄的卷积(3*3)比浅层且宽的卷积有效。
-
层数深、卷积核小的计算量大。
-
卷积核通道数是输入通道数,卷积核个数是输出通道数,所以1*1卷积为全连接层。
-
NiN中提出思想:1*1卷积用来增强特征的非线性表达能力。
-
NiN块是由一个卷积层+两个1*1卷积组成,NiN最后通过NiN块+全局平均池化代替普通网络中的全连接层(减少过拟合概率),显著减少了参数量。
-
去掉NiN块中的一个1*1卷积会影响模型精度,减少模型的非线性能力和特征提取能力。
-
如果一次性将表示缩减太多(例如384*5*5缩减至10*5*5),会丢弃大量信息,从而导致丢失有效信息,影响模型性能,但同样也会减少参数量,减少过拟合风险。
-
GoogleNet提出了Inception块,通过多种不同的卷积核可以有效识别不同范围的图像细节,Inception块相当于一个有4条路径的子网络,通过不同窗口形状的卷积层和最大汇聚层来并行提取信息,并使用1*1卷积层减少像素级上的通道维数从而降低模型复杂度。
-
批量规范化BN在每次训练迭代中,我们首先规范化输入(减去其均值并除以其标准差),其中两者均基于小批量处理,然后应用比例系数和比例偏移。
-
只有使用足够大的小批量,批量规范化才有效且稳定的,BN在训练模式(小批量统计数据规范化)和预测模式(通过数据集统计规范化)的功能不同。
-
BN层将训练时的均值和方差的移动平均值保存,从而加快test中的BN计算速度。
-
BN层的原理是减少内部协变量偏移,向小批量中加入噪音,即正则化(与Dropout二选一)。
-
残差网络(ResNet)解决的问题是模型偏移问题(即深层网络退化问题),残差块通过学习输入与输出间的残差代替学习输出,即当期望输出等同于该层网络输入时,该层网络需要学习成恒等层(恒等映射),直接学习为恒等层比较难,但网络学习残差为0比较简单(即微小调整比重新生成新结果简单)。
-
残差的作用是:
- 简化学习目标(学习恒等映射比较难)。
- 缓解梯度消失,跳跃连接使得梯度有效传递,保留原始信息。
- 解决网络退化问题。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?