深度学习中的验证集和超参数简介

2023-11-14

大多数机器学习算法都有超参数,可以设置来控制算法行为。超参数的值不是通过学习算法本身学习出来的(尽管我们可以设计一个嵌套的学习过程,一个学习算法为另一个学习算法学出最优超参数)。

在多项式回归示例中,有一个超参数:多项式的次数,作为容量超参数。控制权重衰减程度的λ是另一个超参数。

有时一个选项被设为学习算法不用学习的超参数,是因为它太难优化了。更多的情况是,该选项必须是超参数,因为它不适合在训练集上学习。这适用于控制模型容量的所有超参数。如果在训练集上学习超参数,这些超参数总是趋向于最大可能的模型容量,导致过拟合。

和训练数据相同分布的样本组成的测试集,它可以用来估计学习过程完成之后的学习器的泛化误差。其重点在于测试样本不能以任何形式参与到模型的选择中,包括设定超参数。基于这个原因,测试集中的样本不能用于验证集。因此,我们总是从训练集中构建验证集。特别地,我们将训练数据分成两个不相交的子集。其中一个用于学习参数。另一个作为验证集,用于估计训练中或训练后的泛化误差,更新超参数。用于学习参数的数据子集通常仍被称为训练集,尽管这会和整个训练过程用到的更大的数据集相混。用于挑选超参数的数据子集被称为验证集(validation set)。通常,80%的训练数据用于训练,20%用于验证。由于验证集是用来”训练”超参数的,尽管验证集的误差通常会比训练集误差小,验证集会低估泛化误差。所有超参数优化完成之后,泛化误差可能会通过测试集来估计。

交叉验证:将数据集分成固定的训练集和固定的测试集后,若测试集的误差很小,这将是有问题的。一个小规模的测试集意味着平均测试误差估计的统计不确定性,使得很难判断算法A是否比算法B在给定的任务上做的更好。当数据集有十万计或者更多的样本时,这不会是一个严重的问题。当数据集太小时,也有替代方法允许我们使用所有的样本估计平均测试误差,代价是增加了计算量。这些过程是基于在原始数据上随机采样或分离出的不同数据集上重复训练和测试的想法。最常见的是k-折交叉验证过程。将数据集分成k个不重合的子集。测试误差可以估计为k次计算后的平均测试误差。在第i次测试时,数据的第i个子集用于测试集,其它的数据用于训练集。带来的一个问题是不存在平均误差方差的无偏估计,但是我们通常会使用近似来解决。

目前超参数往往只能人工基于经验来设置,以及采用暴力枚举的方式来尝试以寻求最优的超参数。

所谓超参数,就是机器学习模型里面的框架参数,比如聚类方法里面类的个数,或者话题模型里面话题的个数等等,都称为超参数。它们跟训练过程中学习的参数(权重)是不一样的,通常是手工设定,不断试错调整,或者对一系列穷举出来的参数组合一通枚举(叫做网格搜索)。

常用的超参数:

(1)、learning rate:学习率决定了权值更新的速度,设置得太大会使结果超过最优值,太小会使下降速度过慢。学习率是指在优化算法中更新网络权重的幅度大小。学习率可以是恒定的、逐渐降低的、基于动量的或者是自适应的,采用哪种学习率取决于所选择优化算法的类型,如SGD、Adam、Adgrad、AdaDelta、RMSProp等算法。

(2)、weight decay(权值衰减):在实际应用中,为了避免网络的过拟合,必须对价值函数(cost function)加入一些正则项。在机器学习或者模式识别中,会出现overfitting,而当网络逐渐overfitting时网络权值逐渐变大,因此,为了避免出现overfitting,会给误差函数添加一个惩罚项,常用的惩罚项是所有权重的平方乘以一个衰减常量之后。其用来惩罚大的权值。weight decay的使用既不是为了提高收敛精确度也不是为了提高收敛速度,其最终目的是防止过拟合。在损失函数中,weight decay是放在正则项(regularization)前面的一个系数,正则项一般指示模型的复杂度,所以weight decay的作用是调节模型复杂度对损失函数的影响,若weight decay很大,则复杂的模型损失函数的值也越大。

(3)、momentum(动量):动量来源于牛顿定律,基本思想是为了找到最优加入”惯性”的影响。mementum是梯度下降法中一种常用的加速技术。总能得到更好的收敛速度。

(4)、learing rate decay:每次迭代的时候减少学习率的大小。

(5)、迭代次数:迭代次数是指整个训练集输入到神经网络进行训练的次数。当测试错误率和训练错误率相差较小时,可认为当前的迭代次数是合适的,否则需继续增大迭代次数,或调整网络结构。

(6)、权重初始化:在网络中,通常会使用小随机数来初始化各网络层的权重,以防止产生不活跃的神经元,但是设置过小的随机数可能生成零梯度网络。一般来说,均匀分布方法效果较好。

(7)、Dropout方法:作为一种常用的正则化方式,加入Dropout层可以减弱深层神经网络的过拟合效应。该方法会按照所设定的概率参数,在每次训练中随机地不激活一定比例的神经单元。该参数的默认值为0.5.

自动超参数优化算法:

(1)、网格搜索:如果有三个或更少的超参数时,常见的超参数搜索方法是网格搜索。对于每个超参数,使用者选择一个较小的有限值集去探索。然后,这些超参数笛卡尔乘积得到一组组超参数,网格搜索使用每组超参数训练模型。挑选验证集误差最小的超参数作为最好的超参数。

(2)、随机搜索:如果超参数较多,首先,我们为每个超参数定义一个边缘分布,在这些边缘分布上进行搜索。

以上内容主要摘自:《深度学习中文版》 和 网络资料整理。


GitHub: https://github.com/fengbingchun/NN_Test

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

深度学习中的验证集和超参数简介 的相关文章

  • 【直观详解】什么是正则化

    转自 https charlesliuyx github io 2017 10 03 E3 80 90 E7 9B B4 E8 A7 82 E8 AF A6 E8 A7 A3 E3 80 91 E4 BB 80 E4 B9 88 E6 98
  • Caffe可以直接对图像的像素进行分类吗?

    我想将图像的像素分类为 是街道 或 不是街道 我有一些训练数据KITTI数据集我看到 Caffe 有一个IMAGE DATA图层类型 标签以与输入图像大小相同的图像形式存在 除了 Caffe 之外 我解决这个问题的第一个想法是在应该分类的像
  • Caffe sigmoid交叉熵损失

    我正在使用 sigmoid 交叉熵损失函数来解决多标签分类问题 如下所示本教程 然而 在他们的教程结果和我的结果中 输出预测都在范围内 Inf Inf 而 sigmoid 的范围是 0 1 sigmoid 仅在反向传播中处理吗 也就是说 前
  • 如何编写带有预加载的caffe python数据层?

    如何编写异步数据层以在执行其他处理时预加载批次 有一些示例代码吗 谢谢 有多种方法可以实现您想要的目标 我将尝试在这里勾勒出一种选择 系统的总体视图是 你有n Loader异步加载数据并送入队列 然后该层读取batch size队列中的项目
  • 咖啡 | solver.prototxt值设置策略

    在 Caffe 上 我正在尝试实现一个用于语义分割的全卷积网络 我想知道是否有一个具体的策略来设置你的 solver prototxt 以下超参数的值 测试迭代器 测试间隔 迭代大小 max iter 这是否取决于您的训练集的图像数量 如果
  • Caffe Sigmoid交叉熵损失层损失函数

    我正在查看Caffe的代码Sigmoid 交叉熵损失层 https github com BVLC caffe blob master src caffe layers sigmoid cross entropy loss layer cp
  • PyCaffe中的layer模块在哪里定义

    我正在修改一个Caffe教程 http nbviewer jupyter org github BVLC caffe blob master examples pascal multilabel with datalayer ipynb实现
  • Caffe 模型为每个图像提供相同的输出

    我刚刚使用预定义的 prototxt 和 caffemodel 文件在 caffe 中加载了 alexnet 然而 将任何图像发送到模型都会返回与 fc7 层的输出相同的值 这是代码片段 net caffe Net alexnet trai
  • LMDB 文件以及它们如何用于 caffe 深度学习网络

    我对深度学习很陌生 在使用 caffe 深度学习网络时遇到一些问题 基本上 我没有找到任何文档来解释如何解决我现在正在处理的一系列问题 请让我先解释一下我的情况 我有数千张图像 我必须对它们进行一系列预处理操作 对于每个预处理操作 我必须将
  • Caffe的train.prototxt中平均值的顺序是什么?

    在我的咖啡馆里 train prototxt 我正在做一些输入数据转换 如下所示 transform param mirror true crop size 321 mean value 104 Red mean value 116 Blu
  • Caffe:如何通过代码获取`solver.prototxt`参数?

    我想访问solver prototxt参数如base lr 基础学习率 或weight decay来自Python代码 有什么方法可以从solver net目的 谢谢 根据本教程 http nbviewer jupyter org gith
  • Caffe 快照:.solverstate 与 .caffemodel

    训练网络时 每 N 次迭代拍摄的快照有两种形式 一个是 solverstate 文件 我想它就像它听起来的那样 存储损失函数和梯度的状态等 另一个是 caffemodel 文件 我知道它存储训练后的参数 如果您想要预训练的模型 caffem
  • caffe: **group** 参数是什么意思?

    我已阅读有关的文档group param group g 默认 1 如果 g gt 1 我们将每个过滤器的连接限制为输入的子集 具体地 将输入和输出通道分为g组 第i个输出组通道将仅与第i个输入组通道连接 但首先我不明白它们的确切含义 其次
  • 使用内置显卡,没有NVIDIA显卡,可以使用CUDA和Caffe库吗?

    使用内置显卡 没有 NVIDIA 显卡 可以使用 CUDA 和 Caffe 库吗 我的操作系统是 ubuntu 15 CPU为 Intel i5 4670 3 40GHz 4核 内存为12 0GB 我想开始学习深度学习 CUDA 适用于 N
  • Caffe 中的预测 - 异常:输入 blob 参数与网络输入不匹配

    我使用 Caffe 使用非常简单的 CNN 结构对非图像数据进行分类 我在尺寸为 n x 1 x 156 x 12 的 HDF5 数据上训练网络没有任何问题 但是 我在对新数据进行分类时遇到了困难 如何在不进行任何预处理的情况下进行简单的前
  • 如何在 Caffe 的网络中出现多次损失?

    如果我在网络中定义多个损失层 从这些末端到网络的开头是否会发生多个反向传播 我的意思是 他们真的是这样工作的吗 假设我有这样的事情 Layer1 Layer2 Layer n Layer cls1 bottom layer n top cl
  • Caffe 的 LSTM 模块

    有谁知道 Caffe 是否有一个不错的 LSTM 模块 我从 russel91 的 github 帐户中找到了一个 但显然包含示例和解释的网页消失了 以前是http apollo deepmatter io http apollo deep
  • 如何在 Caffe 中沿着通道分割 Blob

    我想在Caffe中分割Blob通道 这样我就可以分割一个Blob N c w h 分成两个大小相同的输出 Blob N c 2 w h 我上面描述的是非常笼统的 我实际上想做的是将一个两通道输入图像分离成两个不同的图像 一个进入卷积层 另一
  • 通过 Caffe 中的层提供数据的多种路径

    我想在 Caffe 中构建一个网络 其中传入的数据最初被分割 分别通过同一组层 最后使用 eltwise 层重新组合 此后 所有部件将作为一个斑点移动 除了学习的参数之外 数据并行移动的网络部分的层配置将是相同的 有没有一种方法可以在 Ca
  • 卷积 ImageNet 网络对于翻转图像具有不变性

    我正在使用深度学习 caffe 框架进行图像分类 我有一些有头像的硬币 有些是左向的 有些是右向的 为了对它们进行分类 我使用常见的方法 从预训练的 ImageNet 网络中获取权重和结构 该网络已经捕获了大量图像模式 并主要训练最后一层以

随机推荐

  • Springboot项目打瘦包(将依赖包放到jar包外)

    一般springboot项目我们不做任何配置的话 打包会包含很多的依赖 生成的包过大 动辄100M以上 往生产环境上传很慢 所以把所有用的jar包打到外部 这样生成的小包中只有自已开发的程序 基本可以控制在1M以内 效果甚好 首先把spri
  • How to set IE proxy using VB.NET

    Created by SharpDevelop User Ying Shen Date 2004 11 12 Time 11 16 To change this template use Tools Options Coding Edit
  • NumPy 高级索引

    NumPy 高级索引 NumPy 比一般的 Python 序列提供更多的索引方式 除了之前看到的用整数和切片的索引外 数组可以由整数数组索引 布尔索引及花式索引 整数数组索引 以下实例获取数组中 0 0 1 1 和 2 0 位置处的元素 i
  • 2020年华为杯第十七届中国研究生数学建模竞赛---回顾记录

    这次做一个复盘贴 刚刚参加完这次的华为杯数学建模 由于是2020级研究生所以允许跨校组队 所以选择的队友是两个外校的 沟通方面第一天至第三天每天在微信使用语音通话汇报一次进度 第四天至第五天腾讯会议共享桌面进行论文修改 比赛时间 2020年
  • 网络安全-反序列化漏洞简介、攻击与防御

    目录 简介 PHP序列化 Python序列化 攻击 PHP举例 Python举例 防御 参考 简介 各种语言都有反序列化漏洞 Java PHP Python等 序列化即将对象转化为字节流 便于保存在文件 内存 数据库中 反序列化即将字节流转
  • 帮你理解网关、ARP、IP、MAC、路由

    我发个简单形象的小故事 你一看就明白了 假设你叫小不点 本地主机 住在一个大院子 本地局域网 里 有很多邻居 网络邻居 门 口传达室有个看大门的李大爷 李大爷就是你的网关 当你想跟院子里的某个伙伴玩 只要你在院 子里大喊一声他的名字 pin
  • Linux发送接收邮件

    目录 一 实验 1 linux用户发送给linux中的其它用户 2 linux用户发送给外网用户 一 实验 1 linux用户发送给linux中的其它用户 1 使用命令 yum install y sendmail 安装sendmail软件
  • C++类的三大特性之继承

    目录 一 继承的概念与使用 lt 1 gt 什么是继承 lt 2 gt 如何使用 二 基类与派生类间的转换 三 继承的作用域 四 派生类的默认成员函数 lt 1 gt 构造函数 lt 2 gt 拷贝构造 lt 3 gt 赋值运算符重载 lt
  • Gradle DSL method not found: 'runProguard()'

    Gradle DSL method not found runProguard Android studio 本来刚升级studio到1 0的时候就想写这篇文章的 但是没空就没写了 好吧 今天把这个问题写下 因为很多同事也遇到这个问题 解决
  • 关于servlet的 url-pattern 配置

  • GD32F303移植ATH10温湿度模块

    目录 前期准备 移植准备 开始移植 ATH10 c ATH10 h main c 效果图 总结 前期准备 开发硬件 GD32F303RCT6开发板 开发平台 Keil5 网盘资料 见文章底部 移植准备 ATH10模块I2C驱动使用到us延时
  • 利用js将列表数据转换为树结构

    记录一下遇到过好多次的需求 重复写太恶心了 parent id 最顶层的默认父节点值 list 需要处理的列表数据 返回的数据为处理好的树结构数据 const dealTreeData parent id any list any gt c
  • 2017 iOS 启动页(Launch Screen Images)、图标(App Icon)尺寸大小

    启动页尺寸大小 Device Portrait Landscape size 12 9 iPad Pro 2048px 2732px 2732px 2048px 10 5 iPad Pro 1668px 2224px 2224px 1668
  • excel subtotal 函数(分类汇总)

    函数说明 返回列表中的分类汇总 语法 SUBTOTAL function num ref1 ref2 SUBTOTAL 函数语法具有以下参数 Function num 必需 数字 1 11 或 101 111 用于指定要为分类汇总使用的函数
  • 2021-10-30 关于ORACLE 19c DBA_JOBS不能自动执行 LAST_DATE为空 排查方式

    ORACLE DBA JOBS 相关报错解决方式 背景 在新创建的ORACLE 19c单实例数据库环境 恢复生产环境数据后 发现任务调度重启 重建仍不能自动进行调度 后发现DBA JOBS不会自动执行 NEXT DATE正常 LAST DA
  • 从输入URL到页面展示发生了什么?

    目录 1 查询缓存 2 DNS解析 3 建立TCP连接 3次握手 4 客户端发起http请求 5 服务器处理请求 6 服务器响应请求 7 浏览器解析html 8 断开TCP连接 4次挥手 1 查询缓存 从输入url按下回车后 我们进入了第一
  • allegro如何快设置快捷键旋转器件

    在Allegro PCB Editor环境中 设置 在命令栏输入下面命令并回车 funckey iangle 90 按空格以90度旋转选中的物体 funckey R iangle 45 按ctrl R以45度旋转选中的物体 此方法 关闭软件
  • TD添加IE8支持

    今天同事突然安装了IE8了 说TestDirector8 0在IE8 0下无法使用 于是在网上搜索 最后终于知道解决方法了 方法一 下载插件 安装TD自带的浏览器 通用 使用 进入TestDirector 单击Add ins Page 在新
  • 彻底解决Idea控制台的中文乱码问题

    一 出现问题 tomcat输入到idea控制台的信息出现中文乱码 二 解决方案 1 打开idea安装的目录 bin文件夹下 找到idea exe vmoptions和idea64 exe vmoptions两个文件 打开 2 将 Dfile
  • 深度学习中的验证集和超参数简介

    大多数机器学习算法都有超参数 可以设置来控制算法行为 超参数的值不是通过学习算法本身学习出来的 尽管我们可以设计一个嵌套的学习过程 一个学习算法为另一个学习算法学出最优超参数 在多项式回归示例中 有一个超参数 多项式的次数 作为容量超参数