用 AI 逐行算 LayerNorm:另一条样本变大,当前这一行为何没变

前天 3阅读

看到神经网络里的“归一化”,容易把整张表的数一起求平均。让AI解释LayerNorm时,先给它一张只有两行的小表,并要求标出每个均值来自哪些格子。能否圈对统计范围,比背出公式更能检验理解。

用 AI 逐行算 LayerNorm:另一条样本变大,当前这一行为何没变

AI模型生成的概念插图:两条独立分组分别配有平衡符号,组内圆形仍保留差异;不代表软件截图、真实实验或精确数据图。

每行只处理自己的三个数

把两条样本写成[1,3,5]与[11,13,15],矩阵形状为2×3。约定normalized_shape=3,eps=0.00001,先不做可学习仿射变换。PyTorch文档把统计范围定义为normalized_shape指定的最后若干维;这里就是每行最后的三个数,方差采用除以元素个数的估计。

第一行均值为3,离均差是[-2,0,2],平方和为8,所以方差是8/3。第二行均值为13,离均差也为[-2,0,2],方差同样是8/3。每个输出按“离均差÷√(方差+eps)”计算,两行都约为[-1.224742575,0,1.224742575]。

现在仅把第二行换成[101,103,105]。第一行的均值和方差没有引用第二行,因此第一行结果保持不变。若AI因此改动第一行,就很可能把统计轴误写成跨样本的列方向。第二行整体加常数也会被减均值这一步抵消。

最终输出不必再是零均值

恢复原始输入,并指定逐特征的gamma=[1,2,0.5]、beta=[0,1,-1]。在标准化结果上先逐项乘gamma,再逐项加beta,第一行变为[-1.224742575,1,-0.387628712]。这一步既不是把三个gamma求平均,也不是为一整行只用一个缩放值。

要求AI交付两列结果:“仿射前”和“仿射后”。前一列可检查均值接近0,但由于eps存在,方差也只是接近1;后一列已经经过不同的缩放与平移,不能继续强求零均值、单位方差。把最终输出检查成失败,可能是验收条件用错了位置。

把易错输入留在练习卡背面

再放入[7,7,7]。它的离均差和方差都是0;保留正的eps,仿射前是[0,0,0],使用上面的beta后是[0,1,-1]。若先把eps删掉再算,就会出现0除以0,这不是LayerNorm“自动知道该填零”。

可用提示词:“按PyTorch LayerNorm的统计定义,处理[[1,3,5],[11,13,15]],normalized_shape=3,eps=1e-5。列均值、方差分母、标准化结果,再使用gamma=[1,2,0.5]和beta=[0,1,-1]。只改第二行后复算第一行,并检查常数行。保留中间数,不要以舍入后的数继续运算。”

本例的行是样本、列是特征,这个约定必须先说清。更高维输入中,“一行”这个口头说法不够,需要写出完整形状和normalized_shape;LayerNorm训练与评估都使用当前输入的对应统计量,也不能额外给它套上一份未定义的运行均值。

资料核对日期:2026年10月2日。数值为原创教学设定,已用独立Python计算复核,不代表真实模型性能测试。

参考资料

PyTorch:LayerNorm

文章版权声明:除非注明,否则均为云鹊BLOG原创文章,转载或复制请以超链接形式并注明出处。