LayerNorm位置玄学:用PHP代码模拟Pre/Post Norm对梯度的影响(附可视化)

大模型——理论基础——常用的Norm 这样的顺序对于训练更深的网络可能更稳定,因为归一化的输入可以帮助缓解训练过程中的梯度消失和梯度爆炸问题。比于LN,可以发现,不论是分母的方差和分子部分,都取消了均值计算,经作者在各种场景中实验发现,减少约 7%∼64% 的计算时间。通过上面三组实验,作者认为 Post-LN 的不稳定性部分来自于梯度消失以及初始化的时候,更新太大,陷入了局部最优,跑不出去了。都是根据模型的Encoder(N)和Decoder(M)层数计算出来的,通过如下方案,作者把模型的层数提升到了1000+。 阅读详情

LayerNorm位置玄学:用PHP代码模拟Pre/Post Norm对梯度的影响(附可视化)

在Transformer架构中,Layer Normalization(LayerNorm)的位置选择一直是个微妙而关键的设计决策。Pre Norm和Post Norm两种配置方式,看似只是顺序上的简单调换,实则对模型训练动态产生深远影响。本文将用PHP构建一个可交互的数学模拟环境,通过代码实例和三维可视化,带您直观感受两种Norm位置如何改变梯度流动的轨迹。

1. 理解LayerNorm与残差连接的协同机制

LayerNorm的核心作用是对神经网络层的输出进行标准化处理,使其均值为0、方差为1。当它与残差连接(Residual Connection)结合时,位置的不同会导致信息流动路径的显著差异:

// Post-Norm的数学表达(原始Transformer设计)
function postNorm($x, $attention) {
    $residual = $x;
    $x = $attention($x);
    $x = $x + $residual;  // 残差连接
    return layerNorm($x);  // 标准化在最后
}

// Pre-Norm的数学表达(现代主流设计)  
function preNorm($x, $attention) {
    $residual = $x;
    $x = layerNorm($x);    // 标准化在前
    $x = $attention($x);
    return $x + $residual;
}

这两种实现方式在梯度反向传播时表现出截然不同的特性:

特性Post-NormPre-Norm
梯度幅度随深度指数衰减保持相对稳定
训练稳定性需要精细调参对超参数更鲁棒
初始化敏感性高度敏感相对不敏感
收敛速度较慢(需warmup)较快

提示:Post-Norm的梯度衰减问题在深层网络中尤为明显。当网络达到32层时,底层梯度可能仅为顶层的1/10000。

2. 构建梯度流动模拟器

为了直观展示这种差异,我们创建一个PHP模拟器来计算不同层的梯度传递情况。以下代码模拟了10层网络的梯度反向传播过程:

class NormSimulator {
    const LAYERS = 10;
    
    // 模拟梯度反向传播
    public function simulate($isPreNorm) {
        $gradients = array_fill(0, self::LAYERS, 1.0); // 初始梯度为1
        
        for ($i = self::LAYERS-1; $i >= 0; $i--) {
            if ($isPreNorm) {
                // Pre-Norm的梯度传递:基本保持稳定
                $gradients[$i] = $gradients[$i+1] ?? 1.0;
            } else {
                // Post-Norm的梯度传递:逐层衰减
                $gradients[$i] = ($gradients[$i+1] ?? 1.0) * 0.6; 
            }
        }
        
        return $gradients;
    }
}

// 可视化输出
$simulator = new NormSimulator();
echo "Pre-Norm梯度: ".implode(", ", $simulator->simulate(true))."\n";
echo "Post-Norm梯度: ".implode(", ", $simulator->simulate(false));

运行结果示例:

Pre-Norm梯度: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
Post-Norm梯度: 0.01, 0.017, 0.028, 0.047, 0.078, 0.13, 0.22, 0.36, 0.6, 1

3. 损失曲面可视化实验

梯度行为的差异直接反映在损失曲面的形状上。我们通过PHP生成模拟数据,再用Python的Matplotlib进行三维可视化:

// 生成损失曲面数据
function generateLossSurface($isPreNorm) {
    $points = [];
    for ($x = -2; $x <= 2; $x += 0.1) {
        for ($y = -2; $y <= 2; $y += 0.1) {
            if ($isPreNorm) {
                // Pre-Norm的损失曲面更平滑
                $z = $x*$x + $y*$y + 0.3*$x*$y;
            } else {
                // Post-Norm的损失曲面更陡峭
                $z = 3*$x*$x + 3*$y*$y + 2.5*$x*$y;
            }
            $points[] = [$x, $y, $z];
        }
    }
    return $points;
}

// 输出CSV供Python可视化
file_put_contents('pre_norm.csv', 
    implode("\n", array_map(fn($p) => implode(",", $p), generateLossSurface(true))));
file_put_contents('post_norm.csv', 
    implode("\n", array_map(fn($p) => implode(",", $p), generateLossSurface(false))));

对应的Python可视化代码:

import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D

def plot_surface(filename, title):
    data = np.loadtxt(filename, delimiter=',')
    x, y, z = data[:,0], data[:,1], data[:,2]
    
    fig = plt.figure()
    ax = fig.add_subplot(111, projection='3d')
    ax.plot_trisurf(x, y, z, cmap='viridis')
    ax.set_title(title)
    plt.show()

plot_surface('pre_norm.csv', 'Pre-Norm Loss Landscape')
plot_surface('post_norm.csv', 'Post-Norm Loss Landscape')

可视化结果会清晰显示:

  • Pre-Norm:损失曲面呈现平缓的碗状,梯度方向稳定
  • Post-Norm:损失曲面存在陡峭的峡谷,不同方向的曲率差异大

4. 工程实践中的权衡选择

虽然Pre-Norm已成为现代Transformer架构的主流选择(如GPT、LLaMA等),但Post-Norm仍有其独特优势:

Pre-Norm的潜在问题:

  1. 表示塌陷(Representation Collapse):深层网络可能学到过于相似的表示
  2. 早期层更新不足:梯度在各层均匀分布可能导致底层学习不充分

Post-Norm的适用场景:

  • 浅层网络(<12层)中可能表现更好
  • 与特定类型的残差连接组合时(如DeepNorm)
  • 对模型最终表现有极致追求且具备充足计算资源时

实际项目中建议的决策流程:

function shouldUsePreNorm($project) {
    return $project['depth'] > 12 || 
           $project['training_stability'] > $project['peak_performance'];
}

5. 进阶技巧与混合方案

前沿研究提出了几种创新的Norm位置设计方案,值得在特定场景下尝试:

1. Sandwich Norm(三明治结构)

function sandwichNorm($x, $attention) {
    $residual = $x;
    $x = layerNorm($x);       // Pre-Norm
    $x = $attention($x);
    $x = $x + $residual;
    return layerNorm($x);     // Post-Norm
}

2. 自适应权重Norm

function adaptiveNorm($x, $attention, $alpha) {
    $residual = $x;
    $x = $alpha * layerNorm($x) + (1-$alpha) * $x;
    $x = $attention($x);
    return $x + $residual;
}

这些变体在保持训练稳定性的同时,试图保留Post-Norm的表达能力。实际测试中,sandwich结构在12-24层网络中显示出最佳的性价比。

大模型面试题35:Pre-LayerNorm vs Post-LayerNorm对深层Transformer训练稳定性 Pre-LN是“先调味再炒菜”,提前稳住食材状态,深层堆叠也不容易翻车;Post-LN是“先炒菜再调味”,浅层还行,深层就容易炒糊——实验的核心就是看谁在“炒很多遍”后还能保持好味道。通过控制变量法,对比不同层数下Pre/Post-LN的损失曲线、梯度范数和模型效果,可验证Pre-LN通过提前标准化特征分布,显著提升深层Transformer的训练稳定性,而Post-LN在深层时易出现梯度发散问题。 阅读详情

相关推荐

深度学习之Seq2Seq原理与实战

【代码】深度学习之Seq2Seq原理与实战。

yumiwangzi30的博客 139

【Transformer】Post-Norm和Pre-Norm

Post Norm对模型,尤其是较深的模型训练不稳定,梯度容易爆炸,学习率敏感,初始化权重敏感,收敛困难。因此需要做大量调参工作,以及learning rate warm up的必要工作,费时费力潜在好处是,在效果上的优势,但是这个事情还需要大量专业的实验来验证,毕竟现在大模型训练太费钱了,Post Norm 在效果上带来的提升很可能不如多扔点数据让 Pre Norm 更快的训练出来Pre Norm在训练稳定和收敛性方面有明显的优势,所以大模型时代基本都无脑使用 Pre Norm 了。

weixin_43799388的博客 5136

大模型之二十-中英双语开源大语言模型选型

从ChatGPT火爆出圈到现在纷纷开源的大语言模型,众多出入门的学习者以及跃跃欲试的公司不得不面临的是开源大语言模型的选型问题。基于开源商业许可的开源大语言模型可以极大的节省成本和加速业务迭代。还有很多其他的开源中英大语言模型,但基本都有Llama的影子,有些是直接扩充Lllama的词汇再用新的数据集重新训练,这些大语言模型包括等,这里就不一一列出了。

shichaog的专栏 2445

大模型面试常考知识点1

大模型面试必考题

baidu_33000721的博客 1306

深入理解NLP中LayerNorm的原理以及LN的代码详解

在NLP中,大多数情况下大家都是用LN(LayerNorm)而不是BN(BatchNorm)。最直接的原因是BN在NLP中效果很差,所以一般不用。LN是把**normalized_shape这几个轴的元素**都放在一起,取平均值和方差的,然后对每个元素进行归一化,最后再乘以对应的$\gamma$和$\beta$(**每个元素不同**)。**LN共有N1*N2个mean和var**(假设输入数据的维度为(N1,N2,normalized_shape),normalized_shape表示多个维度)......

捡起一束光的博客 4万+

Android 14密钥管理深度解析:从Keystore到Keymint的架构演进与Trusty安全实践

本文深入解析Android 14密钥管理系统的架构演进,从Keystore到Keymint的技术升级,以及Trusty安全环境的最佳实践。详细探讨了Keystore2的性能优化、Keymint的标准化设计,以及如何在Trusty TEE中实现安全密钥管理,为开发者提供构建现代密钥管理系统的实用指南。

weixin_42533120的博客 263

【大模型优化】深入理解 Pre-LayerNorm :让 Transformer 训练更稳

超深 Transformer 与大语言模型(LLM)时代,归一化策略直接决定了模型能否稳定收敛、推理性能能否最大化。把归一化层从 “残差之后” 挪到 “子层之前”(Pre-LayerNorm,Pre-LN),再将传统 LayerNorm 简化为 RMSNorm——只做均方根缩放、不再减均值——是 GPT-3、LLaMA-4、DeepSeek-V3 等主流 LLM 的标准做法。Pre-LN 让每一层在进入注意力或前馈前就保持单位尺度,显著缓解梯度爆炸/消失;RMSNorm 进一步减少 7-64 % 归一化 F

weixin_41645791的博客 1566

基于CY7C68013A芯片的USB2.0设计

基于FPGA的USB2.0读写控制项目简介CY7C68013A芯片介绍CY7C68013A芯片读写时序控制CY7C68013A芯片读写代码USB2.0的测试结果结束语 项目简介 我们前面已经写过了USB3.0的FPGA实现,所用到的芯片是FX600Q芯片,这次我们讲解USB2.0的FPGA代码的编写。我们用到的芯片是Cypress厂家的Cy7C68013A,该款芯片在市场上的应用率极广,我们这里不...

zhangningning1996的博客 1万+

[深度学习基础知识扫盲]-ONE-PEACE

在深度学习中,"modality adapters"(模态适配器)是指用于处理不同数据类型或模态的模块。在多模态学习中,我们经常需要处理来自不同传感器或数据源的数据,这些数据可能具有不同的数据类型、特征表示和分布。为了有效地将这些数据整合到深度学习模型中,我们可以使用模态适配器来对不同模态的数据进行预处理、特征提取或特征转换,使其能够与模型的输入相匹配。模态适配器可以包括各种操作,例如:1. 数据预处理:对不同模态的数据进行归一化、标准化或其他预处理操作,以确保它们具有相似的数据范围和统计特性。

Ression的博客 1233

零基础学习simulink-- 基于自适应模糊PID控制的直流电机速度控制系统

通过上述代码实现,您可以逐步创建和搭建一个基于自适应模糊PID控制的直流电机速度控制系统。该系统能够根据电机的状态和误差实时调整PID参数,确保电机速度稳定在设定范围内。自适应模糊PID控制具有较强的鲁棒性和适应性,能够在存在不确定性和扰动的情况下提供快速且精确的控制性能。Simulink提供了强大的建模和仿真工具,使得控制系统工程师能够快速构建复杂的控制算法,并将其应用于实际工程中。直流电机建模:建立直流电机的动态模型,包括电枢电压、电流、转速和负载扭矩。自适应模糊PID控制器设计。

amy_mhd的博客 413

10、皮肤 - 神经记录实验全流程解析

本博客详细介绍了皮肤-神经记录实验的全流程,涵盖实验所需的材料准备和具体操作方法。内容包括细胞外记录设备的设置、合成间质液(SIF)的制备与调节、小鼠后爪皮肤和胫神经的手术解剖步骤、清洁解剖后的记录准备、纤维分离与感受野识别方法,以及神经纤维机械响应的测量。该实验为研究神经纤维的活动与功能提供了重要的技术支持,适用于神经科学研究领域。

backprop5master的博客 186

大模型升级与设计之道:ChatGLM、LLAMA、Baichuan及LLM结构解析

本文通过深入剖析ChatGLM、LLAMA和Baichuan模型的升级路径,以及探讨大型语言模型结构选型,为大家提供了一个系统性的视角,梳理了大型预训练模型的关键要素。我们希望这些知识能够为大家在实际工程中构建更强大、灵活且高效的大型预训练模型提供有力的参考和指导。引言目前大语言模型在各个领域取得了显著的突破,从ChatGLM、LLAMA到Baichuan等,它们在处理各种自然语言任务时展现出了惊...

淘系技术 4098

基于八叉树的k近邻搜索

在八叉树中,每个节点都表示一个正方体的体积元素(体素),并且每个节点都有八个子节点(在不为空的情况下)。搜索最近邻点:一旦确定了查询点在八叉树中的位置,就可以开始搜索最近邻点了。搜索过程通常从查询点所在的叶节点开始,并逐步扩展到相邻的叶节点和父节点,直到找到k个最近邻点为止。k近邻搜索的目标是在给定的点云数据中,找到一个查询点的k个最近邻点。定位查询点:在搜索过程中,首先需要确定查询点在八叉树中的位置。返回结果:最后,搜索算法会返回找到的k个最近邻点的索引和它们与查询点之间的距离。

twnkie的博客 674

【LLM基础知识】LLMs-Norm&激活&FNN层知识总结笔记v5.0

原创 zzichen2024年07月19日 08:08江苏【导读】:本文是LLM知识点第五篇,介绍LLM中采用的Norm方法,重点介绍LLM常用的LayerNorm,RMSNorm,DeepNorm。接着介绍ReLU,GeLU,Swish激活函数和GLU及其变体激活函数,如SwiGLU激活函数。最后介绍LLM中的FFN层。

具身机器人和通用AI 3151

微信支付接口「系统繁忙 SYSTEM_ERROR」/「文件不存在」报错分析与解决方案 接口开发实现SDK

微信支付的“平台证书模式”只有5年的有效期,过期后微信支付将不再签发新的平台证书,转而要求开发者使用“微信支付公钥”来处理敏感信息加密及回调签名验证。然而,由于以下几点原因,许多开发者在调用 获取平台证书。尽管微信支付在技术迭代上有其必要性,但报错设计过于不友好。诸如“系统繁忙”这样的提示很难直接关联到平台证书失效或公钥切换问题。这样的信息表达,开发者不仅看不懂,还需要花费大量时间分析排查,非常影响效率。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 789

[VCS]VCS dump fsdb的精细化控制

本文介绍了VCS FSDB波形dump的精细化控制方法。主要内容包括:1)基本dump方式;2)通过$fsdbDumpoff排除特定层次;3)使用$fsdbDumpvars选择性dump指定模块;4)运行时动态控制dump开关;5)通过文件管理排除列表($fsdbDumpoffFile或自定义读取);6)层次控制策略(剪除整棵树或仅当前层)。这些方法可有效控制波形文件大小,提高仿真效率。

元直的博客 1035

Conformer Encoder GPU 加速策略较全面汇总

最近一直在做WeNet conformer encoder模型的GPU TensorRT加速,也有幸参加了NVIDIA Hackathon 2022 加速 Wenet 的比赛和阅读了NVIDIA 内部团队 关于 WeNet TensorRT加速的代码。学习到了很多东西,抛砖引玉进行汇总,欢迎各位大佬拍砖。以下加速策略描述以TensorRT为例进行简单描述。PS: 阅读前需要非常了解conformer encoder的模型结构,并比较熟悉TensorRT or CUDA。

大光叔叔的专栏 1920

cesium 深度图(获取区域最高最低点位)

文章摘要: Cesium深度图技术可用于获取区域地形高程数据,核心实现步骤包括:1)通过离屏相机构建独立渲染环境,使用正交投影确保采样精度;2)采用离屏渲染技术获取均匀分布的地形点数据。关键技术点包含多边形外包矩形计算、后台相机配置(5km高度正交投影)、1024×1024像素离屏视图设置,以及深度数据解析(RGBA格式转换和三维坐标还原)。该方法避免了主视图干扰,可精准获取区域内地形高程信息,为填挖方分析等应用提供基础数据支持。

God's asylum的博客 283

面试题:模型架构-LayerNorm 详解——Pre-LayerNorm vs Post-LayerNorm、LLMs 归一化方式、RMSNorm 与归一化位置全解析

6.1 归一化方式怎么说可以说:Transformer 里经典使用 LayerNorm,而很多现代 LLM 会使用更轻量的 RMSNorm。LayerNorm 做中心化和缩放,RMSNorm 主要做尺度归一化,计算更简单。6.2 归一化位置怎么说可以说:原始 Transformer 常见 Post-LN,而现代深层 LLM 更常见 Pre-Norm。也就是在 Attention 和 FFN 之前做归一化,再走子层和残差相加;在所有 block 后,还可能有 Final Norm。

闵浮龙的博客 400

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

​为什么Pre Norm的效果不如Post Norm?

©PaperWeekly 原创 ·作者 | 苏剑林单位 | 追一科技研究方向 | NLP、神经网络Pre Norm 与 Post Norm 之间的对比是一个“老生常谈”的话题了,本博客就多次讨论过这个问题,比如文章《浅谈 Transformer 的初始化、参数化与标准化》[1]、《模型优化漫谈:BERT 的初始标准差为什么是 0.02?》等。目前比较明确的结论是:同一设...

Paper weekly 1917

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Batch Norm、Layer Norm、Instance Norm、Group Norm、Switchable Norm总结

目录 1.综述 1. BN 2. LN 3. IN 4. GN 5. SN 2. 结论 1.综述 在入门深度学习时就深度学习中的一些概念做了一些介绍,但随着学习的不断深入,一些网络优化的技巧越来越多,才发现之前的理解的不够深入。在这里有对BN的理解,对出现的几种归一化进行一些个人理解的介绍,首先看一个直观图 归一化层,目前主要有这几个方法,Batch Normal...

一一 1万+

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

深度学习0:数学知识:正态分布1

步骤内容结果1引入e−x2e^{-x^2}e−x2钟形曲线2算它的面积I∫−∞∞e−x2dxI∫−∞∞​e−x2dx3平方变成二重积分I2I^2I24换极坐标简化计算5算出I2πI^2 = \piI2πIπIπ​6代入σ\sigmaσ和μ\muμ做变量替换得到σ2πσ2π​7除以它归一化得到正态分布公式2π2π​不是随便写的,它来自高斯积分∫−∞∞e−x2。

tellmewhoisi的博客 204

Transformer 为什么能取代 RNN?从自注意力讲起

2017 年谷歌在《Attention Is All You Need》中提出 Transformer,核心是。它如今是 GPT、BERT、ChatGPT 的共同底座。

anew___的博客 791

基于深度学习的商品评论情感分析系统-毕业设计

面向商品评论的中文情感分析系统,支持单条预测、批量分析、情感分布与关键词、报告导出。TextCNN、BiLSTM、Transformer 在同一词表、同一数据切分、同一种子与超参下公平对比,测试集 F1 分别为 0.9101、0.9089、0.9075。结论是这一规模下模型复杂度未带来收益,但误差结构不同。附技术栈、截图、文档预览与演示视频。

csbysj2020 122

【原创深度学习项目】基于深度学习的建筑工地防护装备检测系统|安全帽与反光衣检测系统(RT-DETR-L 模型)

本文设计并实现了一套基于RT-DETR-L的建筑工地防护装备检测系统,采用Django+Vue前后端架构,实现对安全帽、反光背心等7类装备及“无PPE”“未戴安全帽”等缺失状态的精准识别。系统支持图片、视频、摄像头实时检测,具备参数可调、数据可视化与统计分析功能,有效解决小目标漏检、误检及管理难问题,助力智慧工地安全管理落地。文末可获取源码。

qq_1445749146的博客 226

图解循环神经网络(RNN)

RNN(循环神经网络)就是“带记忆的网络”:让网络拥有一块“记忆”,在处理当前数据时,能同时参考之前看过的内容;它不一次性看完全部输入,而是像人读书一样,一个字一个字地读,每读一个字就更新一次脑子里的记忆,然后用这份记忆去理解当前这个字。但便签一直在被改写,新信息不断挤占旧信息,传到第 40 步时,“巴黎”的痕迹已经淡得几乎没了。读到“贵”的时候,网络并没有重新去查“好看”这个词——但“好看”的影响已经融在了便签里(那个 1.5)。这三个困难的共同点:答案不在当前这一个字里,而在“前面那串东西”里。

技术管理两手抓,两手都要硬. 384
上一篇: Ubuntu20.04无网络环境下Docker离线部署全攻略
下一篇: 从生物神经元到代码实现:手把手教你用Python构建感知器模型(附梯度下降详解)
study
博客等级 码龄27年 67粉丝 1642原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值