为什么epoch太多会导致过拟合?

2023-12-23

我正在阅读《Python 深度学习》一书。 读完第 4 章“对抗过度拟合”后,我有两个问题。

  1. 为什么增加纪元数可能会导致过度拟合? 我知道增加纪元数将涉及更多的梯度下降尝试,这会导致过度拟合吗?

  2. 在对抗过拟合的过程中,准确率会降低吗?


我不确定您正在阅读哪本书,因此在我具体回答问题之前,一些背景信息可能会有所帮助。

首先,增加 epoch 的数量并不一定会导致过度拟合,但肯定会导致过度拟合。如果学习率和模型参数都很小,可能需要很多epoch才会导致可测量的过拟合。也就是说,进行更多培训是很常见的。

为了正确看待这个问题,重要的是要记住,我们最常使用神经网络来构建可用于预测的模型(例如,预测图像是否包含特定对象或下一个时间步骤中变量的值是多少) )。

我们通过迭代调整权重和偏差来构建模型,以便网络可以充当在输入数据和预测输出之间进行转换的函数。我们出于多种原因转向此类模型,通常是因为我们不知道函数是什么/应该是什么,或者函数太复杂而无法进行分析开发。为了使网络能够对如此复杂的功能进行建模,它本身必须能够高度复杂。虽然这种复杂性很强大,但也很危险!该模型可能变得非常复杂,以至于它可以非常精确地有效记住训练数据,但随后无法充当适用于训练集之外的数据的有效通用函数。 IE。它可能会过度拟合。

你可以把它想象成有点像某人(模型)通过一遍又一遍地烘焙水果蛋糕(训练数据)来学习烘焙——很快他们就能够在不使用食谱的情况下烘焙出美味的水果蛋糕(训练),但他们可能无法很好地烘烤海绵蛋糕(未见过的数据)。

回到神经网络!由于神经网络过度拟合的风险很高,因此深度学习工程师可以使用许多工具和技巧来防止过度拟合,例如使用 dropout。这些工具和技巧统称为“正则化”。

这就是为什么我们使用涉及测试数据集的开发和训练策略——我们假装测试数据是看不见的,并在训练期间对其进行监控。您可以在下图中看到这样的示例(形象信用 https://commons.wikimedia.org/wiki/File:2d-epochs-overfitting.svg)。大约 50 个 epoch 后,随着模型开始“记忆训练集”,测试误差开始增加,尽管训练误差仍保持在最小值(通常训练误差会继续改善)。

所以,回答你的问题:

  1. 允许模型继续训练(即更多时期)会增加权重和偏差被调整到模型在未见过的(或测试/验证)数据上表现不佳的风险。该模型现在只是“记住训练集”。

  2. 持续的 epoch 很可能会提高训练的准确性,但这并不一定意味着模型根据新数据做出的预测会准确——通常情况下它实际上会变得更糟。为了防止这种情况,我们使用测试数据集并在训练期间监控测试准确性。这使我们能够就模型对于未见过的数据是否变得更加准确做出更明智的决定。

我们可以使用一种称为提前停止,一旦测试精度在少数时期后停止提高,我们就停止训练模型。早期停止可以被认为是另一种正则化技术。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么epoch太多会导致过拟合? 的相关文章

随机推荐

  • std::regex -- 是否有一些需要链接的库?

    我收到以下代码的链接器错误 include
  • 如何在 Ruby 中输出尾随零? [复制]

    这个问题在这里已经有答案了 请考虑以下代码 class Book def initialize price price price end def book price puts Price price end end book1 Book
  • 点击隐藏选项卡时谷歌地图部分加载

    我使用 2 个选项卡 第一个用于显示列表 另一个用于显示地图 第一次加载页面时 默认显示 1 个选项卡 单击第二个选项卡时显示地图 但是当我单击列表选项卡并再次单击地图选项卡时 地图部分加载 这是我的 JAVASCRIPT 代码 docum
  • Visual Studio 参考和平台之间的冲突

    自从我将 C ASP Net 项目的目标框架升级到 4 6 1 后 我在构建过程中收到了很多冲突警告 50 多条消息 例如 考虑将程序集 System Runtime InteropServices RuntimeInformation C
  • 将 WHERE IN 子句添加到 JPA 规范

    我正在尝试实现受 IN 子句限制的搜索功能 我想实现具有过滤器限制的搜索实现 GetMapping find public Page
  • pandas dataframe滚动窗口与groupby

    我可以添加一个新列c这是最后两个值的总和b如下所示 df c df b rolling window 2 sum shift df a b c 0 1 3 NaN 1 1 0 NaN 2 0 6 3 0 3 1 0 6 0 4 0 0 6
  • 计算每个类别列的出现次数

    我正在尝试计算每个 SNP 名称的 iets 列中 Opp 的出现次数 最终我想将 Opp 的出现次数除以 df MM library data table df lt structure list SNP structure c 1L 1
  • 在 R markdown 中混合文本和引用

    是否可以在 R markdown 文档中混合常规文本和引用 使它们看起来如下 作者 2018 方法 目前 我已经尝试过 Author2018 Methods 这使 Author 2018 Methods 和 Author2018 Metho
  • ZF + 原则 2:重型模型类还是轻量级模型 + 服务层?

    我正在整合Zend框架 and 学说2 我正在发现服务层 现在我明白 我错了吗 我有两种可能的架构 A model 其中类包含域逻辑 即属性 getter setter 复杂方法 A 轻量化模型 其中类包含属性 getters setter
  • 如何将 Lua 与 .Net 集成

    要求是用户应该能够在文本框中添加 Lua 脚本 然后我需要检查用户是否添加了正确的 Lua 脚本 如果脚本正确 那么我需要运行该脚本 有人可以建议我一些代码吗 我尝试了以下操作 using Lua state new Lua state D
  • viewWillAppear 期间静态 UITableViewCell 更改未反映在显示中

    我正在使用一些静态UITableViewCell在情节提要中配置为显示一些设置信息 如果关闭其他设置之一 则应禁用其他一些单元格 为了使细胞进入适当的状态 在viewWillAppear我从 NSUserDefaults 读取设置 然后相应
  • 需要写入 Program File 文件夹的自更新 .NET 客户端应用程序

    如同 如果路径受保护 请请求 Windows Vista UAC 提升 https stackoverflow com questions 17533 request vista uac elevation if path is prote
  • 将列数据映射到值 (Oracle)

    我有一个 Oracle 数据库 并且有一个名为Car 我可以选择Mileage像这样的汽车 SELECT MILEAGE FROM CAR 这给了我 100 500 1000 etc 但是 我希望 1000 以上的值标记为High其余的为L
  • 如何在spaCy中强制使用某个标签?

    我正在使用 spaCy 3 0 0rc2 与定制模型 不幸的是 我的训练数据的连字符 较少 因此连字符经常被标记为NOUN 有什么方法可以强制某些tag or pos 以确保all the 令牌被标记为PUNCT 基本上我正在寻找一个像在这
  • 如何处理 AOSP 存储库同步上的curl clone.bundle 错误

    从 AOSP 下载 master 分支后 出现以下错误 curl 22 The requested URL returned error 404 Not Found Server does not provide clone bundle
  • 如何使用机器人框架在多个 Facebook 页面上使用同一个机器人

    我有几个 Facebook 页面 我想在每个页面上运行相同的机器人 我正在使用机器人框架 现在一页的一切都完美运行 如何关联多个页面 当您调用 Facebook Send API 时 您通过access token范围 您可以通过修改此访问
  • 递归调用函数对象

    如何从函数对象内部调用函数对象 看来我不能使用this 例子 class factorial public int operator int n if n 0 return 1 return n n 1 我该放在什么地方 include
  • 对于如何使用 VB.NET 在 ASP.NET 中创建按钮单击事件,为什么选择私有与受保护?

    我从来没有认真思考过一些事情 但我很好奇并且想了解实际的推理 在 ASP NET 中使用VB NET 您可以通过 2 种不同的方式定义连接按钮单击事件 到 ASP NET 服务器控件 出于本次对话的目的 通过按钮属性手动连接 这里不讨论 双
  • Mongoose 聚合 $match 与 ids 不匹配

    我想按 ids 显示产品 56e641d4864e5b780bb992c6 and 56e65504a323ee0812e511f2 并显示减去折扣后的价格 如果有 我可以使用聚合来计算最终价格 但这会返回集合中的所有文档 如何使其仅返回匹
  • 为什么epoch太多会导致过拟合?

    我正在阅读 Python 深度学习 一书 读完第 4 章 对抗过度拟合 后 我有两个问题 为什么增加纪元数可能会导致过度拟合 我知道增加纪元数将涉及更多的梯度下降尝试 这会导致过度拟合吗 在对抗过拟合的过程中 准确率会降低吗 我不确定您正在