收藏破万,谷歌联手哈佛发布首个炼丹指南:教你科学化「调参」

news2024/11/20 18:31:49

调参不能只靠直觉,也是一门大学问!

虽然算法工程师往往调侃自己是「调参侠」,但调参这件事可能真没想象中那么简单。

比如,你是不是经常会有疑惑到底该选择哪个优化器?一个batch放多少数据?超参数如何设置?难道真要网格搜索全实验一遍吗?

最近,来自谷歌和哈佛大学的研究人员以非官方的名义发布了一本《深度学习调参套路》,把调参这件玄之又玄的事试图用科学的方法来解释,目前已收获超过1万个stars,喜欢记得收藏、关注、点赞。

文档链接:https://github.com/google-research/tuning_playbook

该项目由五名从事深度学习多年的科研人员和工程师合力编写,最早的甚至在2006年就开始写神经网络,涉及的领域也包括从语音识别到天文学的各种问题,并在过程中积累了大量的经验。

技术交流

技术要学会分享、交流,不建议闭门造车。 本文由粉丝群小伙伴推荐。

论文探讨、算法实战交流、求职内推、干货分享、解惑答疑,与2000+来自港大、北大、腾讯、科大讯飞、阿里等开发者互动学习。

目前已开通了技术交流群,群友已超过2000人,添加时最好的备注方式为:来源+兴趣方向,方便找到志同道合的朋友。

方式1、微信搜索公众号:机器学习社区,后台回复:加群;
方式2、可以直接加微信号:mlc2060。加的时候备注一下:研究方向
+学校/公司+CSDN,即可。然后就可以拉你进群了。

目标读者群体

阅读本文的读者可以是对最大化深度学习模型性能感兴趣的工程师和研究人员(包括个人和团队),应当对机器学习和深度学习概念有最基本的知识储备。

文中的重点是超参数调整的过程,同时也涉及了深度学习训练的其他方面,如pipeline的实现和优化,但对这些方面的描述并不完整。

作者假定要解决的机器学习问题是一个监督学习问题或类似的问题(例如自监督),即文中的一些规定也可能适用于其他类型的问题。

调参不能靠直觉

以目前的情况来说,要想让深度神经网络在实际应用场景中取得较高的性能,需要工程师们付出大量的努力与「猜测」性实验。

深度学习的性能不仅与模型架构有关,也与超参数的选择有关,但那些能提高模型性能的参数往往都没有被记录下来。

在论文写作中,为了让自己的叙述更加简介,作者通常不会在正文中提及调参取得sota的过程,而具体的参数对机器学习工程师来说显然更加重要。

而教科书也往往倾向于避免实践类的指导,即使有丰富的工程经验,作者也会优先选择对模型的原理进行介绍。

本文的作者发现,行业内目前还没有一次全面的实验来实际解释如何用深度学习获得更好的结果,只有一些博客文章、社交媒体等有一些零星的尝试结果,或是在论文的附录中简略介绍一下技巧,也有关于某个特定项目或pipeline的实例研究。

总之,关于调参,可参考的内容几乎是一片混乱。

从表面上来看,深度学习专家和一些初学者使用的调参方法都是类似的,但在他们手里,相同模型的性能却有着巨大的差距;不过,这些专家也承认,他们调参的方法可能并不总是可解释的,更多靠的是直觉。

随着深度学习技术的成熟,并对世界产生更大的影响,社区需要更多的资源,涵盖更多有价值的模型recipe,包括所有的工程细节,这对获得好的结果是非常关键的。

在亲身经历训练神经网络、教导新入行的机器学习工程师,以及为同事提供深度学习实践建议的过程中,作者团队积累了大量的经验。

虽然深度学习已经从一个局限于学术实验室的机器学习方法成长为了为数十亿人使用的产品提供底层支持的技术,但作为一门工程学科,深度学习仍然处于起步阶段,作者希望这份文档可以促进行业内对该领域进行系统性的研究。

作者同时表示,这篇文章只是在整理自己在开发深度学习模型时的经验,所以只能代表作者的观点,而非一种客观真理。

虽然本文的主要目的是解决在调整超参数时遇到的难题,但同时也涵盖了在模型开发时遇到的其他重要问题或错误,最好是让这篇文章可以随着技术的进步而不断发展。

最后,文章中还提及了很多作者还没有进行深入研究的内容,并在写作完成后才发现,整个模型构建过程中仍然有大量有趣且容易被忽视的研究问题。

开始新项目

在完成了足够多的问题定义、数据清理等基本工作后,在模型架构和训练设置上花时间才是有意义的。

编写好一个用来训练和评估的pipeline,可以方便地对模型进行训练和预测;选择好合适的评估指标,尽可能地能够指示出在部署环境中的模型性能。

然后,就可以开始调参了。

选择模型架构

当开始新项目时,尽量重用那些已经被证明有效的模型。

选择一个成熟的、常用的模型架构,先让模型跑起来之后再考虑搭建一个自定义的模型。

选择一个合适的模型架构通常意味着需要设置多个超参数来决定模型的大小和其他细节(如层数、层宽、激活函数的类型),在文章中「选择初始配置」和「提高模型性能的科学方法」章节中有详细介绍超参数的选择问题。

在可能的情况下,尽量找一篇解决与手头问题尽可能接近的论文,并将该模型作为起点进行修改。

选择优化器(optimizer)

从手头问题类型中最常见优化器开始。

在所有类型的机器学习问题和模型架构中,没有哪个优化器是「最好」的,即使只是简单地比较各个优化器的性能也是一项困难的任务。

作者建议坚持使用成熟的、常见的优化器,尤其是在开始一个新项目时,理想情况下最好选择用于同一类型问题的最流行的优化器。

要准备好关注所选优化器的「所有」超参数,具有更多超参数的优化器可能需要更多的调参工作来找到最佳配置。

这在项目的开始阶段尤其重要,因为我们正试图找到其他各种超参数的最佳值(例如架构超参数),同时将优化器的超参数视为滋扰参数。

在项目的最初阶段,最好是从一个更简单的优化器开始(例如,具有固定动量的SGD或固定的Adam),并在稳定后切换到一个更通用的优化器。

作者推荐的成熟的优化器包括但不限于:带动量的SGD(Nesterov变体);Adam和NAdam比带动量的SGD更通用,不过需要注意的是,Adam有4个可调整的超参数,并且很重要。

选择batch size

batch size主要控制训练速度,不应该用来直接调整验证集的性能。通常情况下,理想的选择是可用硬件所能支持的最大batch size。

batch size是决定训练时间和计算资源消耗的一个关键因素。

增加batch size通常会减少训练时间,一般来说都是有用的,比如可以在有限的时间内进行更多的实验来调整超参数,从而可能会构建一个性能更好的最终模型;也可以减少开发周期的延迟,更频繁地测试新想法。

但增加批处理量可能减少、增加或不改变资源消耗。

并且batch size不应该被当作验证集性能的可调整超参数,只要所有的超参数都调得很好(尤其是学习率和正则化超参数),并且训练步骤的数量足够多,使用任何batch size都应该可以达到相同的最终性能。

参考资料:

https://github.com/google-research/tuning_playbook

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

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

相关文章

人工智能英文缩写怎么读,人工智能英文缩写大全

1、人工智能英文缩写是什么? AI。 人工智能,英文缩写为AI。它是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术以及应用系统的一门技术科学。“十三五”以来,我国高度重视人工智能的发展,国内科研机构也围绕人工智能…

【Pytorch项目实战】之机器翻译:编码器-解码器、注意力机制AM

文章目录机器翻译 - 中英文翻译算法一:编码器-解码器(Encoder - Decoder)算法二:注意力机制(Attention Model,AM)2.1为何要引入注意力机制?2.2注意力机制的语义向量表示C计算2.3每个…

2023年首更,警惕6本SCISSCI期刊被剔除

2023年1月17日,Web of Science核心期刊目录首次更新。此次SCIE & SSCI期刊目录更新,与上次更新(2022年12月)相比,共有6本期刊被剔除出SCIE & SSCI期刊目录,详情如下: 公众号“Unionpub…

Redis实战9-全局唯一ID

发布优惠券的时候,每个店铺都可以发布优惠券,当用户抢购的时候,优惠券表中的id如果使用数据库的自增长ID会存在以下问题: 1:id的规律太明显,容易被刷 2:当数据量很大的时候,会受到单表数据的限…

三、分布式id,lua脚本,分布式锁,消息队列

文章目录优惠卷秒杀1.redis实现分布式ID2.优惠券秒杀下单3.超卖问题4.lua脚本5.分布式锁6.redis stream消息队列实现异步秒杀7.redis消息队列list实现消息队列PubSub实现消息队列stream实现消息队列stream的消息队列-消费者组学习黑马点评项目整理总结:https://www.bilibili.co…

5 个用于自动化的杀手级 Python 脚本

Python 是一种功能强大的语言,广泛用于自动执行各种任务。无论您是开发人员、系统管理员,还是只是想通过自动化日常任务来节省时间的人,Python 都能满足您的需求。 这里有 5 个 Python 脚本,可以帮助您自动执行各种任务 文章目录…

Spring Boot之Swagger

文章目录零 项目源码一 Swagger简介二 Spring Boot集成Swagger2.1 环境准备2.2 配置Swagger2.3 配置文档信息2.4 配置扫描接口2.5 配置开关Swagger2.6 配置API分组2.7 配置实体类2.8 常用注解零 项目源码 Swagger源码免费下载 一 Swagger简介 Swagger官网swagger是一款可以根…

深入开源和金融技术世界,《新程序员005》来了!

亲爱的 CSDN 以及《新程序员》的读者朋友们,《新程序员005:开源深度指南 & 新金融背后的科技力量》正式与大家见面!现在,点击下方封面,即可订阅,立享电子书,纸质书将在春节后为大家寄出&…

9、循环语句

目录 一、while循环语句 二、do…while循环语句 三、for循环语句 1. for语句 2. foreach语句 一、while循环语句 while语句也称条件判断语句,它的循环方式为利用一个条件来控制是否要继续反复执行这个语句。 语法如下: 当条件表达式的返回值为真时…

【并发编程十三】c++原子操作(1)

【并发编程十三】c原子操作(1)一、改动序列1、改动序列2、预测执行二、原子操作及其类别1、原子操作2、非原子操作3、原子类型三、标准原子类型1、标准原子类型的两种实现方式2、原子操作的用途3、原子操作的宏四、操作std:atomic_flag1、简介2、使用说明…

jsp ssm宿舍报修换宿管理系统-宿管idea

目 录 1 1绪论 1 1.1 课题研究的背景 1 1.2 课题研究的意义 1 1.3 本文主要工作 1 2 关键技术介绍 3 2.1 JSP技术的简介 3 2.2 SSM框架 3 2.3 MYSQL数据库 4 2.4 MySQL环境配置 4 2.5 B/S架构 4 3 需求分析与可行性分析 5 3.1功能需求分析…

年后公司缺人,面了13个测试员,发现他们都有一个通病.....

公司缺人,面了不少测试,结果竟然没有一个合适的。 一开始瞄准的就是中级的水准,也没指望来大牛,提供的薪资在10-20k,面试的人很多,但平均水平很让人失望。 看简历很多都是3年工作经验,但面试中…

数据不幸丢失怎么办?恢复丢失数据的 7 大方法

有时,您的系统可能会无意中被数据丢失等不可预见的事件唤醒。数据丢失已成为我们数字经济中的普遍现象,其发生的方式多种多样,包括意外删除、病毒攻击、无法访问的分区、数据损坏,甚至更灾难性的情况,如数据盗窃。 不…

Spring进阶:3步引入MybatisPlus多数据源,详细配置及原理解析

前言 MybatisPlus(MP)作为mybatis的增强工具,提供了配置多数据源的扩展,通过简单的几步配置,即可使用注解轻松切换数据源。 以下是dynamic-datasource提供的功能列表: 使用方法 1,引入dynamic-datasource-spring-bo…

第六章 数组、排序和查找

一、数组(P156) 1. 数组介绍 数组可以存放多个同一类型的数据。数组也是一种数据类型,是引用类型。即:数(数据)组(一组)就是一组数据2. 数组的使用 2.1 使用方式1:动态初始化 数组的定义:数据类型 …

uniCloud 微信小程序登陆全流程demo

ps: 博主一向不喜欢废话,直接说几个点,你悟了就直接去试,可以不用看完,还是得自己去试印象才深刻,博主写博文就怕自己以后忘记做个笔记顺便能帮一个是一个 1、你要获取unionid 肯定得访问外网,u…

【C++初阶】六、STL---string(总)|为什么学习string类|标准库中的string类|string 类常用接口

目录 一、为什么学习string类 1.1 C语言中的字符串 1.2 字符串在OJ面试中 二、标准库中的string类 2.1 string 介绍 2.2 编码格式 三、string 类常用接口 3.1 Member functions(成员函数) 3.1.1 构造函数(Construct) 3.…

C++11 并发指南七(C++11 内存模型一:介绍)

C11 并发指南七(C11 内存模型一:介绍) 文章目录C11 并发指南七(C11 内存模型一:介绍)第六章主要介绍了 C11 中的原子类型及其相关的API,原子类型的大多数 API 都需要程序员提供一个 std::memory_order(可译为内存序,访…

面试第一次被问到SDK测试,当时就懵了

01、是什么 客户端SDK是为第三方开发者提供的软件开发工具包,包括SDK接口、开发文档和Demo示例等。SDK和应用之间是什么关系呢?以云信即时消息服务为例,如下图所示,应用客户端通过调用云信SDK接口,进行消息等数据查询…

[前端笔记——CSS] 14.图像、媒体和表单元素

[前端笔记——CSS] 14.图像、媒体和表单元素1.CSS调整大小2.图片、媒体和表单元素2.1替换元素2.2 form元素2.3 举个实例1.CSS调整大小 一个空的<div>是没有尺寸的。如果在 HTML 文件中添加一个空<div> 并给予其边框&#xff0c;则会在页面上看到一条线。 <div…