超参数、验证集和K-折交叉验证
- 本文首发自公众号:RAIS
前言
本系列文章为 《Deep Learning》 读书笔记,可以参看原书一起阅读,效果更佳。
超参数
- 参数:网络模型在训练过程中不断学习自动调节的变量,比如网络的权重和偏差;
- 超参数:控制模型、算法的参数,是架构层面的参数,一般不是通过算法学习出来的,比如学习率、迭代次数、激活函数和层数等。
与超参数对比的概念是参数,我们平时训练网络所说的调参,指的是调节 超参数。超参数的确定方法一般是凭借经验,或者类似问题的参数迁移。
问题来了,为啥超参数不通过学习确定?这是因为这个参数不那么好优化,并且稍不留神通过学习方法去优化就可能导致过拟合。你可能认为模拟人的调参过程,进行超参数的调节不就好了,当然这是可以的,超参数也不是完全不可以用程序优化的,但是现有的理论还不成熟,还没有理论去有效的指导实践,这还是一个新兴领域,因此还有许多工作要做,很多情况下是凭经验,凭直觉进行优化的,算法表现并不好。
我们知道,更高次的多项式和权重衰减参数设定 λ=0 总是能更好的拟合,会过拟合,对于这个问题,我们会考虑用验证集的方法,验证集在我们前文《人工智能二分类问题》中提到过。
验证集
验证集是用来训练超参数的,是用来给网络提供反馈的。我们用训练集去训练一个网络模型,训练出的参数固定下来,然后将验证集的数据应用到这个模型上,会得到偏差,我们根据这个偏差,调整超参数,然后重新去训练网络,重复迭代一定的次数,会调节出一个超参数还不错的网络,基于这个超参数训练出的模型,可以最终到测试集合上验证,最终确定在测试集上表现如何。下面举个例子:
这是之前在《人工智能二分类问题》中的一张图,我们看到验证损失在迭代 4 次之后大幅上升,这就是由于我们训练次数迭代过多导致的,迭代次数这个超参数设置的不合理,因此我们更改迭代次数为 4 次。这就是根据验证集调节超参数的一个例子。
数据量小,训练集:验证集:测试集=6:2:2,数据量足够大,训练集:验证集:测试集=98:1:1。这算是一个经验值吧。
K-折交叉验证
我们在之前的 《预测房价》 问题中有提到过交叉验证这个方法,这个方法用于解决的问题就是数据量太小的问题,而导致的对网络测试误差估计不准的问题,K-折交叉验证 是其中最常见的。
从上图中,我们可以清楚的看到K-折交叉验证的方法具体是怎么做的。由于数据量不够大,因此我们把数据分为 K 份,循环 K 次,每次分别选取其中的一份作为测试集,这样根据我们训练出的网络,我们可以分别求出每一次的测试误差,用这 K 个测试误差求其平均值,我们就估计其为这个网络的测试误差。
总结
我们本篇文章介绍了参数和超参数的区别,调参指的是调节超参数,并且介绍了在数据量较小的情况下如何如何去估计测试误差。
- 本文首发自公众号:RAIS
超参数、验证集和K-折交叉验证的更多相关文章
- cross_val_score 交叉验证与 K折交叉验证,嗯都是抄来的,自己作个参考
因为sklearn cross_val_score 交叉验证,这个函数没有洗牌功能,添加K 折交叉验证,可以用来选择模型,也可以用来选择特征 sklearn.model_selection.cross ...
- 机器学习--K折交叉验证和非负矩阵分解
1.交叉验证 交叉验证(Cross validation),交叉验证用于防止模型过于复杂而引起的过拟合.有时亦称循环估计, 是一种统计学上将数据样本切割成较小子集的实用方法. 于是可以先在一个子集上做 ...
- sklearn的K折交叉验证函数KFold使用
K折交叉验证时使用: KFold(n_split, shuffle, random_state) 参数:n_split:要划分的折数 shuffle: 每次都进行shuffle,测试集中折数的总和就是 ...
- 小白学习之pytorch框架(7)之实战Kaggle比赛:房价预测(K折交叉验证、*args、**kwargs)
本篇博客代码来自于<动手学深度学习>pytorch版,也是代码较多,解释较少的一篇.不过好多方法在我以前的博客都有提,所以这次没提.还有一个原因是,这篇博客的代码,只要好好看看肯定能看懂( ...
- 小白学习之pytorch框架(6)-模型选择(K折交叉验证)、欠拟合、过拟合(权重衰减法(=L2范数正则化)、丢弃法)、正向传播、反向传播
下面要说的基本都是<动手学深度学习>这本花书上的内容,图也采用的书上的 首先说的是训练误差(模型在训练数据集上表现出的误差)和泛化误差(模型在任意一个测试数据集样本上表现出的误差的期望) ...
- k折交叉验证
原理:将原始数据集划分为k个子集,将其中一个子集作为验证集,其余k-1个子集作为训练集,如此训练和验证一轮称为一次交叉验证.交叉验证重复k次,每个子集都做一次验证集,得到k个模型,加权平均k个模型的结 ...
- K折-交叉验证
k-折交叉验证(k-fold crossValidation):在机器学习中,将数据集A分为训练集(training set)B和测试集(test set)C,在样本量不充足的情况下,为了充分利用数据 ...
- 偏差(bias)和方差(variance)及其与K折交叉验证的关系
先上图: 泛化误差可表示为偏差.方差和噪声之和 偏差(bias):学习算法的期望预测与真实结果(train set)的偏离程度(平均预测值与真实值之差),刻画算法本身的拟合能力: 方差(varianc ...
- (数据挖掘-入门-6)十折交叉验证和K近邻
主要内容: 1.十折交叉验证 2.混淆矩阵 3.K近邻 4.python实现 一.十折交叉验证 前面提到了数据集分为训练集和测试集,训练集用来训练模型,而测试集用来测试模型的好坏,那么单一的测试是否就 ...
- S折交叉验证(S-fold cross validation)
S折交叉验证(S-fold cross validation) 觉得有用的话,欢迎一起讨论相互学习~Follow Me 仅为个人观点,欢迎讨论 参考文献 https://blog.csdn.net/a ...
随机推荐
- 2、【Spark】Spark环境搭建(集群方式)
Spark集群方式搭建结构如图所示,按照主从方式.
- pika使用报错queue_declare() missing 1 required positional argument: 'queue'
报错如下截图,使用pika的版本太高导致,重新安装pika==0.10.0解决.
- Java对接微信登录
今天我们来对接微信开放平台的网站应用登录 首先上文档链接:https://developers.weixin.qq.com/doc/oplatform/Website_App/WeChat_Login ...
- jdbc Template 存储过程 返回多个结果 ,out 输出参数
public ReportVo getReport() { //执行存储过程 ReportVo reportVo=jdbcTemplate.execute(new CallableStatementC ...
- Golang 使用Protocol Buffer 案例
目录 1. 前言 2. Protobuf 简介 2.1 Protobuf 优点 2.2 Protobuf 缺点 2.3 Protobuf Golang 安装使用 3. Protobuf 通讯案例 3. ...
- 使用veloticy-ui生成文字动画
前言 最近要实现一个类似文字波浪线的效果,使用了velocity-ui这个动画库,第一个感觉就是使用简单,代码量少,性能优异,在此简单介绍一下使用方法,并实现一个看上去不错的动画.具体使用方法可以点击 ...
- rest framework serializer
串行器 扩大串行的用处是什么,我们想地址.然而,这不是一个简单的问题,它会采取一些严重的设计工作. -罗素基思-马吉,Django的用户组 串行器允许诸如查询集和模型实例复杂的数据转换为原生的Pyth ...
- Spring Boot从入门到精通(九)整合Spring Data JPA应用框架
JPA是什么? JPA全称Java Persistence API,是Sun官方提出的Java持久化规范.是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中. ...
- Vue2.0 【第一季】第2节 v-if v-else v-show 指令
目录 Vue2.0 [第一季]第2节 v-if v-else v-show 指令 第二节 v-if v-else v-show 指令 2.1 v-if指令.v-else指令: 2.2 v-show的使 ...
- c 将年月日转化为星期
/*得到年月日转化为星期几*/ LOCAL ulong_t DateWeekGet(ulong_t year,ulong_t month,ulong_t day) { ulong_t c = ; ul ...