Pre Norm 和 Post Norm 各自的优缺点?

Pre Norm 和 Post Norm 各自的优缺点?

"Pre Norm 和 Post Norm 各自的优缺点?​" 学妹这么回答

原创 看图学  2024年07月08日 07:55 山西

www.zeeklog.com  - Pre Norm 和 Post Norm 各自的优缺点?
www.zeeklog.com  - Pre Norm 和 Post Norm 各自的优缺点?

题目:

Pre Norm 和 Post Norm 各自的优缺点?

答案

这个问题其实还蛮难回答的,因为目前并没有特别好的理论来解释清楚。

我们先按时间顺序来梳理一下关于 Pre-Norm 和 Post-Norm 的研究。

Pre Norm 和 Post Norm 的区别 Layer Norm 和 Residual connections 组合方式的不同。

2017 Attention is All your Need

在原始的 Transformers 论文中,使用的是 Post Norm,如下所示。

www.zeeklog.com  - Pre Norm 和 Post Norm 各自的优缺点?

Post Norm 用公式可以表示为:

www.zeeklog.com  - Pre Norm 和 Post Norm 各自的优缺点?

每一层的输入先与 Attention 相加,然后才计算 Layer Norm。早期的很多模型都用的是 Post Norm,比如著名的 Bert。

Post Norm 之所以这么设计,是把 Normalization 放在一个模块的最后,这样下一个模块接收到的总是归一化后的结果。这比较符合 Normalization 的初衷,就是为了降低梯度的方差。但是层层堆叠起来,从上图可以看出,深度学习的基建 ResNet 的结构其实被破坏了

这就导致大家在训练 Transformers 的时候,发现并不是那么容易的训练,learning rate warm up, 初始化等各种招都用上,训练的时候还得小心翼翼

下一篇文章讨论了 ResNet 中  Identity mappings 的重要性,并且以此为基础提出了 Pre Norm。

2019 Transformers without Tears: Improving the Normalization of Self-Attention

假设输入 X、Attention(X)、FNN(X) 的均值为0,方差都为1,且相互独立。事实上可能没有那么理想,因为权重矩阵的分布在学习过程中并不一定能保持理想的分布,这里为了说明问题对建模进行了简化。

对于两个均值为0,方差为1且相互独立的分布,LayerNorm 可以简化为

www.zeeklog.com  - Pre Norm 和 Post Norm 各自的优缺点?

,所以 Post Norm 可以简化表示为:

公式后面比较复杂的计算就用  来代替。从上面式子可以看出,输入X每经过一层,输出就变为 。

那么多层的结果如下:

原始的 ResNet 求导后会变成 ,这里的 1 起到了很好的防止梯度消失的作用。但是 Post Norm 之后求导变成了 。

这个式子的第一项会随着层数递减,而且是指数的变小。如果层数较低还好,如果像是现在的大模型一样堆叠32层,那

www.zeeklog.com  - Pre Norm 和 Post Norm 各自的优缺点?

几乎和0没什么区别了,也就丧失了 ResNet 的意义。

Post Norm 就像在何凯明修的高速公路上,每一层都加了一个收费站。

没了 ResNet 的架构,就导致 Transforemrs 在训练的时候,需要小心翼翼。都要加一个 learning rate warm up 的过程,先让模型在小学习率上适应一段时间,然后再正常训练。warm up 的过程虽然在 Transformers 的论文里就提了一嘴,但是真正训练的时候会发现真的很重要。

然后这篇文章将 Layer Norm 的位置改了一下,变成了 Pre Norm

www.zeeklog.com  - Pre Norm 和 Post Norm 各自的优缺点?

如图所示:

www.zeeklog.com  - Pre Norm 和 Post Norm 各自的优缺点?

从实验结果发现,Pre Norm 基本上可以不用 warm up。

2020 On Layer Normalization in the Transformer Architecture

这一篇论文更是对上面的结论提出了理论上的证明。

作者先通过实验证明了对于 Post Norm 来说,Lr warming up 是必须的

www.zeeklog.com  - Pre Norm 和 Post Norm 各自的优缺点?

上图可以看出

没有 warm up 效果很差,没有 warm up BLEU 只能到8,加上了可以到 34.

即使加了 warm up,对warm up 参数的设置也很敏感,比如 warm up step 在500 步时,不同的lrmax 的 BLEU 一个31,一个还不到3。

这就导致了大量的调参工作,还有warm up 阶段也拖延了训练速度。

然后论文的附录的第F 部分证明了,随着层数的增大,Post-Norm 期望的梯度会随着层数的变大而变大,而 Pre Norm 则几乎保持不变。如下图。

www.zeeklog.com  - Pre Norm 和 Post Norm 各自的优缺点?

所以当层数深的时候,大的梯度加上大的学习率训练很容易就崩盘了,也是刚开始得 warm up 一下。

所以总结来看,Pre Norm 的训练更快,且更加稳定,所以之后的模型架构大多都是 Pre Norm 了,比如 GPT,MPT,Falcon,llama 等。

后面论文的结论和前面大差不大,所以就写的简略点了。

2020 Understanding the difficulty of training transformers

但是 Pre Norm 也并不是都是好的,这篇论文指出,Pre Norm 有潜在的(表示塌陷) representation collapse 问题,具体来说就是靠近输出位置的层会变得非常相似,从而对模型的贡献会变小。

所以在2023年有一篇《ResiDual: Transformer with Dual Residual Connections》试图融合 Pre Norm 和 Post Norm 的优点。

www.zeeklog.com  - Pre Norm 和 Post Norm 各自的优缺点?

这也就暗示着 Post Norm 虽然不好训练,但是潜力似乎比 Pre Norm 要好

然后这篇论文中提到的在 LayerNorm 的时候,调整 x 和 f(x) 的比重,其思路被 DeepNorm 借鉴。只不过这里是可学习的权重,而 DeepNorm 则是超参数。

2021 Catformer: Designing stable transformers via sensitivity analysis

Percy Liang 团队的,算是一个小的汇总。给出了 不同 skip connect 的梯度方差和敏感性的指标。

www.zeeklog.com  - Pre Norm 和 Post Norm 各自的优缺点?

从图中也可以看出,相比于 Post Norm,Pre Norm 对层数更加不敏感。

汇总

通过上面的几篇论文,汇总如下:

Pre Norm 在训练稳定和收敛性方面有明显的优势,所以大模型时代基本都无脑使用 Pre Norm 了。但是其可能有潜在的(表示塌陷) representation collapse 问题,也就是上限可能不如 Post Norm。

Post Norm 则对训练不稳定,梯度容易爆炸,学习率敏感,初始化权重敏感,收敛困难。好处是有潜在效果上的优势,到底有没有呢?也不好说,因为现在大模型训练太费钱了,Post Norm 在效果上带来的提升很可能不如多扔点数据让 Pre Norm 更快的训练出来。

— END —

推荐阅读:

Read more

Docker 学习总结(78)—— WebAssembly 入门简介

Docker 学习总结(78)—— WebAssembly 入门简介

什么是 WebAssembly? WebAssembly 是一种定义二进制指令格式的开放标准,它支持从不同的源语言创建可移植的二进制可执行文件。这些二进制文件可以在各种环境中运行。它起源于 Web,并得到各大主流浏览器的支持。 Wasm 如何在浏览器中工作? 浏览器引擎集成了一个 Wasm 虚拟机,通常称为 Wasm 运行时,可以运行 Wasm 二进制指令。编译器工具链(如 Emscripten)可以将源代码编译为 Wasm 目标。这允许将现有的应用程序移植到浏览器,并直接与在客户端 Web 应用程序中运行的 JS 代码通信。 这些技术能让传统的桌面应用程序在浏览器中运行。现在它们可以在任何装了浏览器的设备上运行。一些著名的例子包括 Google Earth[6] 和用于计算机视觉的 Open CV[7]库。 Wasm 如何在服务器上运行? 除了浏览器,也有可以在浏览器之外运行的 Wasm 运行时,包括

By Ne0inhk
一文读懂 web 3.0

一文读懂 web 3.0

一、关于web 3.0 Web 3.0 是结合了去中心化和代币(Token)经济学等概念,基于区块链技术的全新的互联网迭代方向,意在解决Web2.0 带来的生态不平衡、发展不透明等问题。与AR/VR等前端创新相比,其源于对后端生产关系的创新。目前Web3.0 处于发展早期,但势能强,2021年全球区块链初创企业融资金额达 252 亿美元,同比增长超700%,Web3.0 将与AR/VR、AI等技术融合发展,开创新阶段。 Web3.0 当下拥有多种定义和元素,其中包括区块链、元宇宙、VR/AR 等,根据维基百科定义,Web3.0是结合了去中心化和代币(Token)经济学等概念,基于区块链技术的全新的互联网迭代方向。Web3.0一词由以太坊(Ethereum)联合创始人

By Ne0inhk
科普文:主流JDK性能大比拼;Zulu OpenJDK/OpenJDK/Oracle JDK/GraalVM CE

科普文:主流JDK性能大比拼;Zulu OpenJDK/OpenJDK/Oracle JDK/GraalVM CE

市面上可供选择的JVM发行版还是有不少的。选择合适的JVM需要考虑不同的因素。性能是其中一个重要的因素。靠谱的性能研究是很困难的。在本文中,我创建了一个测试,在不同的JVM上执行对比测试。测试程序包括Spring Boot REST应用,使用Prometheus监控JVM并使用Grafana可视化。下图是示意图。除了soapui外,所有东西都在docker容器中运行。 隔离干扰因素 如何确定没有别的因素干扰你的设施。我们可以通过尝试隔离分配给流程的资源来实现。 例如,分配专用CPU和固定数量的内存。 我还进行了几项测试,这些测试将资源限制放在负载均衡器,监控软件和可视化软件上(为这些资源分配不同的CPU和内存)。 为进程分配特定资源(使用docker-compose v2 cpuset和内存参数)似乎不会对单个进程负载和响应时间的度量产生很大影响。 我还比较了启动,负载和无负载情况。 在这些不同情况下,测试结果没有很大变化。 为进程分配特定CPU和内存 使用docker-compose无法为进程配置特定CPU。 docker-compose v3不支持为进程分配特定的CPU

By Ne0inhk
信贷系统学习总结(5)—— 简单的风控示例(含代码)

信贷系统学习总结(5)—— 简单的风控示例(含代码)

一、背景 1.为什么要做风控? 目前我们业务有使用到非常多的AI能力,如ocr识别、语音测评等,这些能力往往都比较费钱或者费资源,所以在产品层面也希望我们对用户的能力使用次数做一定的限制,因此风控是必须的! 2.为什么要自己写风控? 那么多开源的风控组件,为什么还要写呢?是不是想重复发明轮子呀。要想回答这个问题,需要先解释下我们业务需要用到的风控(简称业务风控),与开源常见的风控(简称普通风控)有何区别: 风控类型 目的 对象 规则 业务风控 实现产品定义的一些限制,达到限制时,有具体的业务流程,如充值vip等 比较复杂多变的,例如针对用户进行风控,也能针对用户+年级进行风控 自然日、自然小时等 普通风控 保护服务或数据,拦截异常请求等 接口、部分可以加上简单参数 一般用得更多的是滑动窗口 因此,直接使用开源的普通风控,一般情况下是无法满足需求的 3.其它要求 * 支持实时调整限制 很多限制值在首次设置的时候,基本上都是拍定的一个值,

By Ne0inhk