深度学习的实践层面
训练,验证,测试集(Train / Dev / Test sets)
在深度学习项目中,合理地划分数据集是构建高效神经网络的第一步。正确的划分方法不仅能加速训练,还能提升模型的泛化能力,避免过拟合。本文将详细讲解训练集(Train set)、验证集(Dev set)、测试集(Test set)的作用及划分方法。
1. 为什么要划分训练集、验证集和测试集?
在训练深度学习模型时,我们需要多个数据集来完成不同的任务:
- 训练集(Train Set):
- 用于训练神经网络,模型在该数据集上调整权重
W和偏置b。
- 验证集(Dev Set):
- 也称交叉验证集(Cross Validation Set)。
- 用于调优超参数,选择最佳模型。
- 例如选择最优学习率、隐藏层数、正则化参数等。
- 测试集(Test Set):
- 用于最终评估模型的性能,保证模型泛化能力。
- 不能用来调整超参数,否则会导致过拟合。
为什么要有验证集?
- 训练集仅用于优化模型的参数(如
W和b)。 - 但如果没有验证集,可能会过拟合训练数据,导致模型在未见过的数据上表现不佳。
- 验证集用于选择最好的超参数,使模型在新数据上表现更好。
2. 数据划分的经典方法
(1) 传统数据划分比例(适用于小数据集)
在传统机器学习(小数据量时代),常见的划分比例是:
- 训练集:70%
- 验证集:15%
- 测试集:15%
或者:
- 训练集:60%
- 验证集:20%
- 测试集:20%
这种划分适用于:
- 数据量较小(<10万条样本)。
- 需要留出足够的测试数据来进行无偏估计。
(2) 现代大数据时代的划分方法
随着深度学习的发展,数据集规模变大,通常数据划分如下:
- 训练集:98% 以上
- 验证集:1% ~ 2%
- 测试集:1% ~ 2%
例如:
- 数据量:100万
- 训练集:98万
- 验证集:1万
- 测试集:1万
- 数据量:1亿
- 训练集:99.5%
- 验证集:0.4%
- 测试集:0.1%
为什么验证集和测试集占比降低?
- 训练集越大,验证集和测试集所需的数据量不需要等比例增长。
- 例如:对于 100 万条数据,1 万条数据(1%)足以评估模型效果。
- 现代深度学习更关注训练集的规模,因为大数据能提升模型的表现。
3. 训练集、验证集和测试集的分布一致性
在很多应用场景下,训练集和测试集的分布可能不同。例如:
- 训练集:从网络下载的高质量猫咪图片
- 测试集:用户上传的低质量手机照片
如何处理分布不匹配的问题?
- 确保验证集和测试集来自相同的分布:
- 因为验证集用于选择最优模型,如果验证集和测试集分布不同,优化出的模型在测试集上可能效果不佳。
- 经验法则:验证集和测试集应该来源于相同的数据分布。
- 如果训练集和测试集分布不同,应该尽量收集与测试集类似的数据加入训练集。
- 数据增强(Data Augmentation):
- 例如:对训练数据加入模糊、噪声、光照变化,使其更接近测试数据的分布。
4. 什么时候可以不使用测试集?
在某些情况下,我们可以省略测试集:
- 项目中没有无偏性能评估的需求:
- 例如推荐系统,在不断优化模型的过程中,只关心在线表现,不需要单独的测试集。
- 数据量非常小:
- 例如只有 5000 条数据,可能只划分训练集(90%)和验证集(10%)。
- 测试数据不可用:
- 例如某些医学研究,测试数据只能在最终应用阶段获得。
注意:
- 没有测试集时,验证集承担部分测试集的作用,但可能会导致过拟合验证集。
- 如果必须评估最终性能,建议至少划分一部分数据作为测试集。
5. 关键总结
- 训练集 用于模型训练,验证集 用于调参,测试集 用于最终评估。
- 传统划分比例(70% 训练,20% 验证,10% 测试)适用于小数据集。
- 现代深度学习中,训练集占比更大(>98%),验证集和测试集可各占 1%~2%。
- 验证集和测试集应来源于相同的数据分布,确保优化出的模型能泛化到测试数据。
- 如果没有测试集,验证集可能会被过拟合,影响最终评估的公正性。
- 可以使用
train_test_split()自动划分数据集,确保合理的比例。
偏差,方差(Bias /Variance)
在机器学习和深度学习中,偏差(Bias)和方差(Variance)是两个核心概念。理解它们有助于分析模型的表现,调整训练策略,优化最终的分类效果。
1. 偏差(Bias)与方差(Variance)的概念
(1) 什么是偏差(Bias)?
偏差指的是模型对数据的拟合程度,如果偏差高,说明模型拟合能力不足,不能很好地学习训练数据的模式,这种情况被称为欠拟合(Underfitting)。
- 高偏差(High Bias):模型过于简单,不能捕捉数据的复杂关系。例如:
- 使用线性回归拟合非线性数据
- 训练深度不够的神经网络
- 特征选择过少
- 低偏差(Low Bias):模型可以很好地拟合训练数据。
(2) 什么是方差(Variance)?
方差指的是模型对数据的敏感度,如果方差高,说明模型过于依赖训练数据,导致在新数据上表现不稳定,这种情况被称为过拟合(Overfitting)。
- 高方差(High Variance):模型对训练数据拟合得太好,甚至学习了数据中的噪声,导致泛化能力差。例如:
- 使用深度过高的神经网络
- 训练数据太少,模型学习到了噪声
- 特征选择过多
- 低方差(Low Variance):模型对训练数据和新数据都能保持较好的泛化能力。
2. 视觉化理解偏差和方差
我们可以用一个经典的示例——“靶心图”来直观理解偏差和方差的关系。

- 左下角(高偏差、低方差):模型预测值远离真实值,并且分布比较集中,说明模型过于简单,无法捕捉数据的复杂模式(欠拟合)。
- 右下角(高偏差、高方差):模型预测值既偏离真实值,又分布不均匀,说明模型既拟合能力不足,又不稳定。
- 左上角(低偏差、低方差):预测值集中在真实值附近,说明模型既拟合数据很好,又在新数据上表现稳定(理想情况)。
- 右上角(低偏差、高方差):预测值围绕真实值,但分布很散,说明模型在训练数据上拟合得很好,但泛化能力很差(过拟合)。
3. 通过训练误差和验证误差判断偏差和方差
(1) 训练误差(Train Error)
- 训练误差表示模型在训练数据上的错误率。
- 训练误差高 → 说明模型拟合能力不足(高偏差)。
(2) 验证误差(Dev / Validation Error)
- 验证误差表示模型在未见过的数据(验证集)上的错误率。
- 训练误差低,但验证误差高 → 说明模型过拟合(高方差)。
4. 通过误差分析偏差和方差
假设我们在训练一个猫咪识别模型,数据集中的图片分为“猫”和“非猫”两类:
训练误差(Train Error) | 验证误差(Dev Error) | 偏差 | 方差 | 结论 |
15% | 16% | 高 | 低 | 高偏差(欠拟合) |
1% | 11% | 低 | 高 | 高方差(过拟合) |
15% | 30% | 高 | 高 | 高偏差 + 高方差(很差) |
0.5% | 1% | 低 | 低 | 理想情况 |
(1) 偏差过高(High Bias)
- 训练误差很高(模型在训练数据上表现不好)
- 验证误差与训练误差相近(模型泛化能力正常,但整体表现较差)
- 改进方法:
- 使用更复杂的模型(如更深的神经网络)
- 添加更多的特征
- 减少正则化(L2 / Dropout)
(2) 方差过高(High Variance)
- 训练误差很低(模型在训练数据上表现很好)
- 验证误差远高于训练误差(模型过拟合)
- 改进方法:
- 增加数据量
- 使用正则化(L2 正则化、Dropout)
- 减少特征数量
- 采用数据增强(Data Augmentation)
(3) 偏差和方差都高
- 训练误差和验证误差都很高,说明模型既不能很好拟合训练数据,也不能泛化到新数据。
- 改进方法:
- 选择更好的模型架构
- 收集更多的数据
- 改善特征工程
(4) 偏差和方差都低
- 训练误差和验证误差都很低,说明模型既拟合得很好,又泛化能力强,这是最理想的情况。
5. 关键总结
✅ 偏差(Bias):表示模型的拟合能力,偏差高表示欠拟合。
✅ 方差(Variance):表示模型的泛化能力,方差高表示过拟合。
✅ 高偏差问题:选择更复杂的模型、添加更多特征。
✅ 高方差问题:增加数据、使用正则化、减少特征数量。
✅ 理想模型:在训练数据和验证数据上都能取得较低误差,既不过拟合也不过欠拟合。
机器学习基础(Basic Recipe for Machine Learning)
介绍优化机器学习算法的一般步骤,即如何系统地优化模型,提升性能。
1. 机器学习优化的基本方法
在训练神经网络时,我们通常会遵循一个基本的优化步骤:
- 首先,检查偏差(Bias)是否过高
- 如果偏差高,说明模型拟合能力不足,即欠拟合。
- 解决方法:
- 选择更复杂的神经网络(增加隐藏层或神经元数)。
- 训练更长时间,提高收敛性。
- 使用更强的优化算法(如 Adam)。
- 选择不同的激活函数,提高表达能力。
- 当偏差降低后,检查方差(Variance)是否过高
- 如果方差高,说明模型过度拟合训练数据,泛化能力差。
- 解决方法:
- 获取更多训练数据(如果可行)。
- 使用正则化方法(L2 正则化、Dropout)。
- 采用数据增强(Data Augmentation)。
- 调整神经网络结构,避免过度复杂化。
- 不断优化,直到找到偏差低、方差低的模型
- 继续调整网络架构和训练策略,找到低偏差、低方差的最优模型。
2. 如何降低偏差?(应对欠拟合)
如果模型的偏差过高,意味着它无法充分学习训练数据。
此时,我们可以尝试以下方法:
(1) 增加模型复杂度
- 使用更深的神经网络(增加层数)。
- 增加隐藏单元数,提升表达能力。
(2) 训练更长时间
- 训练时间不足可能导致模型未完全收敛。
- 适当增加训练轮数(epochs),让模型学习更多特征。
(3) 使用更强的优化算法
- 例如:
- SGD(随机梯度下降)
- Adam(推荐)
- RMSprop
- Adam 通常是深度学习任务的默认选择,因为它自适应学习率,收敛更快。
(4) 选择更合适的激活函数
- ReLU(常用于深层神经网络)
- Leaky ReLU(避免 ReLU 死亡)
- Swish / GELU(某些情况下优于 ReLU)
3. 如何降低方差?(应对过拟合)
如果模型的方差过高,说明它对训练数据拟合得太好,但在新数据上泛化能力差。
此时,我们可以尝试以下方法:
(1) 增加训练数据
- 获取更多数据 是解决过拟合的最优方法之一。
- 但并不是所有情况下都能轻松获取更多数据。
(2) 使用正则化
- L2 正则化(权重衰减):对权重
W施加约束,使其不至于过大,降低模型复杂度。 - Dropout:随机丢弃部分神经元,减少对特定特征的依赖,提高泛化能力。
(3) 采用数据增强(Data Augmentation)
- 适用于计算机视觉任务,如:
- 图像翻转、旋转、缩放、加噪声
- 改变亮度、对比度
- 这样可以扩充数据集,减少过拟合。
(4) 选择更合适的神经网络结构
- 如果网络太深或隐藏单元太多,可能导致过拟合。
- ResNet、DenseNet 等架构 在深层网络中能有效缓解过拟合。
4. 偏差与方差的优化步骤
不同情况采用不同的优化方法:
偏差 / 方差 | 低方差(High Bias) | 高方差(High Variance) |
问题 | 欠拟合,模型太简单 | 过拟合,模型复杂 |
解决方案 | - 增加层数和隐藏单元 | - 获取更多数据 |
最终目标 | 让模型拟合训练数据 | 让模型泛化到新数据 |
5. 代码示例:优化机器学习模型
正则化(Regularization)
在深度学习中,过拟合(Overfitting)是一个常见问题。模型在训练集上表现很好,但在新数据上表现较差。
正则化(Regularization)是解决过拟合问题的关键方法之一,它可以防止模型过度拟合训练数据,提高泛化能力。
"正则化"(Regularization)这个词的本质含义是“让模型变得更加规则(regular)”,也就是说,正则化是为了让模型在训练时保持一定的约束,使其不会变得过于复杂或不稳定,从而提高泛化能力。
1. 为什么需要正则化?
- 深度学习模型往往包含大量参数,如果训练数据较少,模型可能过度拟合。
- 无法总是获取更多数据,数据收集和标注成本高,数据增强也有局限。
- 正则化能有效降低模型复杂度,减少对训练数据的依赖,提高泛化能力。
常见的正则化方法:
- L2 正则化(权重衰减)
- L1 正则化(稀疏性)
- Dropout(神经元随机失活)
- 数据增强(Data Augmentation)
本节主要讲解L2 正则化,它是最常见的正则化方法。
2. L2 正则化(L2 Regularization)
(1) L2 正则化的数学公式
L2 正则化是通过向损失函数中添加一项 L2 范数(欧几里得范数),约束权重 W,防止模型参数过大。

其中:
- 第一项 是普通损失函数(如均方误差 MSE、交叉熵)。
- 第二项 是 L2 正则化项,其中:
λ是正则化系数,控制正则化强度。||W||^2是权重的平方和(弗罗贝尼乌斯范数,计算的是它的元素平方和)。
(2) 为什么 L2 正则化可以减少过拟合?
- L2 正则化 抑制权重
W过大,防止模型学习过于复杂的模式。 - 训练过程中,模型不会过度依赖单个特征,而是更均匀地学习数据模式。
- 结果是更简单的决策边界,提高泛化能力。
3. 如何在神经网络中实现 L2 正则化?
在神经网络的反向传播(Backpropagation)过程中,我们对权重 W 的更新公式如下:

- 额外的
λ/m * W[l]使得 W 逐渐减小,防止权重过大。 - 这就是 L2 正则化为什么又被称为 权重衰减(Weight Decay),它在每次梯度更新时都会让权重变小。
4. L1 正则化 vs. L2 正则化
除了 L2 正则化,还有 L1 正则化(Lasso Regularization),它使用 |W| 而不是 W^2。
L1 正则化:

对比 L1 和 L2 正则化
特性 | L1 正则化 | L2 正则化 |
权重影响 | 使权重变稀疏(部分权重变 0) | 使权重整体变小,但不会变 0 |
适用场景 | 特征选择(自动去掉不重要特征) | 适用于大多数深度学习任务 |
计算成本 | 相对较高 | 计算简单,常用 |
实际应用:
- L1 正则化适用于特征选择,比如在高维数据中去掉不重要的特征。
- L2 正则化是深度学习的默认选择,因为它可以有效减少过拟合。
5. 如何选择 L2 正则化系数 λ?
- λ 太小:几乎没有正则化作用,模型仍然可能过拟合。
- λ 适中:可以防止过拟合,提高泛化能力。
- λ 太大:可能导致模型欠拟合,无法学习复杂模式。
一般来说,λ 的选择需要使用验证集进行调整:
- 可以使用交叉验证(Cross-Validation)选择最优 λ。
- 常见的 λ 取值范围:
0.0001 ~ 0.1,但具体值依赖于数据集。
为什么正则化有利于预防过拟合呢?(Why regularization reduces overfitting?)
L2 正则化(权重衰减)可以减少过拟合的核心原因是 它限制了权重 W 的大小,防止模型对训练数据记忆过度,而是学习更通用的特征。较小的 W 会降低神经元的影响,使模型趋向于更简单的决策边界,从而提升泛化能力。此外,正则化会让激活函数 z = W·X 主要处于线性区域,避免学习过于复杂的非线性模式,这进一步减少了模型对训练数据的过度拟合。因此,L2 正则化可以有效降低方差问题,使模型在测试数据上表现更稳定、更具泛化能力。
dropout 正则化(Dropout Regularization)
除了 L2 正则化,Dropout(随机失活) 也是一种非常实用的正则化方法,用于减少神经网络的过拟合。
本节我们将直观理解 Dropout 的工作原理,并介绍如何在训练和测试阶段正确使用它。
1. Dropout 的基本概念
(1) 什么是 Dropout?
Dropout 是一种随机去除(失活)神经网络部分神经元的方法,以降低模型复杂度,从而防止过拟合。
- 在训练过程中,神经网络的每个神经元都有一定概率被“丢弃”(失活),不会参与当前样本的训练。
- 在测试过程中,不使用 Dropout(即保留所有神经元)。
(2) 为什么 Dropout 能减少过拟合?
Dropout 的核心思想是模拟“集成学习”:
- 在训练过程中,每次迭代时网络结构都不一样,相当于训练多个不同的子网络。
- 这使得单个神经元不能过度依赖特定的特征,必须学会更加通用的表示。
- 结果是:网络更具鲁棒性,更能泛化到新数据,降低过拟合风险。
2. Dropout 的工作原理
(1) Dropout 训练过程
在训练时,Dropout 通过随机删除(失活)部分神经元,减少模型对特定神经元的依赖。
步骤:
- 为每个神经元生成一个随机数:
- 设定 keep-prob(保留概率),如
0.8(表示 80% 的神经元被保留,20% 被删除)。 - 生成一个随机矩阵
D,其中D[i, j] = 1的概率为keep-prob,0的概率为1 - keep-prob。
- 用
D乘以A(激活值):
A[l] = A[l] * D[l]- 这会将
D中等于 0 的神经元对应的A[l]设为 0,即这些神经元被“删除”。
- 缩放激活值:
A[l] = A[l] / keep-prob- 目的是保证训练和测试阶段的激活值分布一致。
(2) Dropout 在测试过程
- 测试阶段不使用 Dropout
- 不会随机失活神经元
- 直接用完整的神经网络进行前向传播
- 由于训练时已经对
A[l]进行了keep-prob缩放,测试时不需要额外调整。
3. Dropout 与 L2 正则化的对比
L2 正则化(权重衰减) | Dropout(随机失活) | |
作用原理 | 限制权重 过大 | 随机去掉部分神经元 |
作用目标 | 平滑决策边界,减少过拟合 | 降低神经元依赖性,提高泛化能力 |
是否增加训练时间 | 否 | 是(每次前向传播都不同) |
是否影响推理(测试) | 影响(缩小权重值) | 不影响(测试时不使用 Dropout) |
一般来说:
- L2 正则化 适用于防止参数过大,使模型平滑。
- Dropout 更适用于深度神经网络,避免神经元过度依赖,提高模型鲁棒性。
4. 关键总结
✅ Dropout 是一种正则化方法,随机丢弃部分神经元来防止过拟合。
✅ 训练阶段,每个神经元有一定概率被“失活”,测试阶段则不进行 Dropout。
✅ Dropout 迫使神经元学会更通用的特征,减少对特定神经元的依赖。
✅ 它类似于“集成学习”,相当于训练多个子网络并进行平均。
✅ 在 Keras / TensorFlow 中可以直接使用 Dropout() 层,非常方便。
理解 dropout(Understanding Dropout)
(1) Dropout 如何减少过拟合?
在训练过程中,Dropout 会随机移除一部分神经元,强迫网络在每次迭代时使用不同的子网络进行学习。这带来的几个重要影响:
- 防止神经元过度依赖某些特定特征,使得模型更加鲁棒(稳健)。
- 类似于训练多个子模型(Ensemble Learning),最终的模型等效于多个神经网络的平均。
- 减少了神经网络的自由度,降低了参数数量,减少了过拟合风险。
在上图中:
- 左侧:完整神经网络(无 Dropout)
- 右侧:Dropout 后部分神经元被随机失活
➡ Dropout 使网络每次训练都不同,减少了模型的复杂性,提高了泛化能力。
(2) Dropout 和 L2 正则化的关系
从数学角度来看,Dropout 产生的效果类似于 L2 正则化(权重衰减):
- 在 Dropout 过程中,每个神经元的输入都有概率被置零,使得神经元的输出值变小。
- 这与 L2 正则化通过限制
W的大小来抑制过拟合的效果相似。
不同点:
- L2 正则化 逐步收缩权重,使其变小,限制模型复杂度。
- Dropout 直接让部分神经元不工作,降低对特定神经元的依赖,提高模型的鲁棒性。
➡ 可以理解为 Dropout 是“动态的 L2 正则化”,每次训练都会重新选择哪些神经元失活,使模型更具泛化能力。
(3) 训练和测试阶段的不同
- 训练阶段:随机丢弃神经元,并缩放激活值
A[l] = A[l] / keep-prob。 - 测试阶段:不使用 Dropout,使用完整网络进行预测。
(4) 什么时候使用 Dropout?
- 适用于深度网络,特别是计算机视觉、自然语言处理等高维数据任务。
- 如果数据量很大,过拟合较少,可以减少或不使用 Dropout。
- 在高参数层(如隐藏层)使用较强的 Dropout,在输入层和输出层使用较弱的 Dropout 或不使用 Dropout。
其他正则化方法(Other regularization methods)
除了 L2 正则化和 Dropout 之外,还有一些其他正则化方法可以帮助减少神经网络中的过拟合,以下是两种常用的方法:数据扩增 和 Early Stopping。
1. 数据扩增(Data Augmentation)
(1) 什么是数据扩增?
数据扩增是通过人为地生成更多的训练样本来增加训练数据的多样性,常用的方法包括旋转、平移、缩放、翻转等技术。它的目的是通过增加数据集的多样性来避免过拟合。
举个例子:
- 假设你正在训练一个猫咪图片分类器,通过水平翻转图片,你就可以将原来的图片变成一张新的图片,这样训练集就增加了一倍。
- 其他扩增方法还包括随机裁剪、旋转图片、调整亮度等。
(2) 如何应用数据扩增?
在计算机视觉任务中,数据扩增方法非常常见,可以让模型学习到更多变种的输入数据。通过这些方法,模型可以在不增加大量额外数据的情况下,有效地增加训练集的大小,减少过拟合。
数据扩增的一些常见方法:
- 水平翻转
- 旋转、缩放、裁剪
- 调整颜色和亮度
- 添加噪声或失真
2. Early Stopping(提前停止)
(1) 什么是 Early Stopping?
Early Stopping 是一种防止过拟合的策略,它通过监控验证集的误差来决定何时停止训练,从而避免模型在训练集上过度拟合。
工作原理:
- 在训练过程中,我们会监控验证集的误差(比如交叉验证误差或验证集的损失)。
- 一开始,随着训练的进行,验证集误差通常会逐步下降,但在某个时刻,它会停止下降并开始上升。
- Early Stopping 会在验证集误差开始上升之前停止训练,避免模型在训练集上过拟合。
(2) Early Stopping 的作用和实现
- 效果:通过提前停止训练,我们可以避免过拟合,因为训练过程会在验证集误差开始增加时停止。
- 优势:这种方法不需要额外的计算代价,也不需要像 L2 正则化那样调整超参数。
- 缺点:Early Stopping 会提前停止训练,可能无法达到最小的训练误差,因为训练误差的最小值往往出现在模型接近过拟合的时刻。
(3) Early Stopping 的优缺点
- 优点:避免了过拟合,且不需要调整正则化参数,节省计算资源。
- 缺点:它可能停止在训练误差未最小化时,从而导致某些模型性能未得到充分训练。
3. 对比 L2 正则化与 Early Stopping
方法 | 描述 | 优点 | 缺点 |
L2 正则化 | 通过对权重进行惩罚来减少模型复杂度。 | 控制权重大小,避免过拟合。 | 需要调整超参数,计算开销较大。 |
Early Stopping | 通过监控验证集误差来决定何时停止训练。 | 简单有效,不需要额外的超参数调整。 | 可能停止在误差未达到最小值时。 |
标准化输入(Normalizing inputs)
1. 为什么要归一化输入特征?
归一化输入是神经网络训练中的一个关键步骤,能帮助加速训练并提高模型的收敛速度。通过将每个特征的数值标准化,我们可以避免某些特征的取值范围过大,从而导致梯度下降在训练过程中更新不平衡,影响训练效率。
(1) 归一化的步骤
归一化通常包括两个步骤:
- 零均值化:将每个特征的均值移到0。
- 归一化方差:将每个特征的方差调整为1。
(2) 如何进行零均值化和归一化方差?
零均值化:将每个输入特征的值减去该特征的均值,得到零均值的特征。
归一化方差:将每个特征的值除以该特征的标准差,使得所有特征的方差变为1。
注意:对于测试集,同样需要使用训练集计算得到的均值 μ 和标准差 σ 来进行归一化,而不是单独计算测试集的均值和方差。
2. 归一化的直观理解
(1) 非归一化特征的代价函数
假设输入特征的取值范围差异很大,例如特征 x1 的取值范围为 1 到 1000,而特征 x2 的取值范围为 0 到 1。那么,参数 w1 和 w2 的取值范围会非常不同,导致代价函数 J(w, b) 的形状呈现一个非常狭长的碗状(长条形状)。这种代价函数会使得梯度下降法的收敛过程非常慢,因为梯度下降的步长必须非常小才能逐步逼近最小值。
(2) 归一化后的代价函数
如果对所有输入特征进行归一化,使得它们的均值为 0,方差为 1,那么所有特征的取值范围将更加一致。这时,代价函数的形状会更对称、更接近球形,梯度下降法可以更快地收敛,因为它不再需要非常小的步长,优化过程变得更加高效。
(3) 优化过程的简化
- 非归一化特征:会产生非常狭长的代价函数,需要小步长才能有效收敛。
- 归一化特征:使得代价函数接近球形,优化过程更直接且高效,步长可以更大,从而加速梯度下降。
3. 归一化的实际应用
(1) 不同范围的特征
如果输入特征的范围差异很大,比如有的特征从 0 到 1,有的从 1 到 1000,归一化是必需的。否则,梯度下降在优化时会受到影响,导致收敛速度变慢。
(2) 相似范围的特征
如果输入特征的取值范围相似,比如特征 x1 范围在 0 到 1 之间,x2 范围在 -1 到 1 之间,那么归一化就不那么重要,但它依然有助于训练的稳定性和效率。
梯度消失/梯度爆炸(Vanishing / Exploding gradients)
神经网络的权重初始化(Weight Initialization for Deep Networks)
梯度的数值逼近(Numerical approximation of gradients)
梯度检验(Gradient checking)
梯度检验应用的注意事项(Gradient Checking Implementation Notes)
下一篇