每天一个知识点——Normalization

news2024/11/28 2:40:11

这里结合大模型的学习,主要分析Layer Norm、RMS Norm和Deep Norm的异同,与此同时,究竟是在之前执行Normalization(Pre-Norm)还是之后执行(Post-Norm),也是一个比较喜欢拿来讨论的知识点。

一、为什么要做Normalization?

        ICS问题出现的根本原因在于神经网络每层之间,无法满足基本假设"独立同分布"。深度神经网络涉及到很多层的叠加,而每一层的参数更新会导致上层的输入数据分布发生变化,通过层层叠加,高层的输入分布变化会非常剧烈,这就使得高层需要不断去重新适应底层的参数更新。为了训好模型,我们需要非常谨慎地去设定学习率、初始化权重、以及尽可能细致的参数更新策略。

ICS( Internal Covariate Shift)问题导致的后果:

  • 上层参数需要不断适应新的输入数据分布,降低学习速度;
  • 下层输入的变化可能趋向于变大或者变小,导致上层落入饱和区,使得学习过早停止;
  • 每层的更新都会影响到其它层,因此每层的参数更新策略需要尽可能的谨慎;

二、Pre or Post?

Transformer的block模块里面包含了多处Normalization,具体结构如下: 

从图中可以看出,经过多头(multi-head)的self-attention之后结合残差网络,再做一次归一化。简化一下,如下图所示,

Pre-Norm的公式为:

x_{t+1}=x_t+F_t(Norm(x_t)) 

Post-Norm的公式为:

x_{t+1}=Norm(x_t+F_t(x_t))

问题一、为什么Pre Norm的效果不如Post Norm?Pre Norm的深度有“水分”!也就是说,一个L层的Pre Norm模型,其实际等效层数不如L层的Post Norm模型,而层数少了导致效果变差了?

原因:

\begin{aligned} x_{t+1}&=x_t+F_t(Norm(x_t)) \\ &=x_{t-1} + F_{t-1}(Norm(x_{t-1})) + F_t(Norm(x_t)) \\ &=... \\ &=x_0 + F_0(Norm(x_0)) + ... + F_{t-1}(Norm(x_{t-1})) + F_t(Norm(x_t)) \end{aligned}

所以在Pre Norm中多层叠加的结果更多是增加宽度而不是深度,层数越多,这个层就越“虚”。说白了,Pre Norm结构无形地增加了模型的宽度而降低了模型的深度,而我们知道深度通常比宽度更重要,所以是无形之中的降低深度导致最终效果变差了!

post-norm和pre-norm其实各有优势,post-norm在残差之后做归一化,对参数正则化的效果更强,进而模型的鲁棒性也会更好pre-norm相对于post-norm,因为有一部分参数直接加在了后面,不需要对这部分参数进行正则化,正好可以防止模型的梯度爆炸或者梯度消失,因此,这里笔者可以得出的一个结论是如果层数少post-norm的效果其实要好一些,如果要把层数加大,为了保证模型的训练,pre-norm显然更好一些。

问题二:为什么Layer Normalization要加在F的前面,而不是F的后面呢?

因为做完Layer Normalization之后的数据不能和平常的数据加在一起,如果这样做的话残差中从上一层出来的信息会占很大比重,这显然并不合理。

三、BatchNorm or LayerNorm?

这个问题争论了很久,也是面试官比较喜欢问的一个问题,貌似有点不死不休的意思。到底哪个好一定是有个定论吗?还是说不同场景下的选择?抑或是仅是理论上的讨论,在实操上并没有明显的性能差异?

首先列举一些网络中的解释:

        1. BatchNorm适用于CV,而LayerNorm适用于NLP,这是由两个任务的本质差异决定的,视觉的特征是客观存在的特征,而语义特征更多是由上下文语义决定的一种统计特征,因此他们的标准化方法也会有所不同。

        2. layernorm更容易并行训练。当每个device用不同的minbatch训练,我们需要额外地同步各个device上的batchnorm,用layernorm则不需要。

        3. layernorm所带来的hidden layer分布上的稳定性,促进了更平滑的梯度,更快的训练速度,更好的模型泛化能力等等。

        4. LayerNorm是后起之秀,挑战前辈BatchNorm必然是解决它的某些痛点或者劣势,那么BatchNorm有哪些痛点呢?

  • batch非常小,比如训练资源有限无法应用较大的batch,也比如在线学习等使用单例进行模型参数更新的场景
  • 对于rnn等动态的网络结构,同一个batch中训练实例有长有短,导致每一个时间步长必须维持各自的统计量,这使得BN并不能正确的使用。

        5. 约定俗称,比如NLP几个经典模型都是用的LayerNorm,之后很多的追随者也沿用了这一套。

另外需要注意的一个点是由于现在训练模型都是采用的mini-batch的方式,所以在batchnorm在估计训练集(推理阶段)整体的均值方差时,常采用EMA( exponential moving average),指数移动平均来估计:

\mu _{EMA}\leftarrow \lambda \mu _{EMA}+(1-\lambda )\mu _{B}

\sigma _{EMA}^{2}\leftarrow \lambda \sigma _{EMA}^{2}+(1-\lambda )\sigma _{B}^{2}

其中\mu _{B}\sigma _{B}^{2}为训练阶段的均值和方差,

\mu _{B}=X.mean(dim=0, keepdim=True)

\sigma _{B}^{2}=X.var(dim=0, keepdim=True)

然后对特征x进行归一化,

\hat{x}=\frac{x-\mu }{\sqrt{\sigma ^{2}+\epsilon }}

除了归一化,BatchNorm还包括对各个channel的特征做affine tranform(增加特征表达能力,有待考证):

y=\alpha \hat{x}+\beta

\alpha\beta都是可训练的参数。

四、RMS Norm和Deep Norm

RMS:Root Mean Square Layer Normalization

与layerNorm相比,RMS Norm的主要区别在于去掉了减去均值的部分,计算公式为:

\bar{a}_{i}=\frac{a_{i}}{RMS(a)}g_{i},  其中RMS(a)=\sqrt{\frac{1}{n}\sum_{i=1}^{n}a_{i}^{2}}

1、可以在梯度下降时令损失更加平滑?(有待考证)?

2、可以在各个模型上减少约 7%∼64% 的计算时间。

Deep Norm是对Post-LN的的改进,代码如下,

e135fbad38253919370571c9587b6152.png

作者认为 Post-LN 的不稳定性部分来自于梯度消失以及太大的模型更新,而DeepNorm可以缓解这个问题

  • DeepNorm在进行Layer Norm之前会以 \alpha参数扩大残差连接
  • 在Xavier参数初始化过程中以 \beta减小部分参数的初始化范围

说一千道一万,对于没法做到理论功底那么深厚的人来说,效果为王,谁效果好就用谁

a5c81cce8bead488474cbc1b0d2c5ac0.png

五、参考资料 

  1. DEEPNORM:千层transformer...

  2. 昇腾大模型|结构组件-1——Layer Norm、RMS Norm、Deep Norm

  3. BatchNorm与LayerNorm

  4. BatchNorm与LayerNorm的理解

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

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

相关文章

LoRaWAN网关与网络服务器(NS)的通信CUPS 协议介绍

LoRa Basics™ Station 定期查询 CUPS 服务器以获取更新。该协议是 HTTP/REST,使用Credentials中描述的客户端/服务器身份验证方法。对于每个查询,工作站都会提供有关其当前状态的信息,并接收包含其 LNS 和 CUPS 凭证更新的二进制 blob,以及具有任意更新的通用数据段。 通…

AIRIOT搭建低成本、更聪明的智能环卫系统,让管理更加高效智能

环卫工程作为城市基础设施保障,是城市建设管理中不可或缺的重要组成部分。随着城市进程的加快及技术的进步,环卫工程管理也在逐渐向精细化、智能化、绿色化等趋势发展。 智能环卫依托物联网、AI、大数据等技术,对环卫管理所涉及到的人、车、物…

ACM算法竞赛中在编辑器中使用输入输出样例-CPH

通用方法 我们可以在编辑器中创建三个文件,一个是main.cpp,一个是test.in,一个是test.out分别用来写代码,输入输入数据,显示输出数据 这种方法的好处是不需要插件,在任何编辑器中都可以实现,例如Devc,sublime,vscode…

【Unity细节】Unity打包后UI面板消失是怎么回事

👨‍💻个人主页:元宇宙-秩沅 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 秩沅 原创 收录于专栏:unity细节和bug ⭐关于物体的动画碰到其他碰撞器后停止播放的问题⭐ 文章目录 ⭐关于物体的动画碰…

Camunda 7.x 系列【3】Camunda 简介

有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot 版本 2.7.9 本系列Camunda 版本 7.19.0 源码地址:https://gitee.com/pearl-organization/camunda-study-demo 文章目录 1. 概述2. 核心组件2.1 流程引擎2.2 模型2.3 Web…

无涯教程-Perl - grep函数

描述 此函数从LIST中提取EXPR为TRUE的所有元素。 语法 以下是此函数的简单语法- grep EXPR, LIST返回值 此函数返回在标量context中表达式返回true的次数以及在列表context中与表达式匹配的元素列表。 例 以下是显示其基本用法的示例代码- #!/usr/bin/perllist (1,&qu…

webpack 热更新的实现原理

webpack 的热更新⼜称热替换(Hot Module Replacement),缩写为HMR。这个机制可以做到不⽤刷新浏览器⽽将新变更的模块替换掉旧的模块。 原理: ⾸先要知道 server 端和 client 端都做了处理⼯作: 在 webpack 的 watch…

在Cesium中给管道添加水流效果

添加效果前后对比: 关键代码: /*** 水流粒子,目前支持向上或者向下的效果* @param {Number} x* @param {Number} y* @param {Number} z* @param {Number} options* @example* options = {* color: Cesium.Color.AZURE,* emissionRate: 5, //影响水流速度* direc…

Python编程——谈谈函数的定义、调用与传入参数

作者:Insist-- 个人主页:insist--个人主页 本文专栏:Python专栏 专栏介绍:本专栏为免费专栏,并且会持续更新python基础知识,欢迎各位订阅关注。 目录 一、理解函数 二、函数的定义 1、语法 2、定义一个…

接口测试过程中常见的接口安全性问题,通用测试点整理归纳

我们日常的接口测试工作主要是验证接口的功能性(入参、出参、边界值等),在接口测试过程中遇到的一些接口安全性的问题,整理成了通用的测试点,不一定适用于全部的产品,仅做参考。 一、登录接口校验 验证登…

手写SpringCloud系列-负载均衡算法实现

手写SpringCLoud项目地址,求个star github:https://github.com/huangjianguo2000/spring-cloud-lightweight gitee:https://gitee.com/huangjianguo2000/spring-cloud-lightweigh 一:什么是负载均衡 最开始的系统访问量很少,就一个单机就足…

研究生阶段如何进入一个领域——兼李芒老师教育技术导论解读

文章 https://devpress.csdn.net/hpc/64c8bb57bfca273ff3549881.html

svg的图片怎么通过修改源码修改其颜色

这里有一张svg的图片&#xff0c;如下&#xff1a; 原svg的代码(在IDE中打开)如下&#xff1a; svg代码如下&#xff1a; <?xml version"1.0" standalone"no"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN""http://www.w…

最好用的六款虚拟机软件

下面&#xff0c;我将介绍目前市面上适合个人用户使用的六款最佳虚拟化软件&#xff0c;让你可以更好的选择。 01 — VMware Workstation Vmware作为全球最知名的虚拟化企业&#xff0c;至今已有超过20年的发展历史。在针对个人用户的产品上&#xff0c;Vmware提供了适用于A…

前端性能优化介绍与常见方法(一)

这是一个没有套路的前端博主&#xff0c;热衷各种前端向的骚操作&#xff0c;经常想到哪就写到哪&#xff0c;如果有感兴趣的技术和前端效果可以留言&#xff5e;博主看到后会去代替大家踩坑的&#xff5e; 主页: oliver尹的主页 格言: 跌倒了爬起来就好&#xff5e; 目录 一、…

ios swift alert 自定义弹框 点击半透明部分弹框消失

文章目录 1.BaseAlertVC2.BindFrameNumAlertVC 1.BaseAlertVC import UIKitclass BaseAlertVC: GLBaseViewController {let centerView UIView()override func viewDidLoad() {super.viewDidLoad()view.backgroundColor UIColor(displayP3Red: 0, green: 0, blue: 0, alpha:…

Dubbo 服务发布注册、订阅消费 流程

一、Dubbo服务发布 dubbo的服务提供者注册一共经历以下三个阶段 1) 配置 Dubbo 框架在服务注解这个后置处理器&#xff08;ServiceAnnotationPostProcessor&#xff09;中&#xff0c;利用扫描器&#xff0c;把含有 DubboService 注解的类对应的 Bean 定义收集到了一块&#…

【观察】张建林:走出“舒适区”,愿做智能运维的“布道者”

在出任科来研发中心副总经理一职之前&#xff0c;张建林在行业内已有着非常资深的“履历”&#xff0c;他曾任招商银行数据中心系统运行、应用管理负责人&#xff0c;招行资深工程师&#xff0c;对应用全生命周期的智能化运维具有非常丰富的理论研究与实战经验&#xff0c;还曾…

世界山系、火山和地震的分布

声明&#xff1a;来源网络&#xff0c;仅供学习&#xff01;

CentOS-6.3安装MySQL集群

安装要求 安装环境&#xff1a;CentOS-6.3 安装方式&#xff1a;源码编译安装 软件名称&#xff1a;mysql-cluster-gpl-7.2.6-linux2.6-x86_64.tar.gz 下载地址&#xff1a;http://mysql.mirror.kangaroot.net/Downloads/ 软件安装位置&#xff1a;/usr/local/mysql 数据存放位…