青岛房产网站,东莞网络营销外包公司,大学生做的美食网站,app开发公司的联系方式专栏#xff1a;神经网络复现目录
深度学习神经网络基础知识(一)
本文讲述神经网络基础知识#xff0c;具体细节讲述前向传播#xff0c;反向传播和计算图#xff0c;同时讲解神经网络优化方法#xff1a;权重衰减#xff0c;Dropout等方法#xff0c;最后进行Kaggle实…专栏神经网络复现目录
深度学习神经网络基础知识(一)
本文讲述神经网络基础知识具体细节讲述前向传播反向传播和计算图同时讲解神经网络优化方法权重衰减Dropout等方法最后进行Kaggle实战具体用一个预测房价的例子使用上述方法。
文章部分文字和代码来自《动手学深度学习》 文章目录深度学习神经网络基础知识(一)模型选择、欠拟合和过拟合1. 训练误差和泛化误差2. 模型选择2.1 验证集2.2 K折交叉验证3. 过拟合和欠拟合3.1 定义3.2 模型复杂度对拟合情况的影响3.3 解决方法指路第二节模型选择、欠拟合和过拟合
1. 训练误差和泛化误差
训练误差training error指的是模型在训练数据集上表现出的误差。训练误差通常会随着训练次数的增加而逐渐降低直到收敛到一个稳定的状态。
泛化误差generalization error指的是模型在测试数据集或真实环境中表现出的误差也就是说它是指模型对新数据的预测能力。泛化误差的大小取决于许多因素包括模型的复杂度、训练数据集的大小和质量、模型选择和超参数调整等。泛化误差越小说明模型的泛化能力越好即对新数据的预测能力越强。 举个例子说明 假设我们有一个分类问题要用一个神经网络将一张图片分为猫和狗两类。我们有一组带标签的训练集来训练这个网络训练集中有很多猫和狗的图片。 训练误差在训练过程中我们用训练集的一部分数据来训练网络每一迭代会计算损失函数并且通过反向传播算法更新网络参数使得模型对训练集的数据拟合得更好。训练误差就是这个模型在训练集上的误差即模型对训练集的数据拟合程度。 例如如果我们训练模型100个epoch迭代次数每个epoch用训练集中的所有数据训练一遍并在每个epoch的结束时计算模型在训练集上的准确率。如果训练集中有1000张猫和1000张狗的图片那么训练误差就是模型在这2000张图片上的分类准确率。 泛化误差在训练过程中我们通过训练集来更新模型的参数让模型在训练集上的表现不断提升。然而我们真正关心的是模型对于新数据的泛化能力即模型对于不在训练集中的数据的分类能力。泛化误差就是模型在新数据上的误差它是我们关心的主要指标。 例如我们在训练集上训练了一个分类器准确率达到了90%。但是当我们将它应用到新的数据集时发现它的准确率只有70%。这意味着模型出现了过拟合它在训练集上表现很好但在新数据上表现不佳。在这种情况下我们需要采取一些措施来降低泛化误差例如增加数据集的大小加入正则化项等。 当我们有简单的模型和大量的数据时我们期望泛化误差与训练误差相近。 当我们有更复杂的模型和更少的样本时我们预计训练误差会下降但泛化误差会增大。 模型复杂性由什么构成是一个复杂的问题。 一个模型是否能很好地泛化取决于很多因素。 例如具有更多参数的模型可能被认为更复杂 参数有更大取值范围的模型可能更为复杂。 通常对于神经网络我们认为需要更多训练迭代的模型比较复杂 而需要早停early stopping的模型即较少训练迭代周期就不那么复杂。
我们很难比较本质上不同大类的模型之间例如决策树与神经网络的复杂性。 就目前而言一条简单的经验法则相当有用 统计学家认为能够轻松解释任意事实的模型是复杂的 而表达能力有限但仍能很好地解释数据的模型可能更有现实用途。 在哲学上这与波普尔的科学理论的可证伪性标准密切相关 如果一个理论能拟合数据且有具体的测试可以用来证明它是错误的那么它就是好的。 这一点很重要因为所有的统计估计都是事后归纳。 也就是说我们在观察事实之后进行估计因此容易受到相关谬误的影响。 目前我们将把哲学放在一边坚持更切实的问题。
本节为了给出一些直观的印象我们将重点介绍几个倾向于影响模型泛化的因素。 可调整参数的数量。当可调整参数的数量有时称为自由度很大时模型往往更容易过拟合。 参数采用的值。当权重的取值范围较大时模型可能更容易过拟合。 训练样本的数量。即使模型很简单也很容易过拟合只包含一两个样本的数据集。而过拟合一个有数百万个样本的数据集则需要一个极其灵活的模型。
2. 模型选择
在机器学习中我们通常在评估几个候选模型后选择最终的模型。 这个过程叫做模型选择。 有时需要进行比较的模型在本质上是完全不同的比如决策树与线性模型。 又有时我们需要比较不同的超参数设置下的同一类模型。
例如训练多层感知机模型时我们可能希望比较具有不同数量的隐藏层、不同数量的隐藏单元以及不同的激活函数组合的模型。 为了确定候选模型中的最佳模型我们通常会使用验证集。
2.1 验证集
验证集通常用于在训练过程中评估模型的性能以帮助选择最佳的超参数如学习率、正则化系数等。在训练过程中我们使用训练集训练模型并使用验证集评估模型的性能以便及时调整超参数和防止过拟合。
具体来说我们将训练数据集分成两部分训练集和验证集。训练集用于模型的训练而验证集用于模型的评估。训练集和验证集应该是互不重叠的即同一个样本不会同时出现在训练集和验证集中。
在训练过程中我们使用训练集训练模型并使用验证集评估模型的性能。通过比较训练误差和验证误差我们可以判断模型是否过拟合。如果训练误差很小但验证误差很大那么说明模型过拟合了反之如果训练误差和验证误差都很小那么说明模型的泛化能力很好。我们可以根据验证误差来选择最佳的超参数以提高模型的性能。
2.2 K折交叉验证
K折交叉验证用以解决训练数据较少我们并没有办法构建一个完整的验证集的问题是一种评估模型泛化能力的方法。
在K折交叉验证中我们首先将数据集分为K个大小相似的互斥子集每次选取其中一个子集作为验证集其余K-1个子集作为训练集进行模型训练和验证。重复K次每次选取不同的子集作为验证集最终将K次的验证结果取平均值作为模型的最终性能评估指标。这样可以尽可能地利用数据减小评估误差提高模型的稳定性和可靠性。
举个例子假设我们有1000条数据希望使用K折交叉验证来评估模型的性能。我们将数据分为10个子集每个子集包含100条数据。然后依次选取其中一个子集作为验证集其余9个子集作为训练集进行模型训练和验证得到第一轮的验证结果。接着选取另一个子集作为验证集其余9个子集作为训练集进行模型训练和验证得到第二轮的验证结果。以此类推重复10次最终将10次的验证结果取平均值作为模型的最终性能评估指标。
3. 过拟合和欠拟合
3.1 定义
过拟合overfitting指的是模型在训练集上的表现非常好但在测试集上表现不佳的现象。也就是说模型对训练集过度拟合把训练集的一些噪声也学习进去了导致在新的数据上表现不好。过拟合的主要原因是模型过于复杂参数过多导致模型能够完美地拟合训练集中的每一个数据点但却失去了对新数据的泛化能力。
欠拟合指的是模型在训练数据上的表现不够好即训练误差较高而测试误差也较高。通常是由于模型过于简单无法拟合数据中的复杂关系或者是数据集过小无法充分反映出数据的特征。
3.2 模型复杂度对拟合情况的影响 假设我们正在研究一个线性回归问题其中有一个因变量 y 和两个自变量 x1 和 x2。我们用训练集和测试集分别来训练和测试模型并使用均方误差MSE作为损失函数。 如果我们的模型是一个低阶多项式例如一次或二次多项式那么就有可能欠拟合。这意味着模型不能很好地拟合训练集数据甚至也不能很好地拟合测试集数据即使测试集数据是从相同分布中随机采样的。 如果我们的模型是一个高阶多项式例如 10 次多项式那么就有可能过拟合。这意味着模型可以在训练集上拟合得非常好但是不能很好地拟合测试集数据因为它学习了训练集数据的一些噪声。 模型复杂度是指模型可以表达的函数族的复杂程度即模型可以表示的函数的集合。模型复杂度对过拟合和欠拟合的影响非常重要。
当模型的复杂度过高时模型容易过拟合即在训练数据上表现良好但在测试数据上表现较差。因为模型过于复杂它可以拟合数据集中的任何细节和噪声从而导致模型对数据集中的噪声产生过度敏感无法很好地泛化到新数据集上。这种情况下可以通过减少模型的复杂度或者增加正则化项来解决过拟合问题。
当模型的复杂度过低时模型容易欠拟合即在训练数据和测试数据上表现都较差。因为模型太简单无法很好地拟合数据集中的规律和特征从而导致无法很好地泛化到新数据集上。这种情况下可以通过增加模型的复杂度或者增加特征数量来解决欠拟合问题。
3.3 解决方法
过拟合的解决方法后面几节我们会讲解其具体实现
数据增强Data Augmentation通过一些数据增强的手段如旋转、翻转、裁剪等方式增加数据集的多样性减少过拟合。正则化Regularization在损失函数中加入正则化项如L1正则化、L2正则化等方式惩罚权重过大的情况限制模型复杂度。提前停止Early Stopping在训练过程中通过监测验证集的表现及时停止训练避免过拟合。Dropout在神经网络中随机关闭一些神经元减少过拟合。
欠拟合的解决方法
增加模型复杂度通过增加模型的层数或者每层的神经元数量等方式增加模型的学习能力。减少正则化减少正则化的强度放宽对模型复杂度的限制。增加特征量对输入数据进行特征工程增加更多的特征量提高模型的学习能力。调整超参数例如学习率、batch size等超参数的调整可以影响模型的学习能力和学习速度。
指路第二节