天桥调参师秘籍:一份深度学习超参微调技术指南

随着深度学习的兴起,越来越多的人从事算法工程师这一岗位。有时候他们自嘲自己为“天桥调参师”。当然,算法工程师的工作内容并没有那么简单,因为设置超参数的过程需要专业知识和广泛的试验和试错过程。尤其是针对学习率(learning rate)、批量大小(batch size)、动量( momentum)和权重衰减(weight decay)这些超参数而言,没有简单易行的方法来设置。


深度学习模型充满了超参数,在如此高维空间中找到这些参数的最佳值并不是一项容易的挑战。在讨论找到最佳超参数的方法之前,首先了解这些超参数:学习率、批量大小、动量和权重衰减。这些超参数类似于开关旋钮,可以在模型训练期间进行调整。为了使得模型能够获得最佳结果,需要找到这些超参数的最佳值。

梯度下降

梯度下降是训练机器学习算法中常用的优化技术。训练机器学习算法的主要目的是调整权重w以最小化损失函数或成本函数。通过最小化成本函数,就可以找到产生最佳模型性能的参数[1]。
回归问题的典型损失函数图类似于碗的形状,如下所示。


在梯度下降算法中,首先随机模型参数,并计算每次学习迭代的误差,不断更新模型参数以更接近导致最小成本的值。梯度下降算法将梯度乘以一个标量(学习率),以确定下一个点。
如果用dW和db作为更新参数W和b的梯度,梯度下降算法如下:

如果学习率很小,那么训练会更加可靠,但花费的时间也更多,因为每次移动的步长很小。
如果学习率很大,那么训练可能不收敛。权重变化可能很大,以至于优化器错失最优化并使得损失变大。因此,最终目标是找到可以快速获得最小损失的最佳学习率。


一般而言,可以将梯度下降视为在山谷中滚动的球。希望它能够在停留山脉的最深处,但有时可能会出错。


根据球开始滚动的位置,它可能会停留在山谷的底部。但不是最低的一个,这称为局部最小值。初始化模型权重的方式可能会导致局部最小值。为了避免这种情况,可以随机始化权重向量。
用2-D表示损失面,如下所示:


红点是全局最小值,希望能够达到这一点。使用梯度下降方法,更新将如下所示:


随着梯度下降的每次迭代,向上和向下振荡移动到局部最优。如果使用更大的学习率,那么垂直振荡将具有更高的幅度。这种垂直振荡会减慢梯度下降过程,并阻止设置更大的学习率,而学习速率太小会使梯度下降变慢。

目标是希望在垂直方向上学习更慢,在水平方向上学习更快,这将有助于更快地达到全局最小值。

为了实现这一点,可以使用具有动量的梯度下降 [2]。
梯度下降:


在动量方面,采用dW和db的指数加权平均值,而不是每个时期单独使用dW和db。


其中β是另一个称为动量的超参数,取值范围从0到1。它设置先前值的平均值与当前值之间的权重,以计算新的加权平均值。
计算指数加权平均值后更新参数。


通过使用dW和db的指数加权平均值,将垂直方向上的振荡平均化为接近零。然而,在水平方向上,所有导数都指向水平方向的右侧,因此水平方向上的平均值仍然相当大。它允许算法采用更直接的路径朝向局部最优并阻尼垂直振荡。基于此,算法最终会在局部最优处进行几次迭代。


有三种梯度下降的方法:

批量梯度下降(Batch gradient descent: )

  • 使用所有的训练实例来更新每次迭代中的模型参数;
  • 通过准确估计误差梯度来缓慢收敛;

随机梯度下降(Stochastic Gradient Descent)

  • 在每次迭代中仅使用单个训练实例更新参数。训练实例通常是随机选择的;
  • 通过估计错误梯度快速收敛;

小批量梯度下降(Mini-batch Gradient Descent)

  • 一次取b个示例:训练时不是使用所有的示例,而是将训练集划分为称为批处理的较小尺寸,每次取b个示例用来更新模型参数;
  • 小批量梯度下降试图在随机梯度下降的稳健性和批量梯度下降的效率之间找到平衡;
  • 小批量梯度下降是深度学习领域中最常用的梯度下降方法。缺点是它引入了额外的超参数'b';

搜索最佳配置的方法:网格搜索和随机搜索

网格搜索

在网格搜索[3]中,尝试每个可能的参数配置。
步骤:

  • 定义一个n维网格,其中每个都为超参数映射。例如n =(learning_rate, batch_size)
  • 对于每个维度,定义可能值的范围:例如batch_size = [4,8,16,32]learning_rate = [0.1,0.01,0.0001]
  • 搜索所有可能的配置并等待结果建立最佳配置:例如C1 =(0.1,4) - > acc = 92%C2 =(0.01,4) - > acc = 92.3%等;

随着维度的增多,搜索将在时间复杂度上发生爆炸。当维度小于或等于4时,通常使用这种方法。虽然它最终能保证找到最佳配置,但它仍然不是优选的,最好是使用随机搜索。

随机搜索

随机搜索[4]首先从配置空间中随机选取一个点,使用随机搜索更广泛地探索超参数空间。这可以在更少的迭代次数中找到最佳配置。例如:


在网格布局中,很容易注意到,即使已经训练了9个模型,而每个变量只使用了3个值。然而,使用随机搜索,我们不太可能不止一次地选择相同的变量,将使用9个不同的值为每个变量训练9个模型。更多详细分析,请参阅该文。
尽管随机搜索比网格搜索表现更好,但这两种方法在计算上仍然是昂贵且耗时的。在2018年,Leslie在其经典论文中提出了关于识别最佳超参数的各种方法的详细报告[5]。其中最好的方法是基于通过检查测试/验证损失以寻找欠拟合和过拟合的曲线来找到二者之间的平衡,以便争取最佳的超参数集合。

超参数调整过程无异于在钢丝上走路,以实现欠拟合和过拟合之间的平衡。

方法

  • 1.通过在训练早期监控验证/测试损失,观察分析训练曲线,通过几个时期来调整模型结构和超参数;
  • 2.在训练过程早期测试或验证损失的欠拟合或过拟合对于调整超参数是有用的;

 

寻找最佳超参数

学习率(LR)

如果学习率太小,则可能发生过拟合。较高的学习率有助于正则训练,但如果学习率过大,训练就会出现误差。因此,可以进行短距离网格搜索以找到收敛或发散的学习率,但还有另一种方法称为“周期性学习率(CLR)”。
实验表明,训练期间使用不同的学习率总体上是有益的,因此建议在一个取值范围内周期性地改变学习率,而不是将其设定为固定值。让学习率在一定范围内变化,而不是采用逐步、固定或指数级减少学习率值。即设置好最小和最大边界,学习率在这些边界之间循环变化。

如何估算合理的最小和最大边界值?

LR范围测试:运行模型几个epoch,同时让学习率在高低学习率值之间线性增加。对于浅层的3层架构,最大设置为0.01,而对于resnet这样的网络,学习率最大可以设置为3.0


从一轮循环确定最大学习速率,并将最大值的十分之一作为最小学习率的表现也不错[6]。

批量大小(Batch size)

与学习率不同,其值不影响计算训练时间。批量大小受硬件内存的限制,而学习率则不然。建议使用适合硬件内存的较大批量大小,并使用更大的学习速率。
如果服务器有多个GPU,则总批量大小是单个GPU上的批量大小乘以GPU的数量。

周期性动量(Cyclical Momentum)

动量和学习率密切相关。最佳学习率取决于动量,而动量又取决于学习率。与学习率一样,在不引起训练不稳定的情况下尽可能设置大的动量值是很有价值的。

查找学习率和动量组合的步骤

使用循环学习率:最佳训练步骤是循环增加学习率,初始化一个小的学习率,使其开始收敛,并减少周期动量。当学习率增加时,使用递减的循环动量加快收敛并且当稳定训练后,并设置更大的学习率;

使用恒定学习率:如果使用恒定的学习率,那么大的恒定动量(即0.9-0.99)将起到伪增加学习率的作用并加速训练。但是,使用过大的动量值会导致训练结果很差。

无论是循环学习速率还是恒定学习速率,可以尝试在0.9到0.99范围内设定动量值,并从中选择一个表现最佳值。

权重衰减

体重衰减是正则化的一种形式,它在训练中起着重要作用,因此需要适当设定[7]。权重衰减被定义为将每个时期的梯度下降中的每个权重乘以因子λ(0 <λ<1)。
一般而言,可以测试权重衰减值为1 /10³1 /10⁴1 /10⁵0。较小的数据集和模型结构设置较大的权重衰减值,而较大的数据集和更深的模型结构设置较小的值。
如果使用恒定的学习率而不是使用学习率范围进行搜索,则最佳权重衰减会有所不同。由于较大的学习率提供正则化,因此较小的权重衰减值是最佳的。

总结

学习率:

  • 执行学习率范围测试以确定“大”的学习率。
    *一轮测试确定最大学习速率,将最小学习速率设置为最大学习速率的十分之一。

动量:

  • 用短期动量值0.990.970.950.9进行测试,以获得动量的最佳值;
  • 如果使用周期学习率计划,最好从该最大动量值开始循环设置动量,并随着学习率的增加而减小到0.80.85

批量大小:

  • 根据硬件条件使用尽可能大的批量大小,然后比较不同批量大小的性能;
  • 小批量添加正规化的效果大,而大批量添加的正则化效果小,因此在适当平衡正规化效果的同时利用好它;
  • 使用更大的批量通常会更好,这样就可以使用更大的学习率;

权重衰减:

  • 网格搜索以确定适当的幅度,但通常不需要超过一个有效数字精度;
  • 更复杂的数据集需要较少的正则化,因此设置为较小的权重衰减值,例如10^-410^-510^-60
  • 浅层结构需要更多的正则化,因此设置更大的权重衰减值,例如10^-210^-310^-4

 

原文链接
本文为云栖社区原创内容,未经允许不得转载。

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

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

相关文章

Springboot集成axis1.4

文章目录1. 引入依赖2. Servlet3.接口4.实现类5.配置工厂6.启动类7. server-config.wsdd8. 访问1. 引入依赖 <!--axis start --><dependency><groupId>org.apache.axis</groupId><artifactId>axis</artifactId><version>1.4</ver…

疫情面前,医院是否需要数据中台?

来源 | 亲爱的数据&#xff08;ID&#xff1a;deardata&#xff09;作者&#xff1a;谭婧&#xff0c;虎嗅认证作者&#xff0c;《亲爱的数据》公众号出品人&#xff0c;香港浸会大学硕士&#xff0c;N年前高考作文满分得主。曾负责中国节能集团控股企业战略管理工作&#xff0…

【机器学习PAI实战】—— 玩转人工智能之综述

绪论 人工智能并非新的术语&#xff0c;这个概念由来已久&#xff0c;大约从80年代初开始&#xff0c;计算机科学家们开始设计可以学习和模仿人类行为的算法。人工智能的发展曲折向前&#xff0c;伴随着数据量的上涨、计算力的提升&#xff0c;机器学习的火热&#xff0c;以及…

一文纵览EMAS 到底内含多少阿里核心技术能力

EMAS的整体定位是阿里巴巴移动技术对外输出的主窗口&#xff0c;沉淀了阿里巴巴近10年在移动互联网技术架构上的积累以及在一系列垂直场景中所实践的核心技术能力。一方面&#xff0c;EMAS希望为广大开发者提供安全、稳定、快速、弹性的移动应用基础设施&#xff0c;另一方面也…

解决Windows中PLSQL连接虚拟机中Oracle缓慢的问题

文章目录1. 原因分析2. 解决方法1. 原因分析 Linux系统中的DNS解析在寻址的时候出现“错误”。这个跟我在用桥接模式连接网络的时候&#xff0c; 错误配置了“Network Configuration”中的DNS有关&#xff08;在用Bridged模式联网时&#xff0c;可以不 用配置DNS&#xff09;。…

万字长文!Unix和Linux你不知道的那些历史(详解版)

作者 | 程序员小乐来源 | 程序员小乐&#xff08;ID:study_tech&#xff09;00 前言 UNIX 与 Linux 之间的关系是一个很有意思的话题。在目前主流的服务器端操作系统中&#xff0c;UNIX 诞生于 20 世纪 60 年代末&#xff0c;Windows 诞生于 20 世纪 80 年代中期&#xff0c;…

“阿里巴巴小程序繁星计划”:20亿扶持200万小程序开发者和100万商家

3月21日&#xff0c;在2019阿里云峰会北京站上&#xff0c;阿里巴巴旗下的阿里云、支付宝、淘宝、钉钉、高德等联合发布“阿里巴巴小程序繁星计划”&#xff1a;提供20亿元补贴&#xff0c;扶持200万小程序开发者、100万商家。凡入选“超星”的小程序&#xff0c;入驻支付宝、淘…

linux 如何搭建sftp服务器

sftp采用的是ssh加密隧道&#xff0c;安装性方面较ftp强&#xff0c;而且依赖的是系统自带的ssh服务&#xff0c;不像ftp还需要额外的进行安装 文章目录一、服务器搭建分配二、sftp服务器搭建1. 创建sftp组2. 用户组3. 绑定用户组4. 配置5. 目录权限6. 用户、用户组、权限7. 关…

只需10分钟!就能用Flask,Docker和Jenkins部署机器学习模型

在生产环境中部署机器学习模型是数据工程中经常被忽视的领域。网上的大多数教程/博客都侧重于构建、训练和调整机器学习模型。如果它不能用于实际的预测&#xff0c;那么它又有什么用呢&#xff1f; 接下来了解一下有哪些部署选项吧&#xff1a;评估选项 在生产中部署机器学习模…

刚发布!新型病毒下,程序员可在家免费学习了!

亲爱的CSDN家人们&#xff1a;疫情当前&#xff0c;这个春节有点“寒”。截止1月31号24时&#xff0c;新型冠状病毒在全国已确诊11791名&#xff08;数字取自&#xff1a;人民日报8:40分发布信息&#xff09;&#xff0c;疑似病例已1w&#xff0c;受其影响&#xff0c;全国各地…

阿里巴巴的微服务开源之路

2019阿里云峰会北京开发者专场 侠之大者&#xff0c;为国为民。 在金庸小说中&#xff0c;郭靖和黄蓉是“侠之大者&#xff0c;为国为民”的典范&#xff0c;他们以布衣之身帮助宋军守护襄阳十余年。 技术的世界里&#xff0c;并无大小之分。 但当一群程序员由服务公司内部…

一文纵览自然语言生成的发展

人们对人工智能的兴趣随着科幻电影的诞生和发展变得愈发浓厚。每当我们听到“人工智能”这个词&#xff0c;便会联想到《终结者》、《黑客帝国》、《我&#xff0c;机器人》等电影。 机器人具有独立思考的能力在目前看来还比较遥远&#xff0c;但机器学习和自然语言理解领域已经…

java生成html表格数据_使用Java将表格数据导出成Excel格式

前言&#xff1a;本文使用后台处理的办法导出前端表格中显示的数据。引入依赖org.apache.poipoi3.17书写PoiUtilspublic classPoiUtils {public static ResponseEntity exportExcel(List marketList) throwsIOException {HttpHeaders headersnull;//创建文档HSSFWorkbook workb…

基于机器学习场景,如何搭建特征数据管理中台?

「免费学习 60 节公开课&#xff1a;投票页面&#xff0c;点击讲师头像」作者 | 陈迪豪&#xff0c;第四范式资深架构师编辑 | Jane来源 | AI科技大本营&#xff08;ID&#xff1a;rgznai100&#xff09;一、机器学习场景与高性能特征管理中台理想的机器学习场景是给到数据&…

十年再出发!阿里云智能总裁张建锋演讲全记录

3月21日&#xff0c;“十年再出发”阿里云峰会于国家会议中心正式召开。阿里云智能总裁张建锋&#xff08;行癫&#xff09;携核心管理团队首次悉数亮相&#xff0c;并对阿里云做了全面的战略解读。以下是演讲全文。 张建锋&#xff1a;今天是我们阿里云智能升级之后第一次和大…

java简单题目_Java考点知识简单练习题

Java考点知识简单练习题Java 技术具有卓越的通用性、高效性、平台移植性和安全性&#xff0c;广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网&#xff0c;同时拥有全球最大的开发者专业社群。下面是小编为大家搜索整理的java考试强化训练题&#xff0c…

抗疫进展:多家科研机构联合筛选出五种可能有效的抗病毒药物

2月3日&#xff0c;华中科技大学同济医学院基础医学院、华中科技大学同济医学院附属武汉儿童医院、西安交通大学第一附属医院、中科院北京基因组研究所、华为云联合科研团队宣布&#xff0c;筛选出五种可能对2019新型冠状病毒&#xff08;2019-nCoV&#xff09;有效的抗病毒药物…

GAN的一些很酷的应用

在GAN发展的最初几年里&#xff0c;我们取得了令人瞩目的进展。当然&#xff0c;现在不会是像恐怖电影里那样有邮票大小的面部照片了。2017年&#xff0c;Gan制作了10241024张能愚弄人才童子军的照片。在未来几年&#xff0c;我们可能会看到GAN生成的高质量视频&#xff0c;由此…

java项目短信群发接口_JAVA实现第三方短信发送过程详解

想使代码生效需要注册&#xff1a;在muven项目里面导入jar包commons-codeccommons-codec1.4commons-httpclientcommons-httpclient3.1commons-loggingcommons-logging1.1.1org.apache.httpcomponentshttpclient4.3.1com.alibabadruid1.0.8com.alibabadruid1.0.8创建一个测试类&…

两亿人在家开会!钉钉紧急扩容1万台云服务器

2月3日是一个特殊的开工日&#xff0c;为防范疫情&#xff0c;在阿里巴巴钉钉上有超过1000万家企业组织的2亿上班族在线开工。为支持此次史无前例的办公需求&#xff0c;钉钉在阿里云上紧急扩容1万台云服务器来保障钉钉视频会议、群直播、办公协同等功能&#xff0c;保障用户流…