第二门课:改善深层神经网络<超参数调试、正则化及优化>-深度学习的实用层面

news/2024/7/27 7:47:24/文章来源:https://blog.csdn.net/qq_43501462/article/details/136565806

文章目录

  • 1 训练集、验证集以及测试集
  • 2 偏差与方差
  • 3 机器学习基础
  • 4 正则化
  • 5 为什么正则化可以减少过拟合?
  • 6 Dropout<随机失活>正则化
  • 7 理解Dropout
  • 8 其他正则化方法
  • 9 归一化输入
  • 10 梯度消失和梯度爆炸
  • 11 神经网络的权重初始化
  • 12 梯度的数值逼近
  • 13 梯度检验
  • 14 关于梯度检验的注记

1 训练集、验证集以及测试集

验证集与测试集要确保来自同一个分布
因为验证集要用来评估不同的模型,尽可能的优化性能
但由于深度学习需要大量的训练数据,为了获取大规模的训练数据集,可以采用当前流行的创意策略,比如:网页抓取,代价就是训练集数据与验证集数据和测试集数据有可能不是来自同一个分布。
测试集的目的是对最终所选定的神经网络系统做出无偏评估
训练集(train set) —— 用于模型拟合的数据样本。
验证集(development set)—— 是模型训练过程中单独留出的样本集,用于调整模型的超参数以及对模型的能力进行初步评估。通常用来在模型迭代训练时,用以验证当前模型泛化能力(准确率,召回率等),以决定是否停止继续训练。
测试集(test set) —— 用来评估模最终模型的泛化能力。但不能作为调参、选择特征等算法相关的选择的依据。

2 偏差与方差

在这里插入图片描述
如果给数据集拟合一条直线,可能得到一个逻辑回归拟合
第一个为偏差高的情况,称为“欠拟合
第二个为复杂程度适中,数据拟合适度的分类器
第三个分类器偏差较高,数据过度拟合
在这里插入图片描述
第一种训练集很好,验证集误差大,可能是过度拟合了训练集,某种程度上,验证机并没有充分利用交叉验证集的作用,则称之为“高方差”。
第二种训练集与验证集相差不多,则证明是训练集拟合度不高,可能会分辨不出目标,即数据欠拟合,则算法高偏差。对于验证集产生的结果是合理的,与上面一张图片的high bias相似。

3 机器学习基础

在这里插入图片描述
首先要知道算法的偏差是否高,如果偏差较高,试着评估训练集或训练数据的性能。如果偏差较高甚至无法拟合训练集,则选择一个新网络,然后反复尝试,直到可以拟合数据为止。如果网络足够大,通常可以很好的拟合训练集。
如果方差高,最好的解决方法就是采用更多数据以及正则化

4 正则化

在这里插入图片描述
只正则化w是因为w通常是高维度矢量,已经可以表达高方差问题,w可能含有很多参数,我们不可能拟合所有参数,而b只是单个数字,所以w几乎涵盖了所有参数,而不是b,如果加了参数b也没有什么太大的影响,因此b只是众多参数中的一个,因此我们通常忽略不计。

在这里插入图片描述

λ是正则化参数,通常使用验证集或交叉验证来配置这个参数。
λ是一个需要调整的超级参数。
L2范数正则化也被称为“权重衰减”
Backprop输出的最初梯度值即反向传播输出的最初梯度值
在这里插入图片描述

5 为什么正则化可以减少过拟合?

在这里插入图片描述
在这里插入图片描述

当 λ 设置的很大的时候,最终W 会变得很接近于 0,神经网络中的很多单元的作用变得很小,整个网络越来越接近逻辑回归。在λ 设置的很大的时候,高方差会变为高偏差,当λ 取得一个适中的值时,不会再存在高偏差以及高方差。
λ 增大时,整个神经网络会计算离线性函数近的值,这个线性函数非常简单,不是复杂的高度非线性函数,不会发生过拟合

6 Dropout<随机失活>正则化

Dropout遍历网络的每一层,并设置消除神经网络中节点的概率,假设每个节点得以保留和消除的概率为0.5,设置完节点概率,消除一部分节点,然后消除从该节点进出的连线,最后得到一个节点更少、规模更小的网络,然后使用backprop进行训练。
在这里插入图片描述
以三层网络为例:

keep_prob = 0.8# 设置神经元保留概率为0.8,消除任意一个隐藏单元的概率是0.2
d3 = np.random.rand(a3.shape[0], a3.shape[1]) < keep_prob   
#生成指定维度的的[0,1)范围之间的随机数,输入参数为维度,shape[0]只输出行数,shape[1]只输出列数。矩阵中随机数小于0.8为1,否则为0
a3 = np.multiply(a3, d3)
a3 /= keep_prob  #是为了保证下一层计算的时候期望值不变。

事实上,dropout也是产生权重收缩的效果。
当keep_prob = 1的时候,就会保留原始所有的神经元,即关闭dropout功能
在这里插入图片描述

7 理解Dropout

1、dropout随机删除网络中的神经单元
2、dropout将产生收缩权重的平方范数的效果,和我们之前讲过的L2正则化类似,实施dropout的结果是它会压缩权重,并完成一些预防过拟合的外层正则化。与L2正则化不同的是,被应用的方式不同,dropout也会有所不同,甚至更适用于不同的输入范围。L2对不同权重的衰减是不同的,它取决于倍增的激活函数的大小。
在这里插入图片描述

这是一个拥有三个输入特征的网络,其中一个要选择的参数是keep-prob,即每一层上保留单元的概率。所以不同层的keep-prob也可以变化。第一层,矩阵W[1]是7×3,第二个权重矩阵W[2]是7×7,第三个权重矩阵W[3]是3×7,以此类推,W[2]是最大的权重矩阵,因为拥有最大参数集,即7×7,为了预防矩阵的过拟合,对于这一层(第二层),它的keep-prob值应该相对较低,假设是0.5。对于其它层,过拟合的程度可能没那么严重,它们的keep-prob值可能高一些,可能是0.7,这里是0.7。如果在某一层,不必担心其过拟合的问题,那么keep-prob可以为1。

8 其他正则化方法

除L2正则化和随机失活(dropout)正则化,还有几种方法可以减少神经网络中的过拟合。
1、数据扩增 对于图片数据,可以水平翻转图片或者随意裁剪。对于数字识别,我们还可以通过添加数字,随意旋转或扭曲数字来扩增数据。
在这里插入图片描述

2、early stopping<提早停止训练神经网络>
在这里插入图片描述
在中间停止迭代,我们得到一个w值中等大小的弗罗贝尼乌斯范数,与L2正则化相似,选择参数w范数较小的神经网络。
early stopping的主要缺点不能同时处理过拟合代价函数不够小 的问题
提早停止,可能代价函数 J 不够小。
不提早结束,可能会过拟合。
Early stopping的优点是,只运行一次梯度下降,你可以找出w的较小值,中间值和较大值,而无需尝试L2正则化超级参数的很多值。

9 归一化输入

归一化输入,可以加速训练。它一般需要两个以下步骤:
零均值化(所有的数据减去均值),X等于每个训练数据x减去u,意思是移动训练集,直到它完成零均值化
在这里插入图片描述
2、归一化方差 (所有数据除以方差),由于已经完成了零均值化,把所有数据除以σ平方。这样x1和x2的方差都等于1。
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
如果你使用非归一化的输入特征,梯度下降法可能需要多次迭代过程,直到最后找到最小值。
如果进行归一化处理,函数是一个更圆的球形轮廓(右上方),那么不论从哪个位置开始,梯度下降法都能够更直接地找到最小值。

10 梯度消失和梯度爆炸

在这里插入图片描述
在这里插入图片描述
y帽等于1.5^(L-1) x,L越大,y帽越大,呈指数型增长,也称爆炸式增长。相反,如果权重矩阵W的元素都小于1,如0.5,L越大,y帽正比于0.5^L,呈指数型减小,称为数值消失。当各层权重W都大于1或者小于1,当层数很大时,出现数值爆炸或消失。

11 神经网络的权重初始化

可以将神经网络的权重初始化来尝试解决梯度消失和爆炸
在这里插入图片描述
为了预防z值过大或者过小,你可以看到n越大,你希望w_i越小,最合理的方法是设置为w_i = 1/n,n表示神经元的输入特征数量。设置第l层权重矩阵为:
在这里插入图片描述
其中,n^(l-1)是第l-1层神经元的数量。
在这里插入图片描述

12 梯度的数值逼近

在反向传播时,有个测试叫做梯度检验。即计算误差时,我们需要使用双边误差,不使用单边误差,因为前者更准确。
在这里插入图片描述

13 梯度检验

梯度检验使用双边误差进行检验
d\theta i是代价函数的偏导数,d\theta approx与d\theta i有相同的维度,他们两个与\theta具有相同的维度。
检验这些向量是否接近<计算这两个向量的欧氏距离>:
然后用向量长度做归一化

在这里插入图片描述

14 关于梯度检验的注记

1、不要在训练中使用梯度检验,它只用于调试。为了实施梯度下降,你必须使用W和b反向传播来计算dθ,只有调试的时候才会计算它。
2、如果算法的梯度检验失败,要检查所有项,检查每一项,并试着找出bug。注意θ的各项与b和w的各项都是一一对应的。
3、在实施梯度检验时,如果使用正则化,请注意正则项。
4、梯度检验不能与dropout同时使用,因为每次迭代过程中,dropout会随机消除隐藏层单元的不同子集,难以计算dropout在梯度下降上的代价函数J。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_1007158.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IDEA自定义Maven仓库

Maven 是一款广泛应用于 Java 开发的工具&#xff0c;其作用类似于一个全自动的 JAR 包管理器&#xff0c;能够方便地导入开发所需的相关 JAR 包。在使用 Maven 进行 Java 程序开发时&#xff0c;开发者能够极大地提高开发效率。以下是关于如何安装 Maven 以及在 IDEA 中配置自…

iOS——【自动引用计数】ARC规则及实现

1.3.3所有权修饰符 所有权修饰符一共有四种&#xff1a; __strong 修饰符__weak 修饰符__undafe_unretained 修饰符__autoreleasing 修饰符 __strong修饰符 _strong修饰符表示对对象的强引用&#xff0c;持有强引用的变量在超出其作用域的时候会被废弃&#xff0c;随着强引…

③【Docker】Docker部署Nginx

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ ③【Docker】Docker部署Nginx docker拉取nginx…

二、应用层

二、应用层 2.1 应用层协议原理 可能用的应用架构&#xff1a; 1.C/S模式&#xff1a;用户增加&#xff0c;性能断崖式下降 2.P2P体系结构 3.混合体 进程通信&#xff1a; 进程—在主机上运行的应用程序 在同一个主机内&#xff0c;使用进程间通信机制通信&#xff08;操作…

Kubernetes弃用Dockershim,转向Containerd:影响及如何应对

Kubernetes1.24版本发布时&#xff0c;正式宣布弃用Dockershim&#xff0c;转向Containerd作为默认的容器运行环境。Kubernetes以CRI(Container Runtime Interface)容器运行时接口制定接入准则&#xff0c;用户可以使用Containerd、CRI-O、CRI- Dockerd及其他容器运行时作为Kub…

Solidity 智能合约开发 - 基础:基础语法 基础数据类型、以及用法和示例

苏泽 大家好 这里是苏泽 一个钟爱区块链技术的后端开发者 本篇专栏 ←持续记录本人自学两年走过无数弯路的智能合约学习笔记和经验总结 如果喜欢拜托三连支持~ 本篇主要是做一个知识的整理和规划 作为一个类似文档的作用 更为简要和明了 具体的实现案例和用法 后续会陆续给出…

netty草图笔记

学一遍根本记不住&#xff0c;那就再学一遍 public static void test_nettyFuture() {NioEventLoopGroup group new NioEventLoopGroup();log.info("开始提交任务");Future<String> future group.next().submit(() -> {log.info("执行异步任…

webmagic面试准备

1.什么是webmagic WebMagic是一款开源的Java爬虫框架&#xff0c;旨在简化网络爬虫的开发过程&#xff0c;使开发者更加高效便捷的构建网络爬虫程序。它采用了模块化的设计思想&#xff0c;将爬虫的整个生命周期划分为了四个核心组件&#xff1a;Downloader、PageProcessor、Sc…

git提交代码到仓库

git提交代码到仓库 当代码写到一半想提交到新仓库时 平常在练习时&#xff0c;写了一半的代码要提交仓库怎么做 创建一个新仓库&#xff0c;到下面图片时&#xff0c;注意红框内的代码 这种情况是已有仓库的&#xff0c;在执行git命令前 在代码中一次执行 git initgit add…

算法空间复杂度计算

目录 空间复杂度定义 影响空间复杂度的因素 算法在运行过程中临时占用的存储空间讲解 例子 斐波那契数列递归算法的性能分析 二分法&#xff08;递归实现&#xff09;的性能分析 空间复杂度定义 空间复杂度(Space Complexity)是对一个算法在运行过程中临时占用存储空间大…

电脑干货:6款免费的实用工具,值得收藏

目录 1、HelloWindows 2、Memory Helper 3、MindNode 4、B站视频下载工具 5、wallhaven壁纸 1、HelloWindows HelloWindows是一个纯净Windows系统下载网站&#xff0c;它可以下载到所有Windows系统源文件&#xff0c;比如Windows11、Windows10、win7、XP等&#xff0c;也可…

0基础安装Burpsuit专业版

首先先安装java环境,安装jdk 11的版本 文件中2023版的可以直接点开使用不需要复杂的操作的步骤 资源获取链接&#xff1a; 链接&#xff1a;百度网盘 请输入提取码 提取码&#xff1a;k2qq 其中&#xff1a;1号文件是bp的英文版激活包&#xff0c;-2号是中文版汉化版的激活包…

基于FPGA加速的bird-oid object算法实现

导语 今天继续康奈尔大学FPGA 课程ECE 5760的典型案例分享——基于FPGA加速的bird-oid object算法实现。 &#xff08;更多其他案例请参考网站&#xff1a; Final Projects ECE 5760&#xff09; 1. 项目概述 项目网址 ECE 5760 Final Project 模型说明 Bird-oid object …

Tree Shaking:优化前端项目的利器

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

汽车IVI中控开发入门及进阶(十四):功能安全

前言: 是时候需要来说一下功能安全了,有没有发现现在很多主机厂、Tier1对芯片等BOM物料有些是有功能安全需求的,那么什么是功能安全呢? 车辆中电子元件数量的增加增加了更多故障的可能性,对驾驶员和乘客的风险更高。这种风险的增加导致汽车行业将功能安全标准作为汽车设计…

C#,数值计算,矩阵相乘的斯特拉森(Strassen’s Matrix Multiplication)分治算法与源代码

Volker Strassen 1 矩阵乘法 矩阵乘法是机器学习中最基本的运算之一,对其进行优化是多种优化的关键。通常,将两个大小为N X N的矩阵相乘需要N^3次运算。从那以后,我们在更好、更聪明的矩阵乘法算法方面取得了长足的进步。沃尔克斯特拉森于1969年首次发表了他的算法。这是第…

什么是测试自动化平台?为什么需要测试自动化平台?如何选择平台

什么是测试自动化平台&#xff1f; 测试自动化平台是一种软件工具或框架&#xff0c;可帮助软件开发团队实现测试流程的自动化。它集成了多种功能和工具&#xff0c;使测试人员能够更高效地进行测试计划、用例设计、测试执行和结果分析。 为什么需要测试自动化平台&#xff1f…

微信小程序-day01

文章目录 前言微信小程序介绍 一、为什么要学习微信小程序?二、微信小程序的历史创建开发环境1.注册账号2.获取APPID 三、下载微信开发者工具1.创建微信小程序项目2.填写相关信息3.项目创建成功 四、小程序目录结构项目的主体组成结构 总结 前言 微信小程序介绍 微信小程序&…

3.环境对象this、this指向总结(待完成还有节流防抖待完成)、回调函数、事件

环境对象this 环境对象本质上是一个关键字 this this所在的代码区域不同&#xff0c;代表的含义不同 全局作用域中的this 全局作用域中this代表window对象 局部作用域中的this 在局部作用域中(函数中)this代表window对象 函数直接调用的时候简写了&#xff0c;函数完整写法…

网络编程:网络编程基础

一、网络发展 1.TCP/IP两个协议阶段 TCP/IP协议已分成了两个不同的协议&#xff1a; 用来检测网络传输中差错的传输控制协议TCP 专门负责对不同网络进行2互联的互联网协议IP 2.网络体系结构 OSI体系口诀&#xff1a;物链网输会示用 2.1网络体系结构概念 每一层都有自己独…