【深度学习】如何选择神经网络的超参数
1. 神经网络的超参数分类
神经网路中的超参数主要包括:
1. 学习率 η
2. 正则化参数 λ
3. 神经网络的层数 L
4. 每一个隐层中神经元的个数 j
5. 学习的回合数Epoch
6. 小批量数据 minibatch 的大小
7. 输出神经元的编码方式
8. 代价函数的选择
9. 权重初始化的方法
10. 神经元激活函数的种类
11.参加训练模型数据的规模
这十一类超参数。
这些都是可以影响神经网络学习速度和最后分类结果,其中神经网络的学习速度主要根据训练集上代价函数下降的快慢有关,而最后的分类的结果主要跟在验证集上的分类正确率有关。因此可以根据该参数主要影响代价函数还是影响分类正确率进行分类,如图1所示
图1. 十一类超参数的分类情况
因为不同的超参数的类别不同,因此在调整超参数的时候也应该根据对应超参数的类别进行调整。再调整超参数的过程中有根据机理选择超参数的方法,有根据训练集上表现情况选择超参数的方法,也有根据验证集上训练数据选择超参数的方法。他们之间的关系如图2所示。
图2. 不同超参数的选择方法不同。
2. 宽泛策略
根据上面的分析我们已经根据机理将神经网络中的神经元的种类、输出层的模式(即是否采用softmax)、代价函数及输出层的编码方式进行了设定。所以在这四个超参数被确定了之后变需要确定其他的超参数了。假设我们是从头开始训练一个神经网络的,我们对于其他参数的取值本身没有任何经验,所以不可能一上来就训练一个很复杂的神经网络,这时就要采用宽泛策略。
宽泛策略的核心在于简化和监控。简化具体体现在,如简化我们的问题,如将一个10分类问题转变为一个2分类问题;简化网络的结构,如从一个仅包含10个神经元你的隐层开始训练,逐渐增加网络的层数和神经元的个数;简化训练用的数据,在简化问题中,我们已经减少了80%的数据量,在这里我们该要精简检验集中数据的数量,因为真正验证的是网络的性能,所以仅用少量的验证集数据也是可以的,如仅采用100个验证集数据。监控具体指的是提高监控的频率,比如说原来是每5000次训练返回一次代价函数或者分类正确率,现在每1000次训练就返回一次。其实可以将“宽泛策略”当作是一种对于网络的简单初始化和一种监控策略,这样可以更加快速地实验其他的超参数,或者甚至接近同步地进行不同参数的组合的评比。
直觉上看,这看起来简化问题和架构仅仅会降低你的效率。实际上,这样能够将进度加快,因为你能够更快地找到传达出有意义的信号的网络。一旦你获得这些信号,你可以尝尝通过微调超参数获得快速的性能提升。
3. 学习率的调整
假设我们运行了三个不同学习速率( η=0.025η=0.025、η=0.25η=0.25、η=2.5η=2.5)的 MNIST 网 络,其他的超参数假设已经设置为进行30回合,minibatch 大小为10,然后 λ=5.0λ=5.0 ,使用50000幅训练图像,训练代价的变化情况如图3
图3. 不同学习率下代价函数曲线的变化情况
因此学习率的调整步骤为:首先,我们选择在训练数据上的代价立即开始下降而非震荡或者增加时的作为 ηη 阈值的估计,不需要太过精确,确定量级即可。如果代价在训练的前面若干回合开始下降,你就可以逐步增加 ηη 的量级,直到你找到一个的值使得在开始若干回合代价就开始震荡或者增加;相反,如果代价函数曲线开始震荡或者增加,那就尝试减小量级直到你找到代价在开始回合就下降的设定,取阈值的一半就确定了学习速率 。在这里使用训练数据的原因是学习速率主要的目的是控制梯度下降的步长,监控训练代价是最好的检测步长过大的方法。
4. 迭代次数
提前停止表示在每个回合的最后,我们都要计算验证集上的分类准确率,当准确率不再提升,就终止它也就确定了迭代次数(或者称回合数)。另外,提前停止也能够帮助我们避免过度拟合。
我们需要再明确一下什么叫做分类准确率不再提升,这样方可实现提前停止。正如我们已经看到的,分类准确率在整体趋势下降的时候仍旧会抖动或者震荡。如果我们在准确度刚开始下降的时候就停止,那么肯定会错过更好的选择。一种不错的解决方案是如果分类准确率在一段时间内不再提升的时候终止。建议在更加深入地理解 网络训练的方式时,仅仅在初始阶段使用 10 回合不提升规则,然后逐步地选择更久的回合,比如 20 回合不提升就终止,30回合不提升就终止,以此类推。
5. 正则化参数
我建议,开始时代价函数不包含正则项,只是先确定 ηη 的值。使用确定出来的 ηη,用验证数据来选择好的 λλ 。尝试从 λ=1λ=1 开始,然后根据验证集上的性能按照因子 10 增加或减少其值。一旦我已经找到一个好的量级,你可以改进 λλ 的值。这里搞定 λλ 后,你就可以返回再重新优化 ηη 。
6. 小批量数据的大小
选择最好的小批量数据大小也是一种折衷。太小了,你不会用上很好的矩阵库的快速计算;太大,你是不能够足够频繁地更新权重的。你所需要的是选择一个折衷的值,可以最大化学习的速度。幸运的是,小批量数据大小的选择其实是相对独立的一个超参数(网络整体架构外的参数),所以你不需要优化那些参数来寻找好的小批量数据大小。因此,可以选择的方式就是使用某些可以接受的值(不需要是最优的)作为其他参数的选择,然后进行不同小批量数据大小的尝试,像上面那样调整 ηη 。画出验证准确率的值随时间(非回合)变化的图,选择哪个得到最快性能的提升的小批量数据大小。得到了小批量数据大小,也就可以对其他的超参数进行优化了。
7. 总体的调参过程
首先应该根据机理确定激活函数的种类,之后确定代价函数种类和权重初始化的方法,以及输出层的编码方式;其次根据“宽泛策略”先大致搭建一个简单的结构,确定神经网络中隐层的数目以及每一个隐层中神经元的个数;然后对于剩下的超参数先随机给一个可能的值,在代价函数中先不考虑正则项的存在,调整学习率得到一个较为合适的学习率的阈值,取阈值的一半作为调整学习率过程中的初始值 ;之后通过实验确定minibatch的大小;之后仔细调整学习率,使用确定出来的 ηη,用验证数据来选择好的 λλ ,搞定 λλ 后,你就可以返回再重新优化 ηη。而学习回合数可以通过上述这些实验进行一个整体的观察再确定。
相关文章:
【深度学习】如何选择神经网络的超参数
1. 神经网络的超参数分类 神经网路中的超参数主要包括: 1. 学习率 η 2. 正则化参数 λ 3. 神经网络的层数 L 4. 每一个隐层中神经元的个数 j 5. 学习的回合数Epoch 6. 小批量数据 minibatch 的大小 7. 输出神经元的编码方式 8. 代价函数的选择 9. 权重初始化的方法 …...
jQuery 3.0 新增了哪些特性?(jQuery 3 所引入的那些最重要的变化)
文章目录 前言简介新增特性Use of requestAnimationFrame() for Animationsunwrap() 方法 有变更的特性data() 方法Deferred 对象SVG 文档 已废弃、已移除的方法和属性废弃 bind()、unbind()、delegate() 和 undelegate() 方法移除 load()、unload() 和 error() 方法移除 conte…...
MindStudio学习一 整体介绍
一场景介绍 二 安装介绍 1.LINUX 采用无昇腾硬件采用linux 分部署 2.WINDOWS 3.linux下安装整体步骤 3.1安装依赖 3.2 安装步骤 1.gcc cmake 等依赖 2.python3.7.5 3.pip 安装依赖 4.安装JDK 5.安装 Ascend-cann-toolkit 6.解压安装Mindstudio 7.进入bin路径 ./…...
excel表中慎用合并单元格,多用跨列居中
如下一个excel例表: 要将首行居中,最好的办法如下: 1、选中首行单元格 2、按下ctrl1,调出“设置单元格格式”,选中“对齐”,在“水平对齐”中选择“跨列居中” 3、完成任务 这样居中的好处是:可…...
linux网络编程之UDP编程
linux网络编程之UDP编程 UDP编程模型服务端客户端 tcp与udp的区别 UDP编程模型 服务端 1.创建socket 2.构建服务器协议地址簇 3.绑定 4. 通信 sendto(多了两个参数) send connect #include <stdio.h> #include <sys/types.h> /*…...
YB4556 28V、1A、单节、线性锂电池充电IC
YB4556 28V 、 1A 、单节、线性锂电池充电 IC 概述: YB4556H 是一款完整的采用恒定电流 / 恒定电压的高压、大电流、单节锂离子电池线性充电 IC。最高耐压可达 28V,6.5V 自动过压保护,充电电流可达 1A。由于采用了内部 PMOSFET 架构,加上防倒…...
基于单片机设计的大气气压检测装置(STC89C52+BMP180实现)
一、前言 本项目设计一个大气气压检测装置,该装置以单片机为基础,采用STC89C52作为核心控制芯片,结合BMP180模块作为气压传感器。大气气压,也就是由气体重力在大气层中产生的压力,其变化与天气预报、气象观测以及高度…...
【ChatGLM3-6B】Docker下部署及微调
【ChatGLM2-6B】小白入门及Docker下部署 注意:Docker基于镜像中网盘上上传的有已经做好的镜像,想要便捷使用的可以直接从Docker基于镜像安装看Docker从0安装前提下载启动访问 Docker基于镜像安装容器打包操作(生成镜像时使用的命令࿰…...
编程常见报错信息及解决方案汇总
编程常见报错信息及解决方案汇总 1.Java语言编程 1.1 jdk相关 Java API java8帮助文档 Java最新JDK和API下载(持续同步更新于官网) jdk1.8.0_212 全平台下载 官网下载JDK1.7的方法和步骤 力扣 (LeetCode) PTA题库 1.2 编程工具Eclipse Eclips…...
从Redis反序列化UserDetails对象异常后发现FastJson序列化的一些问题
最近在使用SpringSecurityJWT实现认证授权的时候,出现Redis在反序列化userDetails的异常。通过实践发现,使用不同的序列化方法和不同的fastJson版本,异常信息各不相同。所以特地记录了下来。 一、项目代码 先来看看我项目中redis相关配置信息…...
0001Java程序设计-springboot基于微信小程序批发零售业商品管理系统
文章目录 **摘 要****目录**系统实现开发环境 编程技术交流、源码分享、模板分享、网课分享 企鹅🐧裙:776871563 摘 要 本毕业设计的内容是设计并且实现一个基于微信小程序批发零售业商品管理系统。它是在Windows下,以MYSQL为数据库开发平台…...
中国防锈油市场深度调研与投资战略报告(2023版)
内容简介: 防锈油是在石油类基本组分中加入油溶性缓蚀剂及清净分散剂、抗氧抗腐剂、极压抗磨剂等辅助添加剂,多用于金属制品工序间、运输和贮存时的暂时防锈,是一种较理想、有效的防护方法,具有效果好、使用方便、成本低廉、易施…...
Linux C 基于tcp和epoll在线聊天室
基于tcp和epoll在线聊天室 说明服务端代码 说明 服务端:实现了验证用户是否已经存在(支持最大64用户连接)支持广播用户进入退出聊天室以及用户聊天内容。 这里只提供里服务端代码,如果想要看客户端代码点击这里。 服务端代码…...
为什么要隐藏id地址?使用IP代理技术可以实现吗?
随着网络技术的不断发展,越来越多的人开始意识到保护个人隐私的重要性。其中,隐藏自己的IP地址已经成为了一种常见的保护措施。那么,为什么要隐藏IP地址?使用IP代理技术可以实现吗?下面就一起来探讨这些问题。 首先&am…...
前端(HTML + CSS + JS)
文章目录 一、HTML1. 概念(1)HTML 文件基本结构(2)HTML代码框架 2. 、HTML常见标签 二、CSS1. CSS基本语法规范2. 用法(1) 引用方式(2)选择器(3)常用元素属性…...
12 要素 12 Factor
I. 基准代码 一份基准代码,多份部署 一个应用,一个基准代码git仓库,多个环境版本部署(prod,staging,develop) II. 依赖 显式声明依赖关系 docker的dockerfile,php的composer.jso…...
十大排序之冒泡排序与快速排序(详解)
文章目录 🐒个人主页🏅算法思维框架📖前言: 🎀冒泡排序 时间复杂度O(n^2)🎇1. 算法步骤思想🎇2.动画实现🎇 3.代码实现🎇4.代码优化(添加标志量) …...
【SpringBoot篇】阿里云OSS—存储文件的利器
文章目录 🌹什么是阿里云OSS⭐阿里云OSS的优点 🏳️🌈为什么要使用云服务OSS🎄使用步骤⭐OSS开通⭐参考官方SDK 🍔编写代码⭐上传文件 🌹综合案例 🌹什么是阿里云OSS 阿里云对象存储…...
Leetcode—58.最后一个单词的长度【简单】
2023每日刷题(四十) Leetcode—58.最后一个单词的长度 实现代码 int lengthOfLastWord(char* s) {int len strlen(s);int left 0, right 0;if(len 1) {return 1;}while(right < len) {if(right 1 < len) {if(s[right] && s[righ…...
Apach Ozone部署
前言 最近由于工作需要,要部署一套ozone。我自己对hadoop这套体系不是很熟悉,所以过程磕磕碰碰,好不容易勉强搭起来,所以记录一下部署方式 准备 三台主机,主机均已安装jdk、hdfs,相关的安装配置就不另外写…...
业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...
大数据学习栈记——Neo4j的安装与使用
本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...
工业安全零事故的智能守护者:一体化AI智能安防平台
前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...
智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql
智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...
【入坑系列】TiDB 强制索引在不同库下不生效问题
文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...
8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂
蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...
在四层代理中还原真实客户端ngx_stream_realip_module
一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡(如 HAProxy、AWS NLB、阿里 SLB)发起上游连接时,将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后,ngx_stream_realip_module 从中提取原始信息…...
TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案
一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序
一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...
