一、过拟合、欠拟合及其解决方案

模型选择、过拟合和欠拟合

1.训练误差和泛化误差
训练误差:模型在训练数据集上表现出的误差。
泛化误差:模型在任意一个测试数据样本上表现出的误差的期望,并常常通过测试数据集上的误差来近似。
机器学习模型应关注降低泛化误差。

2.模型选择
(1)验证数据集:测试数据集、训练数据集之外的数据集,用于调参。
(2)K折交叉验证:一种常用方法,通常在训练数据不够的时候。指将所有数据(原始训练数据集)分割成K个不重合的子数据集,然后我们做K次模型训练和验证。每一次,我们使用一个子数据集验证模型,并使用其他K-1个子数据集来训练模型。在这K次训练和验证中,每次用来验证模型的子数据集都不同。最后,我们对这K次训练误差和验证误差分别求平均

3.过拟合和欠拟合
欠拟合:模型无法得到较低的训练误差。
过拟合:模型的训练误差远小于它在测试数据集上的误差。
两个重点因素
(1)模型复杂度:多项式拟合的目标是找到一个K阶多项式函数。多项式函数拟合也使用平方损失函数。特别地,一阶多项式函数拟合又叫线性函数拟合。模型复杂度过大,易过拟合过小,以欠拟合
(2)训练数据集大小:样本数过少时,易发生过拟合。泛化误差不会随训练数据集中样本数增加而增大。在计算资源允许的范围之内,通常希望增大训练数据集。

多项式函数拟合实验

1.初始化模型参数:n_train为训练样本数,n_test为测试样本数,poly_features为聚合特征(x,x2,x3)。

2.定义、训练和测试模型:semilogy函数(化度函数),用来方便观察训练误差和泛化误差的关系。

3.三阶多项式函数拟合(正常):输入为poly_features,训练到最后的时候,训练误差和泛化误差都达到一个比较小的水平。它们的值也一直是非常接近的。

4.线性函数拟合(欠拟合):输入改为features即x,最后训练和测试的误差都是在102的级别,没有达到很好的拟合效果,是一个欠拟合的现象。

5.训练样本不足(过拟合):输入的是poly_features,但是样本数只有2个(0,1)。最后训练误差达到比较低的水平,但测试误差还是在很高的水平(102)。

权重衰减

1.方法:权重衰减等价于L2范数正则化(regularization)。正则化通过为模型损失函数添加惩罚项使训练出的模型参数值较小,是应对过拟合的常用手段

2.L2范数正则化:L2范数惩罚项指的是模型权重参数每个元素的平方和与一个正的常数乘积。这种添加L2范数惩罚项来改变权重的方式,称为权重衰减。权重衰减通过惩罚绝对值较大的模型参数为需要学习的模型增加了限制,这可能对过拟合有效。

3.高维线性回归实验从零开始的实现:
(1)初始化模型参数
(2)定义L2范数惩罚项:(w2)求和,正数留在了后面步骤。
(3)定义训练和测试:fit_and_plot函数,添加惩罚项,传入lambd,即要乘的正数。求权重后加上惩罚项。
(4)观察过拟合:使lambd=0,即不使用权重衰减来进行训练。
(5)使用权重衰减:使lambd=3,最后训练误差达到10-3,测试误差也达到10-1,已经达到一个很好的效果了。

4.简洁实现:
用pytorch来完成fit_and_plot_pytorch函数的定义。参数初始化用init模块来完成,优化函数采用optim模块中随机梯度下降函数(权重衰减已经封装在其中,采用一个weight_decay值来控制)。

丢弃法

在隐藏层对每一个隐藏单元设置丢弃的概率。丢弃法不改变其输入的期望值(均值)。用来应对过拟合

1.丢弃法从零开始的实现:dropout函数,assert来判断丢弃率drop_prob是否合法,keep_prob为保存率,若为零则丢弃X。net函数,使用了两层隐藏层,需输入两个丢弃率。evaluate_accuracy函数来判断模型准确率,也需要考虑如丢弃法,net.eval函数为评估模式,自动关闭丢弃法,net.train函数则改回训练模式(开启丢弃法)。

2.简洁实现:神经网络的定义直接调用nn.Sequential函数来进行定义,定义了两个线性的隐藏层,包含丢弃法。随后用init模块进行初始化。用optim模块进行优化。最后封装、训练。

总结

1.欠拟合现象:模型无法达到一个较低的误差。
2.过拟合现象:训练误差较低但是泛化误差依然较高,二者相差较大。

伯禹学习平台·深度学习笔记(二)相关推荐

  1. 伯禹 动手学深度学习 打卡12之 RNN 进阶

    GRU RNN存在的问题:梯度较容易出现衰减或爆炸(BPTT) ⻔控循环神经⽹络:捕捉时间序列中时间步距离较⼤的依赖关系 RNN: GRU: 重置⻔有助于捕捉时间序列⾥短期的依赖关系: 更新⻔有助于捕 ...

  2. 伯禹 动手学深度学习 打卡11之循环神经网络

    循环神经网络 循环神经网络的构造 从零开始实现循环神经网络 我们先尝试从零开始实现一个基于字符级循环神经网络的语言模型,这里我们使用周杰伦的歌词作为语料,首先我们读入数据: import torch ...

  3. 各类学习平台收集记录(强化学习、深度学习、机器学习)

    各类学习平台收集记录(强化学习.深度学习.机器学习) 1.百度开发者中心  https://developer.baidu.com/?from=aistudio 有很多开源项目代码可以借鉴学习. 2. ...

  4. 重学《动手学深度学习》 —— 深度学习简介(第一章)笔记

    深度学习简介 本章地址:https://tangshusen.me/Dive-into-DL-PyTorch/#/chapter01_DL-intro/deep-learning-intro 仅作为私 ...

  5. 深度学习和深度学习框架CNTK入门(一)

    深度学习和深度学习框架CNTK入门(一) 深度学习介绍 是基于机器学习延伸出来的一个新的领域,由以人大脑结构为启发的神经网络算法为起源加之模型结构深度的增加发展,并伴随大数据和计算能力的提高而产生的一 ...

  6. 学习:深度学习公开课

    [转] http://www.leiphone.com/news/201701/0milWCyQO4ZbBvuW.html 导语:入门机器学习不知道从哪着手?看这篇就够了. 在当下的机器学习热潮,人才 ...

  7. 【深度学习】深度学习和经典统计学是一回事?

    器之心编译 编辑:rome rome 深度学习和简单的统计学是一回事吗?很多人可能都有这个疑问,毕竟二者连术语都有很多相似的地方.在这篇文章中,理论计算机科学家.哈佛大学知名教授 Boaz Barak ...

  8. 第1周学习:深度学习和pytorch基础

    第1周学习:深度学习和pytorch基础 一.概念学习 1.1关于一些基本问题的思考 1.2深度学习基础 二.代码练习 pytorch 基础练习 螺旋数据分类问题 一.概念学习 1.1关于一些基本问题 ...

  9. 机器学习、监督学习、非监督学习、强化学习、深度学习、迁移学习

    机器学习.监督学习.非监督学习.强化学习.深度学习.迁移学习 机器学习(machine learning) 监督学习(supervised learning) 非监督学习(unsupervised l ...

最新文章

  1. 细粒度情感分析:还在用各种花式GNN?或许只用RoBERTa就够了
  2. iis出现 Server Application Error 错误解决方法(xp iis5.1 配置asp项目出现500错)
  3. 前后端分离项目,后端是如何处理前端传递的token?
  4. iphone控制电脑_这可能是首款能在电脑上控制iPhone的工具
  5. c++学习笔记(4)
  6. eclipse git插件简单使用
  7. DeepMind智能体自学跑酷:略显智障,结果尚好
  8. java sin函数图像_java中怎样绘制正弦函数图象
  9. Atitit 数据存储的数据表连接attilax总结
  10. 数据库建立索引的优缺点及适合建立索引的字段
  11. 工资管理系统的开发设计
  12. 淘宝优惠券去哪里领?
  13. somachine3.1 注册
  14. 如何传输本地文件到服务器,本地传输文件到服务器
  15. TFTP文件传输NFS挂载ARM开发板移植Linux系统步骤
  16. 什么?朋友圈出现了叠中叠?教你三招轻松应对朋友圈折叠
  17. 什么是共识?(理论篇)
  18. Clusterrolebindings 创建错误
  19. es的rest-high-level-client使用
  20. 服务器系统2012浏览器,关闭Windows 2012系统IE浏览器”增强的安全配置已启用”问题 | 老左笔记...

热门文章

  1. win10 mysql初始化失败_win10电脑中windows通信端口初始化失败的解决教程
  2. 推荐10个优质技术公众号
  3. 雷达辐射源调制信号仿真(代码)
  4. Windows下使用VisualSFM + CMVS/PMVS +MeshLab进行三维重建
  5. 使用ZXing实现二维码扫描
  6. 图解kubernetes服务打散算法的实现源码
  7. Python实现网络图片抓取
  8. 7-279 字符串输入输出练习7-284 倒立的杨辉三角形
  9. python处理两个Excel并且根据相同字段合并写入一个新的Excel
  10. 最全的SQL注入总结