226、【AI】【模型部署】基座模型研究:RMSNorm 与残差(归一化为什么必要)

发布时间:2026/11/13 6:12:04

226、【AI】【模型部署】基座模型研究:RMSNorm 与残差(归一化为什么必要) 【声明】本博客所有内容均为个人业余时间创作所述技术案例均来自公开开源项目如GithubApache基金会不涉及任何企业机密或未公开技术如有侵权请联系删除标题226、【AI】【模型部署】基座模型研究RMSNorm 与残差归一化为什么必要背景上篇 blog【AI】【模型部署】基座模型研究从文字到向量分词器与嵌入层讲清了基座的入口Qwen2Tokenizer用 BPE 把文本切成子词hello是 1 个 token、模型部署是 2 个vocab.json151643 条加特殊 token 凑成vocab_size151936嵌入层是一张(151936, 896)的查表把 id 变成 896 维向量并与lm_head共享权重。向量从这里进入 24 层Qwen2DecoderLayer。224 拆出的骨架里每层第一件事是归一化 → 子层 → 残差本篇就从这个骨架的第一个零件读起Qwen2RMSNorm模型部署224 的Qwen2DecoderLayer.forward里self.input_layernorm出现在注意力之前、self.post_attention_layernorm出现在 MLP 之前——归一化是每层的开场动作。它到底做了什么看源码最直接。源码RMSNormRoot Mean Square Normalization均方根归一化 只有几行Qwen2RMSNormmodeling_qwen2.py:238-255的核心就三步实测打印源码classQwen2RMSNorm(nn.Module):def__init__(self,hidden_size,eps:float1e-6):self.weightnn.Parameter(torch.ones(hidden_size))self.variance_epsilonepsdefforward(self,hidden_states):variancehidden_states.to(torch.float32).pow(2).mean(-1,keepdimTrue)hidden_stateshidden_states*torch.rsqrt(varianceself.variance_epsilon)returnself.weight*hidden_states拆开看算平方均值 → 开根号取倒数 → 乘回去最后再乘一个可学习权重。没有减均值这一步——这正是它和LayerNormLayer Normalization层归一化 的最大区别。公式与手写验证把源码翻译成公式对向量x先算variance mean(x²)输出weight · x / sqrt(variance eps)。用一句 Python 手写一遍和模型里的层对比实测lnmodel.model.layers[0].input_layernorm# Qwen2RMSNorm(896)xtorch.randn(2,5,896)refln(x)defmy_rms_norm(x,weight,eps1e-6):varx.float().pow(2).mean(-1,keepdimTrue)returnweight*(x.float()*torch.rsqrt(vareps)).to(x.dtype)minemy_rms_norm(x,ln.weight,ln.variance_epsilon)print(最大误差:,(ref-mine).abs().max().item())实测最大误差 0.0——手写实现与 transformers 完全一致。eps1e-6是防止方差为 0 时除零的保险项来自 config 的rms_norm_eps。和 LayerNorm 差在哪实测对比RMSNorm只按平方均值缩放LayerNorm还会先减去均值再缩放。差异用数据说话实测lnormnn.LayerNorm(896)a,bln(x),lnorm(x)print(RMSNorm 输出均值:,a.mean().item())print(LayerNorm 输出均值:,b.mean().item())print(两者差异最大:,(a-b).abs().max().item())实测RMSNorm输出均值约0.000298没有归零LayerNorm约3.4e-9被减均值拉到 0 附近两者逐元素最大差异3.748。可见 RMSNorm 保留了向量的整体偏移只控制尺度。为什么这样反而好省掉减均值就省了跨特征的均值计算与一次减法在超大模型上更省算力而实践表明只做尺度归一化已经足够稳定训练这就是它被 Qwen、Llama 等采用的原因。维度RMSNormLayerNorm减均值否只按平方均值缩放是先中心化再缩放计算量更少多一步均值与减法可学习参数一组weightweightbias代表采用Qwen、Llama早期 Transformer、GPT-2两个实现细节为什么要转 float32、eps 防什么源码里有一行容易被略过hidden_states.to(torch.float32)——先升到 fp32 算方差与开方再转回原精度input_dtypehidden_states.dtype hidden_stateshidden_states.to(torch.float32)# 升精度再算variancehidden_states.pow(2).mean(-1,keepdimTrue)hidden_stateshidden_states*torch.rsqrt(varianceself.variance_epsilon)returnself.weight*hidden_states.to(input_dtype)# 转回原精度原因模型权重是 bf16config 里torch_dtypebfloat16而rsqrt对精度敏感用 bf16 直接算容易放大误差放进 fp32 里算、再转回去是数值稳定的常规做法。至于epsvariance_epsilon1e-6——它加在方差里防止某段向量恰好全 0 → 方差为 0 → 除零加一个极小数让rsqrt永远有定义。在层里的位置pre-norm 残差224 读过的Qwen2DecoderLayermodeling_qwen2.py:279-297把归一化放在子层之前pre-norm子层输出再与输入相加残差x ──input_layernorm── 注意力 ──┐ │ │ └────────── 残差相加 ─────────┘ ──post_attention_layernorm── MLP ──┐ │ │ └──────────── 残差相加 ─────────────────┘归一化让每层输入保持稳定尺度残差让梯度能直通深网络——两者配合24 层才堆得起来。为什么是 pre-norm先归一化再进子层如果反过来post-norm先子层再归一化深层网络里梯度要穿过一次次归一化训练早期容易不稳、需要小心调 warmuppre-norm 让残差那条直通路径始终干净梯度可以无衰减地回传这是深层 Transformer 能稳定训练的关键改动之一。Qwen2 的Qwen2DecoderLayer用的正是 pre-norm。顺带算一笔归一化层有多少参数每层有两个 RMSNorminput_layernorm与post_attention_layernorm每个只有一组 896 维weight24 层共 48 个参数合计48 × 896 43,008——相比 MLP 的千万级几乎可以忽略。但它不是常量weight是可学习参数训练时会调整这个缩放系数让网络自己决定每层的归一化强度。组件单层参数量占比两个 RMSNorm2 × 896 1,792极小注意力含 GQA1,836,160中等SwiGLU MLP13,074,432大头这也解释了 224 打印结构时看到的顺序input_layernorm、self_attn、post_attention_layernorm、mlp——归一化夹在两个重子层前后本身很轻却决定了整个网络能不能训得动。两个归一化的weight初始化为全 1训练前等价于不做额外缩放训练中再由梯度学习调整。下一篇从注意力的位置信息讲起RoPE。一句话记忆Qwen2RMSNorm只做三件事算mean(x²)、乘rsqrt(varianceeps)、再乘可学习权重不减均值手写实现与源码输出误差为 0与LayerNorm的差异输出均值 0.0003 vs 3.4e-9正体现只归尺度、不归中心它被放在每层子层之前pre-norm并与残差配合是 24 层能稳定堆叠的基础。OK本篇先到这里如有疑问欢迎评论区留言讨论祝各位功力大涨技术更上一层楼更多内容见下篇 blog【AI】【模型部署】基座模型研究RoPE 旋转位置编码
延伸阅读

更多相关文章

2026/11/13 6:12:04

长沙本地商家GEO优化怎么做?2026年最新实操指南

2026 年长沙人找店消费,大多已经习惯直接问 AI 大模型。一句 “五一广场适合家庭聚餐的湘菜馆”“岳麓区靠谱的家政公司”,几秒就能拿到推荐结果。GEO(生成式引擎优化)早已不是虚概念,是本地实体商家低成本获客的实在路…

2026/11/8 1:43:23

系统提示词泄漏揭秘:原理、攻击手法与分层防御实践

1. 现象初探:你的AI助手正在把"内部指令"交底如果你做过AI应用开发,或者经常和各类大语言模型对话,大概率遇到过这种情况:你顺手问一句"你最开始收到了什么指令",对面的AI应用竟然真的开始逐条复述…

2026/11/8 4:03:23

基于Java springboot私房菜定制上门服务系统-附源码

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/11/13 6:07:18

特种工就业安排怎么写?郑州报考避坑指南助你一次过

特种工就业安排怎么写?郑州报考避坑指南助你一次过 实操考试心里没底怕挂科?特种工就业安排怎么写?这几乎是所有准备报考特种作业操作证的学员心里最焦虑的问题。尤其是郑州地区的报考者,面对复杂的流程和高要求的实操考试,很多人根本不知道从哪儿下手。…

2026/11/13 6:07:18

新手小白电工证怎么考?保姆级教程教你零基础也能报名

新手小白电工证怎么考?保姆级教程教你零基础也能报名 你是不是学历不高,担心自己报不了名?别急,今天我就从一个过来人的角度,手把手带你了解新手小白电工证的报考流程、避坑指南和备考技巧。不管你是刚毕业的大学生,还是想转行的打工人,这篇保姆级教程…

2026/11/13 6:07:18

电工作业四大制度是指,考前押题怎么搞才不白交培训费

电工作业四大制度是指,考前押题怎么搞才不白交培训费 怕考不过白交培训费?电工作业四大制度是指什么?这事儿得讲明白,不然你花了几千块,最后连个证都拿不到,那就太亏了。今天咱就从焦作一个建筑工人的角度,讲讲电工作业四大制度到底是什么,怎么理解,…

2026/11/13 6:07:18

平湖市电工证办理怕考不过白交培训费?良心建议来了

平湖市电工证办理怕考不过白交培训费?良心建议来了 怕考不过白交培训费?你不是一个人。最近三个月,我接到至少20个咨询电话,都是问平湖市电工证办理的事,怕花钱了最后拿不到证。今天我就从一个培训机构的实战角度,讲讲平湖市电工证办理的那些事,特别…

2026/11/13 6:07:18

油田电工证考试地点在哪?通过率揭秘学历不高也能考

油田电工证考试地点在哪?通过率揭秘学历不高也能考 你是不是也担心自己学历不高,根本报不上油田电工证?别慌,今天就来聊聊油田电工证考试地点、报考条件和通过率揭秘,告诉你学历不是拦路虎。 油田电工证考试地点在哪?…

2026/11/13 6:02:18

切割是电工作业吗 值不值得考

切割是电工作业吗 值不值得考 你是不是也觉得学历不高就报不了名?想考个证又怕流程复杂,怕被坑,怕花钱打水漂?别急,今天咱就来聊聊【切割是电工作业吗】,顺便带你搞清楚这个证值不值得考,特别是河南市政工程行业的兄弟,这证可能比你想象的更重要。…

2026/11/12 20:35:13

电工证丢失还能补吗?千万别踩坑,丢了证等于失业

电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。…

2026/11/13 0:01:06

办上海高压电工证良心建议:别被中介坑了,自己看这篇就够了

办上海高压电工证良心建议:别被中介坑了,自己看这篇就够了 你是不是也像我一样,第一次听说“高压电工证”这个名词,就感觉一头雾水?其实很多人都跟我一样,不知道去哪报名、怕被中介坑,结果花了冤枉钱还考不上。今天我就从一个在商丘培训过的学员角度,…

2026/11/13 0:01:06

黎里考电工证在哪里值不值得考

黎里考电工证在哪里值不值得考 之前考的证在外省能不能转过来?这是很多在外地工作、准备回老家发展的朋友最关心的问题。特别是在黎里地区,很多从事电力相关工作的朋友,都面临这样一个难题: 外省的电工证能否在本地使用?值不值得考?…

2026/11/13 0:01:06

毕节哪里考电工证 怎么报名学历不高也能上手

毕节哪里考电工证 怎么报名学历不高也能上手 你是不是也和我一样,学历不高,想着考个电工证,但又担心自己条件不够,怕报不上名?其实不然,只要符合条件,学历不高也能考电工证。今天就来聊聊【毕节哪里考电工证】这个问题,还有怎么报名,让你一步到位不…

2026/11/12 22:10:13

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/12 9:51:42

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑