Machine learning 神经网络如何学习函数而不是记忆它们?
在一个课堂项目中,我设计了一个近似sin(x)的神经网络,但最终得到的是一个神经网络,它只记住了我给出的数据点上的函数。我的NN接受批量大小为200的x值。每个x值乘以200个不同的权重,映射到我第一层的200个不同神经元。我的第一个隐藏层包含200个神经元,每一个都是批次中x值的线性组合。我的第二个隐藏层也包含200个神经元,我的损失函数是在第二层的200个神经元和输入映射到的200个sin(x)值之间计算的 问题是,我的神经网络完全“近似”sin(x),损失为0,但我知道它不会推广到其他数据点Machine learning 神经网络如何学习函数而不是记忆它们?,machine-learning,neural-network,artificial-intelligence,Machine Learning,Neural Network,Artificial Intelligence,在一个课堂项目中,我设计了一个近似sin(x)的神经网络,但最终得到的是一个神经网络,它只记住了我给出的数据点上的函数。我的NN接受批量大小为200的x值。每个x值乘以200个不同的权重,映射到我第一层的200个不同神经元。我的第一个隐藏层包含200个神经元,每一个都是批次中x值的线性组合。我的第二个隐藏层也包含200个神经元,我的损失函数是在第二层的200个神经元和输入映射到的200个sin(x)值之间计算的 问题是,我的神经网络完全“近似”sin(x),损失为0,但我知道它不会推广到其他数据
在设计这个神经网络时,我做错了什么?我如何避免记忆,而是设计我的神经网络来“学习”数据中的模式?首先,我认为近似sin(x)是一个伟大的项目。如果你能分享这个片段或一些额外的细节,这样我们就可以找出确切的问题,那就太好了。 然而,我认为问题在于,您过度拟合了数据,因此无法很好地概括其他数据点 一些可能有用的技巧
请记住,在训练集上,0损失或100%准确率通常不是很好。这与任何机器学习算法都是一样的。您有一个数据集,在此基础上尝试学习实际生成数据的“函数”
f(x)
。在实际数据集中,不可能从数据中获得原始函数,因此我们使用g(x)
来近似它
任何机器学习算法的主要目标都是使用函数g(x)
尽可能最好地预测看不见的数据
给定一个数据集D
,您始终可以训练一个模型,该模型将完美地对所有数据点进行分类(您可以使用hashmap在训练集上获得0个错误),但这是过度拟合或记忆
为了避免这种情况,您自己必须确保模型不会记忆和学习函数。有几件事是可以做的。我正试图以一种非正式的方式(通过链接)把它们写下来
培训、验证、测试
如果您有足够大的数据集,请使用训练、验证和测试拆分。将数据集拆分为三部分。培训、验证和测试通常分别为60%、20%和20%。(这些数字可能根据需要而有所不同,如果数据不平衡,请检查如何在每次拆分中保留类别比率)。接下来,忘记测试分区,把它放在安全的地方,不要碰它。您的模型将使用“训练”分区进行训练。训练模型后,使用验证集评估模型的性能。然后为您的模型选择另一组超参数配置(例如隐藏层数量、学习算法、其他参数等),然后再次训练模型,并根据验证集进行评估。对几个这样的模型继续这样做。然后选择得到最佳验证分数的模型
这里的验证集的作用是检查模型学到了什么。如果模型过拟合,那么验证分数将非常糟糕,因此在上述过程中,您将丢弃那些过拟合模型。但是请记住,虽然您没有直接使用验证集来训练模型,但验证集是间接用于选择模型的
根据验证集选择最终模型后。现在拿出你的测试集,就像你刚从现实生活中得到了一个新的数据集,这是从来没有人见过的。此测试集上的模型预测将表明您的模型“学习”得有多好,因为它现在正试图预测从未见过(直接或间接)的数据点
关键是不要返回并根据测试分数调整模型。这是因为一旦您这样做,测试集将开始对您的模式做出贡献
交叉验证和引导抽样
另一方面,如果数据集很小。你可以使用,或者。这些想法是相似的。例如,对于k-fold交叉验证,如果k=5
,则将数据集拆分为5
部分(也要注意分层抽样)。让我们给零件命名a、b、c、d、e
。使用分区[a、b、c、d]
进行训练并仅在[e]
上获得预测分数。接下来,使用分区[a、b、c、e]
,仅使用[d]
上的预测分数,并继续5次,每次仅保留一个分区,并使用其他4个分区训练模型。在此之后,取这些分数的平均值。这表明,如果模型看到新数据,它可能会执行。这也是一个很好的做法,这样做多次,并执行平均。例如,对于较小的数据集,执行10次10倍交叉验证,这将给出相当稳定的分数(取决于数据集),这将指示预测性能
引导采样与此类似,但您需要从数据集中采样相同数量的数据点(取决于数据点),并使用此样本进行训练。此集合将重复一些数据点(因为它是带有替换的样本)。然后使用训练数据集中缺失的数据点来评估模型。多次执行此操作并平均性能
其他人
其他方法是在分类器代价函数本身中加入正则化技术。例如,在强制条件中,决策边界保持t之间的“裕度”或间隙