深度学习基础
目录
过拟合和欠拟合
欠拟合
过拟合
反向传播算法(backpropagation)
激活函数
ReLU
Leaky ReLU
PReLU
Sigmoid
Softmax
Tanh
ReLU相比sigmoid的优势
正则化
Batch Normalization(批标准化,BN)
L1 | L2范数正则化
Dropout
权重比例推断
参数初始化
随机初始化
Xavier初始化(Glorot初始化)
He/Kaiming初始化
LeCun初始化
正交初始化
稀疏初始化
***仅做复习用途,若有侵权,请及时联系我
过拟合和欠拟合
欠拟合
- 定义:欠拟合是指模型不能在训练集上获得足够低的误差。 换句换说,就是模型复杂度低,模型在训练集上就表现很差, 没法学习到数据背后的规律。
- 解决方法:通过增加网络复杂度或者在模型中增加特征,或减少正则化项的系数(添加正则化项是为了限制模型的学习能力,减小正则化项的系数则可以放宽这个限制)
过拟合
- 定义:训练误差和测试误差之间的差距太大,模型复杂度高于实际问题,模型在训练集上表现很好,但在测试集上却表现很差。
- 出现原因:
- 训练样本单一;
- 训练数据噪声干扰过大;
- 模型过于复杂(主要)。
- 解决方法:
- 数据增强:通过增加训练集的额外副本来增加训练集 的大小,进而改进模型的泛化能力。旋转、缩放、随机裁剪、 随机噪声、平移、镜像等方式。也可以使用GAN生成新数据。
- Early stopping:迭代次数截断的方法,在模型对训练数据集迭代收敛之前停止迭代来防止过拟合。
- Dropout:相当于在隐藏单元增加了噪声,Dropout 指的是在训练过程中每次按一定的概率(比如50%)随机地 “删除”一部分隐藏单元(神经元),其实就是将该部分神经元的激活函数设为0(激活函数的输出为0)。
- 交叉验证:交叉验证通过n*k次实验确定n个超参数,再利用全部训练数据重新训练,得到的模型是经过多次综合比较相对最优的模型,降低了样本划分的偶然性,因此能在一定程度上避免过拟合问题。
- L1、L2正则化
- 凡是可以减少泛化误差而不是减少训练误差的方法,都可以被称为正则化方法。即凡是能减少过拟合的方法都叫做正则化方法。过拟合主要是针对参数w的处理,w直接决定了模型的形状,而b是偏置,仅会对模型进行平移,因此,正则化对b没有影响。
- L1、L2范数:扩充空间中的两点距离。
- L1范数:
L2范数:
- Lp范数:
- 采用合适的模型。降低模型复杂度,通过减少网络层或神经元个数,或者设计更合适的模型。
交叉验证步骤:
- 将训练数据随机分为k份。
- 每次选取其中k-1份作为训练集,剩余的1份作为测试集进行训练。
- 循环k次,训练出k个模型。
- 计算k个模型评估结果的平均值作为模型的最终得分。
隐藏层:神经网络中位于输入层和 输出层之间的一层或多层。
反向传播算法(backpropagation)
- 思想:最小化网络输出与真实值之间的误差(损失函数)。利用链式法则(Chain Rule)从输出层到输入层逐层计算梯度,并反向更新权重。
- 反向传播过程公式
- 首先明确,每个神经元结构
,其中,w和b是需要训练的权重,z是前一层所有相关神经元输出与w和b运算后的数值,a是z通过激活函数激活后的值。
C代表输出结果与真实结果之间的损失值,对第L层求导,即可以看做对第L层的a进行求导,在这里L代表输出层;
上面式子是针对输出层的推导,这里用l代表网络中间层,若想对第l层的a进行反向传播,那必须考虑到al的值是与哪些神经元相关的,即al的值与a(l+1)层所有神经元相关,针对l+1层的每一个神经元,传输到al层的值都是c对a(l+1)和z(l+1)的偏导值。
该式代表第l层对w权重的更新,基于上式得到的结果。
这里同上。
- 首先明确,每个神经元结构
激活函数
- 激活函数(Activation Function)是神经网络中的核心组件,用于引入非线性,使网络能够拟合复杂的数据关系。如果没有激活函数,神经网络将退化为线性模型,无法解决非线性问题(如异或分类、图像识别等)。
- 激活函数的性质
- 非线性:当激活函数是非线性时,一个两层的神经网络就可以基本上逼近所有的函数。
- 可微性:可以用来梯度更新。
- 单调性:单层网络能够保证是凸函数。
- f(x)约等于x:这种性质会令网络训练更加高效。
- 常见的激活函数:ReLU、Sigmoid、Tanh、Leaky ReLU、Softmax
ReLU
-
- 函数输出:
函数梯度:
- 存在梯度为0的问题,意味着反向传播时,权重没有得到更新, 这会产生死神经元,因此,引入Leaky ReLU。
Leaky ReLU
-
- 函数输出:
函数梯度:
- 使用非水平线替代了水平线,其中a是一个很小 的值,如0.01。主要优点是去除零梯度,令神经 元不会成为死神经元。
PReLU
- 与Leaky ReLU相似,但a是可训练的函数。
Sigmoid
-
- 函数输出:
函数梯度:
- [-3, 3]范围内x的少量变化导致y大幅度变化,但 在其他范围是平坦的,梯度变得很小,网络得不 到真正的学习;
- 另外,y取值[0, 1],在原点周围不对称,得到的 都是正值,因此引入了tanh。
Softmax
-
- softmax也是一种sigmoid激活函数,但它在处理分类问题时很方便, softmax将压缩每个类在0到1之间,并除以输出总和。 实际上可以表示某个类的输入概率。最好在分类器的输出层使用。
Tanh
-
- 函数输出:
函数梯度:
- 原点对称,范围[-1, 1], 与Sigmoid函数相比,tanh函数的梯度更陡。 存在同样问题,梯度逐渐平坦,值很低。
ReLU相比sigmoid的优势
- 避免梯度消失:
sigmoid
函数在输入取绝对值非常大的正值或负值时会出现饱和现象——在图像上表现为变得很平,此时函数会对输入的微小变化不敏感——从而造成梯度消失,ReLU
的导数始终是一个常数——负半区为 0,正半区为 1——所以不会发生梯度消失现象。 - 减缓过拟合:
ReLU
在负半区的输出为 0。一旦神经元的激活值进入负半区,那么该激活值就不会产生梯度/不会被训练,造成了网络的稀疏性——稀疏激活,这有助于减少参数的相互依赖,缓解过拟合问题的发生。 - 加速计算:
ReLU
的求导不涉及浮点运算,所以速度更快。
为什么ReLU不是全程可微|可导也能用于基于梯度的学习?
- 虽然从数学的角度看 ReLU 在 0 点不可导,因为它的左导数和右导数不相等,但是在实现时通常会返回左导数或右导数的其中一个,而不是报告一个导数不存在的错误。从而避免了这个问题。大多数深度学习框架如PyTorch/TensorFlow默认取 0。
正则化
- 正则化(Regularization)是机器学习中防止模型过拟合(Overfitting)的核心技术,通过在损失函数中引入额外的约束,限制模型复杂度,从而提高泛化能力。
- 常见的正则化方法有:L1 和 L2 正则化(参数惩罚)、Dropout(随机失活)、早停(Early Stopping)、数据增强(Data Augmentation)、批归一化(Batch Normalization, BN)、权重约束(Weight Constraint)、标签平滑(Label Smoothing)。
Batch Normalization(批标准化,BN)
- 对每层的输入做标准化(均值0、方差1),并引入可学习的缩放参数 γ 和偏移 β。
- 作用:加速网络的训练,减轻内部协变量偏移(Internal Covariate Shift)(缓解梯度消失,支持更大的学习率)、防止过拟合、降低了参数初始化的要求。同时测试时,使用全局统计量而非batch统计量。
- 训练时不采用移动平均的原因:
- 使用 BN 的目的就是为了保证每批数据的分布稳定,使用全局统计量反而违背了这个初衷,BN 的作者认为在训练时采用移动平均可能会与梯度优化存在冲突。
- 保持梯度更新的有效性:核心目标是训练时需要根据当前 batch 的数据分布计算梯度,反向传播更新模型参数(包括 BN 的缩放参数 γ 和偏移参数 β)。若使用移动平均,梯度计算会基于历史统计量(而非当前 batch 的真实分布),导致参数更新方向偏离实际数据。相当于引入滞后性,破坏梯度与当前 batch 的关联性,影响收敛。
- 隐式正则化:不同 batch 的统计量存在波动,这种噪声会迫使模型适应轻微的数据分布变化,提升泛化能力(类似 Dropout 的效果)。统计量过于平滑,丢失了这种正则化作用,可能增加过拟合风险。
- 计算高效性:直接计算当前 batch 的统计量只需遍历一次数据,而更新移动平均需要额外操作(尽管成本可忽略,但训练时频繁更新仍不必要)。
- 逻辑一致性:训练时模型应学习“如何正确处理当前数据”,而非依赖历史统计量;测试时才需固定行为以保证输出稳定。
- 迁移学习时,如何处理预训练模型的BN层?
- 通常冻结 BN 层的移动平均统计量(即
model.eval()
模式),避免新数据破坏原有分布。
- 通常冻结 BN 层的移动平均统计量(即
L1 | L2范数正则化
- 通过限制参数的规模,使模型偏好于权值较小的目标函数,防止过拟合。
- L1正则化:
,添加权重的绝对值之和作为惩罚项,倾向于产生稀疏权重(部分权重归零)。
- L1 正则化适用于特征之间存在冗余或高度相关的情况(通过稀疏化自动选择代表性特征)。
- L2正则化:
,添加权重的平方和作为惩罚项,推动权重趋向小而分散的值。
- L2 正则化适用于特征之间独立或需要共同发挥作用的情况(通过均衡压缩保留所有特征)。
- L1和L2正则化可以防止过拟合的原因:
- L1 & L2 正则化会使模型偏好于更小的权值。
- 更小的权值意味着更低的模型复杂度;添加 L1 & L2 正则化相当于为模型添加了某种先验,限制了参数的分布,从而降低了模型的复杂度。
- 模型的复杂度降低,意味着模型对于噪声与异常点的抗干扰性的能力增强,从而提高模型的泛化能力。——直观来说,就是对训练数据的拟合刚刚好,不会过分拟合训练数据(比如异常点,噪声)——奥卡姆剃刀原理
关于L1正则化为何会倾向于产生稀疏权重?
- 几何角度解释:
关于L2正则化为何会倾向于小而分散的值?
- 几何角度解释:
Dropout
- 核心思想是在训练过程中随机丢弃(即暂时屏蔽)部分神经元,从而减少神经元之间的共适应性(co-adaptation),增强模型的泛化能力。
- Dropout 通过参数共享提供了一种廉价的 Bagging 集成近似—— Dropout 策略相当于集成了包括所有从基础网络除去部分单元后形成的子网络。
权重比例推断
- 目的是在测试时保持神经元的期望激活值与训练时一致,确保模型行为的稳定性。其核心思想是通过调整权重或激活值的尺度,补偿 Dropout 在训练时随机丢弃神经元带来的影响。
- 实现方式
- 测试时缩放权重:训练完成后,将所有权重乘以保留概率 1−p。
- 训练时放大激活值:训练时,将未被丢弃的神经元的输出放大
倍,测试时直接使用原始权重。
Dropout和Bagging的区别
- 在 Bagging 的情况下,所有模型都是独立的;而在 Dropout 的情况下,所有模型共享参数,其中每个模型继承父神经网络参数的不同子集。
- 在 Bagging 的情况下,每一个模型都会在其相应训练集上训练到收敛。而在 Dropout 的情况下,通常大部分模型都没有显式地被训练;取而代之的是,在单个步骤中我们训练一小部分的子网络,参数共享会使得剩余的子网络也能有好的参数设定。
参数初始化
- 推荐视频
- 目的是为模型权重(weights)和偏置(biases)赋予初始值。良好的初始化能显著影响模型的收敛速度、训练稳定性以及最终性能。
- 意义:
-
避免梯度消失/爆炸:初始值过大或过小会导致梯度在反向传播时指数级衰减或增长。
-
打破对称性:如果所有权重初始化为相同值,神经元会学习相同的特征,降低模型表达能力。
-
加速收敛:合理的初始化使损失函数处于易于优化的区域。
-
随机初始化
- 以均匀分布或正态分布生成小随机数作为初始权重。
- 均匀分布:如从 [−0.1,0.1]中采样,简单但可能导致梯度不稳定。
- 正态分布:如均值为0,标准差为0.01,但对深层网络可能不够高效。
- 问题:未经调整的随机初始化易导致梯度消失或爆炸,尤其在深层网络中。
Xavier初始化(Glorot初始化)
- 为解决激活值方差稳定问题而设计,适用于 Sigmoid、Tanh 等激活函数。
- 均匀分布(Tanh):
- 正态分布(Sigmoid):
He/Kaiming初始化
- 针对 ReLU 及其变体(如 Leaky ReLU)设计。
- 思想:修正 ReLU 导致的神经元输出方差减半问题。
- 正态分布:
- 均匀分布:
- 对于Leaky ReLU,调整系数为
,a为负斜率。
LeCun初始化
- 适用于类似 Tanh 的激活函数。
- 正态分布,标准差为:
正交初始化
- 将权重矩阵初始化为正交矩阵
,确保梯度范数稳定。
- 适用于循环神经网络(RNN)等需保持长程依赖的模型。
稀疏初始化
- 将大部分权重设为0,随机初始化少量非零值。模拟生物神经网络的稀疏性,减少过拟合风险。
***仅做复习用途,若有侵权,请及时联系我
参考:
- github