关于深度学习训练的工程技巧

news2024/11/24 6:19:38

前置基础

不同精度数据类型的动态范围
在这里插入图片描述

FP16的动态范围(6x10-8 ~ 65504)
FP32的动态范围(1.4x10-45 ~ 1.7x10+38)
可以看出Fp32的动态范围远大于fp16;
其中BF16的取值范围:
BF16(BFloat16)的取值范围也是按照IEEE 754标准定义的,它是一种16位浮点数格式,用于表示半精度浮点数。
BF16的取值范围为1个符号位(Sign Bit)、8个指数位(Exponent Bits)和7个尾数位(Significand Bits),总共16个位。符号位表示数的正负,指数位用于表示数的指数部分,尾数位用于表示数的尾数部分。这样就保留了FP32的近似动态范围;谷歌曾说过,这是因为神经网络对指数的大小比尾数敏感得多;
关于fp16的动态范围如何计算而来;
首先,看下十进制和二进制之间的转化:
在这里插入图片描述
再看下二进制科学计数法的表达方式:
在这里插入图片描述
其中,s是符号位,M是尾数,E是阶数
frac的第一位隐含1:M = 1.xxx…x,由于小数点前默认是1,所以只用表示小数点之后的;
E是阶数;
对于FP16而言:
在这里插入图片描述
由于阶数有正有负,所以5位的exponent要抽一位出来表示正负~;还剩下四位,最多可以表示pow(2,4)-1=15,也就是阶数E最大可以到15,关于fraction部分是10位,最大可以是全11111111111,就是2-1+2-2+…+2-10=0.999023
15*1.99903=65504;所以fp16最大的表示值就是65504
最小可以表达的非0正数是:
pow(2,-14)*pow(2,-10)=5.960464477539063e-08(非规格化表达方式,隐含进位);

混合精度训练
在这里插入图片描述

就是训练的时候前向推理用的是float16,然后优化的时候(就是计算梯度、更新参数的时候用的是float32);混合精度训练的好处就是可以节约内存、加速训练,同时可以保证精度;

反向传播
神经网络反向传播的过程可以看成是计算雅可比比矩阵连乘的过程;雅可比矩阵的连乘可以得到对某个参数的导数,根据该导数可以对该参数进行更新,关于具体的更新方式,不同的优化器有不同的方式;
所谓的雅可比矩阵就是y=f(x),其中y对于x的求导就是雅可比矩阵;
在这里插入图片描述

对于线性层,雅可比求导的结果就是权重;
在这里插入图片描述

训练技巧

训练过程中,最容易出现梯度爆炸的层是LayNorm和self-attention,因为这两个层的梯度可能比较大,导致参数更新出现超过表达范围的异常值;
很少有激活层用y=x^2,原因在于梯度值可能会无穷大;
在这里插入图片描述
Lipschitz常量用来表征函数中斜率最大的值;
作者认为,斜率越大,代表参数的变化范围也就越大,也就代表越大的搜索空间,也就代表模型就更强的表达能力;但是也意味着训练会更加不稳定;所以在表达能力和训练稳定之间存在着一个trade off;

在这里插入图片描述

线性层和卷积层,本质上都是线性操作,卷积层相当于共享参数的线性操作,但是self-attention是高阶的非线性操作,ResNet是由齐次运算堆叠而成,关注局部区域,而transformer是由非齐次运算堆叠而成,关注更大区域和更高的语义,齐次和非齐次运算的雅可比矩阵有非常不同的特性,会导致不同的优化难度;

在实际工程训练过程中,我们都知道transformer的训练难度更大,对于更多参数量更复杂的模型,最好可以用大一点的weight_decay(weight_decay相当于对参数进行一定比例的缩放),需要更久的warm-up时长,需要更小的学习率,来防止梯度消失和梯度爆炸;SGD优化器可能会对一些比较小的网络(比如CNN)work,它用的是一阶导去进行参数更新,但是针对于复杂的大模型,需要用到Adam优化器会效果更好(因为adam用的是一个二阶导,且会对梯度进行缩放);
但是以上的工程trick会缺乏理论的指导,
在这里插入图片描述
除开用clip或者scale的方式处理gradient或者weight,防止梯度爆炸以外,也要注意防止梯度消失,由于反向回传的原因,一般浅层的网络更容易发生梯度消失的问题;

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

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

相关文章

破解时间序列:移动平均法的综合指南

目录 前言一、时间序列介绍1-1、时间序列定义1-2、时间序列特性1-3、时间序列作用 二、统计学方法2-1、移动平均法介绍2-1-1、基本原理、计算过程2-1-2、移动平均法分类2-1-3、简单移动平均法2-1-4、加权移动平均法2-1-5、指数移动平均法(Exponential Moving Averag…

C# 反射(Reflection)总结

目录 什么是反射? 为什么使用反射? 反射机制的优缺点 如何使用反射? 一,Type访问元数据 获取/修改类中公有成员(属性PropertyI和字段Field等) 调用类中的公有构造函数Constructor 调用类中的公有方…

【软件工程】软件工程期末考试复习题

填空题(每空1分,共25分) 软件生存周期一般可以划分为,问题定义、可行性研究、需求分析、设计、编码、测试和运行和维护。基于软件的功能划分,软件可以划分成___系统软件_、支撑软件、应用软件__三种。可行性研究&…

【UE 从零开始制作坦克】10-炮弹溅射伤害

目录 一、解决炮弹穿过坦克炮塔问题 二、炮弹溅射伤害 效果 一、解决炮弹穿过坦克炮塔问题 打开“PHYS_West_Tank_M1A1Abrams”这个物理资产 造成这种现象的原因是,炮弹只会与如下紫色区域产生碰撞事件 选中坦克炮塔的骨骼 添加盒体外形 缩放盒体外形使其包裹住…

数据库原理之数据库事物

文章目录 一、事物介绍1.1 事物的目的是保证数据的一致性1.2 事物的ACID A、I、D是为了实现 C1.3 什么是本地事物(Local Transactions) 二、数据库系统如何实现ACID2.1 影响深远的ARIES理论2.2 本地事物如何实现原子性和持久性 A、D2.2.1 实现原子性和持久性的Commit Logging方…

基于高精度三维机器视觉的汽车曲轴无序抓取系统应用

Part.1 行业背景 汽车产业的高速发展,对零部件自动化生产提出了更高要求。随着汽车销量的水涨船高,传统的手工生产模式已经难以满足大批量生产的需求,自动化生产是必然趋势。 曲轴是汽车发动机的关键组件之一,生产过程复杂&#…

【MySQL】如何速通MySQL(4)

📌前言:本篇博客介绍如何速通MySQL的第四篇,主要介绍Mysql中主要的基础的入门,学习MySQL之前要先安装好MySQL,如果还没有安装的小伙伴可以看看博主前面的博客,里面有详细的安装教程。或者看一下下面这个链接…

Linux(centos )防火墙常见操作

1、查看防火墙当前状态 systemctl status firewalld 2、开启防火墙 systemctl start firewalld 3、关闭防火墙 systemctl stop firewalld.service 4、如果报错:-bash: firewall-cmd: command not found,可能是没有安装 firewall。安装命令&#xff1a…

处理错误 Xcode 编译找不到文件 libarclite_iphonesimulator.a

处理错误 Xcode 编译找不到文件 libarclite_iphonesimulator.a 视频 https://youtu.be/ZBMFs2PwkB4 错误描述 Error (Xcode): File not found: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/arc/libarclite_iphonesimulator.aEr…

双非硕士-美国联培-马普所博士后-985系主任的逆袭之路

本科和硕士都是双非学校,博士期间曾有美国联合培养经历,毕业后到德国马普所从事博士后研究。现任985高校特聘教授、博/硕士生导师,系主任。知识人网小编特刊介绍李志明博士的逆袭之路。 随着国内就业压力的增大,高校招聘教师也呈现…

element 设置 table中的按钮权限

子组件 <template><!-- 二次封装表格&#xff0c; 仅支持单选 :style"{ height: height }"--><div class"self_table"><el-table:data"tableData"style"width: 100%"v-loading"loading"stripeselecti…

[游戏开发]Unity随机网格中空位置_二叉树

[目录] 0. 前言1. 简单随机2. 可用位置内随机3. 二叉树权重随机&#xff08;1&#xff09;分区域随机&#xff08;2&#xff09;设置权重均衡概率&#xff08;3&#xff09;二叉树缓存权重&#xff08;4&#xff09;利用二叉树随机&#xff08;5&#xff09;优缺点 4. 测试对比…

简要介绍 | Backbone与Baseline的区别

注1&#xff1a;本文系“简要介绍”系列之一&#xff0c;仅从概念上对Backbone和Baseline进行非常简要的介绍&#xff0c;不适合用于深入和详细的了解。 Backbone与Baseline的区别&#xff1a;从神经网络到性能基准 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来…

大厂测试员是如何编写测试用例呢?

一、测试用例是软件测试的核心 软件测试的重要性是毋庸置疑的。但如何以最少的人力、资源投入&#xff0c;在最短的时间内完成测试&#xff0c;发现软件系统的缺陷&#xff0c;保证软件的优良品质&#xff0c;则是软件公司探索和追求的目标。每个软件产品或软件开发项目都需要…

【活动总结】0617COC深圳社区首场线下AI技术沙龙活动最强总结

文章目录 活动的发起活动的宣传活动的进行活动的收尾活动的总结活动的致谢更多展望友情链接 就在2023年6月17日&#xff0c;CSDN COC 深圳城市开发者社区&#xff0c;在深圳大学组织了一次以【智能未来 —— 人工智能与城乡规划的交叉对话】为主题的线下沙龙活动&#xff0c;活…

基于spring boot的JsonSerializer 业务内容国际化

说起国际化&#xff0c;真的是老生常谈了。后端有各种i18n的依赖组件&#xff0c;springboot本身也支持i18n的设置&#xff0c;前端vue也有i18n的设置&#xff0c;这些常规操作就不提了&#xff0c;大家可以去搜索其他博客&#xff0c;写的都很详细。 本篇博客主要写的是业务内…

5大技巧,实现视频号预约直播人数暴涨!

两个体量相当的视频号&#xff0c;为什么别人的直播间人数过万&#xff0c;而自己的直播间却寥寥无几&#xff1f;这其中有一个非常重要的原因&#xff0c;就是预约直播的工作没有做好。 通常情况下&#xff0c;视频号直播预约人数和最终场观呈现1:10的比例&#xff0c;换言之…

聊聊Redis中的跳跃表

Redis 大家项目中应该都用过&#xff0c;哪怕没有分布式锁、幂等校验的一些逻辑使用场景&#xff0c;缓存数据这个大家肯定都用过吧&#xff1f;最简单的key-value格式&#xff0c;直接存储String类型。 当然&#xff0c;针对越来越复杂的业务场景&#xff0c;后续也可能用到li…

合宙Air724UG Cat.1模块硬件设计指南--数字语音接口

数字语音接口 简介 数字音频接口DAI&#xff0c;即Digital Audio Interfaces&#xff0c;表示在板级或板间传输数字音频信号的方式。相比于模拟接口&#xff0c;数字音频接口抗干扰能力更强&#xff0c;硬件设计简单&#xff0c;DAI在音频电路设计中得到越来越广泛的应用。 特…

【学习日记2023.6.20】之 分布式事务_CAP定理_BASE理论_微服务集成Seata_Seata的四种事务模式_高可用架构模型

文章目录 1. 分布式事务问题1.1 本地事务1.2 分布式事务1.3 演示分布式事务问题 2. 理论基础2.1 CAP定理2.1.1 一致性2.1.2 可用性2.1.3 分区容错2.1.4 矛盾 2.2 BASE理论2.3 解决分布式事务的思路 3. 初识Seata3.1 Seata的架构3.2 部署TC服务3.2.1 下载3.2.2 解压3.2.3 修改配…