原创 秋山墨客 2025-05-30 08:30 江苏

深度神经网络在训练过程中如何保持信息的稳定?

?k=4f6e4760&u=https%3A%2F%2Fmmbiz.qpic

图片

点击上方蓝色字体,关注我们

本系列文章是原作者Rohit Patel的长篇雄文《Understanding LLMs from Scratch Using Middle School Math-A self-contained, full explanation to inner workings of an LLM》的深度学习与解读笔记。本篇是系列第九篇。我们强烈建议您在开始前阅读并理解前文(点击下方目录)。

 1. 一个简单的神经网络

 2. 这些模型是如何被训练的?

 3. 这些模型如何生成语言?

 4. 嵌入(Embeddings)

 5. 子词分词器(Sub-word tokenizers)

 6. 自注意力机制(Self-attention) 

 7. Softmax

8. 残差连接(Residual connections)

9. 层归一化(Layer Normalization)图片?k=09742918&u=?k=09742918&u=?k=09742918&u=?k=09742918&u=?k=09742918&u=?k=09742918&u=?k=09742918&u=?k=09742918&u=?k=09742918&u=

10. Dropout

11. 多头注意力(Multi-head attention)

12. 位置嵌入(Positional embeddings)

13. GPT 架构

14. Transformer 架构


信息在进入神经网络后,经过了N层形如流水线一样的模块(比如自注意力层)的不断加工后,信息就很容易不太稳定。残差连接把原始信息合并到输出以增强信息传播的准确性,今天介绍另一个神经网络中重要的“稳定器”:层归一化

01

两个重要的数学概念

层归一化的理解需要我们先回顾中学的两个重要数学概念及其应用意义:

【标准差】

  • 衡量一堆数字分散程度的指标。数字们离平均值越远、越分散,标准差越大;数字们越靠近平均值、越集中,标准差越小。

  • 标准差怎么算?(忘记的可以请教家里的中学生)

  1. 算出每个数字与平均值的差(离均差)。

  2. 把这些差平方(消除负号,并放大偏差)。

  3. 计算这些“差平方”的平均值(这叫做方差)。

  4. 对方差再开平方根(把单位变回原样)。

  • 比如:一组考试成绩20,50,60,80,90,平均分60。

    • 离均差计算:-40,-10,0,20,30

    • 方差  = (1600+100+0+400+900)/ 5 = 600

    • 标准差 = √600 ≈ 24.49。这说明这些同学的分数在60分上下24.49分左右波动。


    【标准分】

    • 衡量一个具体数字偏离平均值多少。公式:(具体数字 – 平均值) / 标准差。

    • 作用是消除了原始数据的单位和量级影响,纯粹表示它在群体中的相对位置。

    • 例子(接上):上面5个同学的标准分分别为-1.63,-0.41,0,0.82,1.22,这说明20分的同学水平明显低于平均水平;而90分的同学则相反。


    为什么需要用标准分?


    简单说就是它可以帮助我们更直观地理解这个数值在整体数据中处于的相对位置。同时,它可以将原本差异性很大的数值,拉到一个单位尺度更小的空间内,使得这种差异更加可控与稳定。(比如上面20和90的差距被拉到了-1.63和1.22的差距)


    ?k=0d9a11ed&u=https%3A%2F%2Fmmbiz.qpic

    没错,高考的标准分计算也是基于这个思想。它可以直观的体现你的水平所处的位置;还可以方便在不同年份、不同科目之间做比较,而不用考虑难度。比如,你的数学考70分,语文考90分,不能说明你语文更强。但如果你的数学标准分计算是2,而语文是1,那么说明你的数学一定更有优势。

    02

    所以,什么是“层归一化”?

        在神经网络中,尤其是像Transformer这样层数很深的模型里,神经元的输出值在不同层之间、同一层内部,可能会有非常大的差异。如果这些差异太大,网络在训练时就会变得非常不稳定,甚至难以收敛。就像我们前面用标准分数(Z-score)的例子一样:原始数据可能分布在20到90之间,跨度很大,但经过标准化之后,每个数据都被转化为围绕0波动、以标准差为单位的“标准分”,使得数据更集中、更容易比较。

        层归一化正是把这个思想应用到了神经网络中。它在每一层中,对单一样本的所有神经元输出进行标准化处理——减去均值,再除以标准差,从而让这些神经元的输出具有统一的尺度。这样可以有效地避免某些神经元输出特别大、而另一些非常小的情况,提升网络训练时的稳定性。与另外一种批量归一化(BatchNorm,本文不展开)不同,层归一化完全作用在每个样本自身,非常适合处理序列数据和小批量输入。

    ?k=8e98d46a&u=https%3A%2F%2Fmmbiz.qpic

        归根结底,层归一化的意义在于:让每一层的输出“更规范、更平衡”,就像考试成绩被转换成标准分一样,让后续处理更可靠与高效。这为神经网络特别是大模型的稳定训练和泛化性能,打下了基础。

    03

    缩放因子和偏移量

    虽然层归一化可以有效地把每层的输出“标准化”到均值为0、分布相对固定的状态,听起来非常合理,但这又带来一个问题:会不会把太多“原始的信息”给抹掉了?会不会有原始数据中真正重要的差异(比如某个神经元值特别大可能表示一个很强的信号)也给“压平”,失去了“个性”?

    当然会。为了解决这个问题,层归一化在处理之后,加入了两个可学习的参数缩放因子(Scale,记作 γ) 和 偏移量(Bias,记作 β)。这两个参数分别对每个神经元的标准化结果进行“放大/缩小”和“上移/下移”的操作(高考标准分也有类似变换过程):

    yᵢ = γᵢ * zᵢ + βᵢ  (zᵢ 是标准化后的值)

    • γᵢ * zᵢγ 可以放大(γ>1)或缩小(γ<1)标准化后的值 zᵢ。比如某个神经元原始的大小差异很重要,它就会学习一个较大的 γ 来恢复其重要性。

    • + βᵢβ 可以把整个值向上或向下平移。比如发现某个神经元的平均值(位置)本身就包含重要信息,它就会学习一个合适的 β 来把它移动到更关键的位置。


    ?k=0d9a11ed&u=https%3A%2F%2Fmmbiz.qpic

    以考试为例,你可以想象这两个类似于“权重”和“奖励”。比如你需要选拔数学特别优秀的学生,那么可以设定一个 γ=2的数学缩放因子,以放大数学成绩的重要性。而β则用来把整体的标准分做一个平移,改变其中心位置,以方便后续的处理(比如需要消除负数)。

    这样一来,虽然在训练开始时先让所有神经元“从统一起跑线出发”,但模型在学习过程中可以通过 γ 和 β 来重新调整每个神经元的输出范围和基准线。其最大好处是:在保证训练稳定的同时,保留了模型对数据差异进行“个性化解读”的能力这是层归一化既“标准化”又“不失灵活性”的关键所在。

    04

    总结

    总的来说,层归一化就像一个“稳定器”,把处理的结果标准化,并通过可学习的缩放和偏移参数,保留住重要的特征差异,让数据既规范又灵活,再交给神经网络的下一道工序做加工。

    需要注意的是,在 Transformer 的经典结构中,层归一化(LayerNorm)通常紧跟在残差连接之后,不过目前主流的模型则通常是在残差连接之前做层归一化。

    无论怎样,这种“残差连接负责传递核心信息,层归一化负责规范与调节”的搭配,让深层 Transformer 模型像流水线一样高效运行,确保 模型可以稳定训练、层层深入,最终获得令人惊叹的能力!

    ?k=e3607751&u=https%3A%2F%2Fmmbiz.qpic

    END

    福利时间


    为了帮助LLM开发人员更系统性与更深入的学习RAG应用,特别是企业级的RAG应用场景下,当前主流的优化方法与技术实现,我们编写了《基于大模型的RAG应用开发与优化 — 构建企业级LLM应用》这本长达500页的开发与优化指南,与大家一起来深入到LLM应用开发的全新世界。

    更多细节,点击链接了解图片


    交流请识别以下名片
    图片

    640

    640

    640?from=appmsg

    阅读原文

    跳转微信打开

    原创 秋山墨客 2025-07-07 08:00 江苏

    ?k=ccbc73fa&u=https%3A%2F%2Fmmbiz.qpic

    点击上方蓝字加入我们

    ?k=154cec1f&u=https%3A%2F%2Fmmbiz.qpic

    ?k=690b1834&u=https%3A%2F%2Fmmbiz.qpic

    本系列文章是原作者Rohit Patel的长篇雄文《Understanding LLMs from Scratch Using Middle School Math-A self-contained, full explanation to inner workings of an LLM》的深度学习与解读笔记。本篇是系列第十篇。我们强烈建议您在开始前阅读并理解前文(点击下方目录)。

     1. 一个简单的神经网络

     2. 这些模型是如何被训练的?

     3. 这些模型如何生成语言?

     4. 嵌入(Embeddings)

     5. 子词分词器(Sub-word tokenizers)

     6. 自注意力机制(Self-attention) 

     7. Softmax

    8. 残差连接(Residual connections)

    9. 层归一化(Layer Normalization)

    10. Dropout图片

    11. 多头注意力(Multi-head attention)

    12. 位置嵌入(Positional embeddings)

    13. GPT 架构

    14. Transformer 架构

    01

    什么是神经网络中的“过拟合”?

    在训练神经网络模型时,经常会遇到过拟合(overfitting)问题。所谓过拟合,就是模型在训练数据上表现很好,但在新数据(如测试集)上表现很差 。直观地说,就是模型“学得太用力”,把训练数据的噪音和细节都记住了,却没有学到普遍规律 

    ?k=55bd9c3e&u=https%3A%2F%2Fmmbiz.qpic

    ?k=6642eb2f&u=https%3A%2F%2Fmmbiz.qpic

    用一个形象的例子做比喻:好比一个学生在学习数学题只是死记硬背不同题目的解法与答案,却没有真正理解并学会举一反三,一碰到没见过的新题目就不会了 。

    ?k=c04872b9&u=https%3A%2F%2Fmmbiz.qpic

    对于大语言模型(LLM)而言,过拟合同样危险——例如,一个用于生成电影评论的语言模型,如果在训练时只是学会训练集中出现的特定短语、角色名字或剧情细节,那么它生成的影评可能在训练数据范围内看起来很逼真,但遇到全新的电影时就“蒙圈”了 。也就是它没有学会举一反三的能力,在新句子或新场景上表现糟糕。

    “过拟合”是在神经网络和机器学习中是一个普遍问题 。产生过拟合的原因通常是模型过于复杂(参数太多)而训练数据又太少或太单一

    对于语言模型来说,如果训练语料不够丰富,模型可能会“迷信”训练文本中的某些用词或句式,缺乏面对新语言现象的应变能力。

    02

    如何缓解“过拟合” – 正则化

    缓解“过拟合”的技术被称作正则化(regularization)。正则化的核心思想是对模型做一些约束、惩罚或改造,让它不那么容易死记硬背练集细节,而是学习更加普遍的模式。

    常见的正则化方法包括 

    • 增加训练数据:给模型喂入更多多样的样本,有助于平均掉噪声,让模型见多识广,不至于拘泥于训练集的小范围模式 


    • 降低模型复杂度:例如减少神经网络的层数或每层的神经元数量,或者选择更简单的模型架构。模型简单了,参数变少,就不那么容易过拟合 


    • 提前停止训练(Early Stopping):在模型对验证集性能开始变差时及时停止训练 。避免模型在训练集上越学越细、过度优化,从而保护模型的泛化能力。


    • Dropout 随机失活:这是神经网络中特有的一种正则化方法,我们下面详细介绍 


    以上技术可以单独或组合使用,目的都是提高模型的泛化(generalization)能力,让模型在陌生数据上表现更稳健 

    03

    Dropout:随机“丢弃”神经元

    【训练阶段】

    在机器学习里,有一个叫“集成学习”的方法非常有用:我们可以训练多个模型,让它们“投票”决定答案,通常比单个模型更准确。

    但问题是——训练好几个模型太耗资源了!

    Dropout 提供了一种“变通方式”:只用一个模型,每次训练时随机“关掉”一些神经元(比如一半),就像临时打造出一个“缩小版”的子模型。

    这些子模型结构不同,但都共享同一套参数。训练的过程,就像让主模型在各种“随机组合”中不断适应和优化自己,变得更灵活、更不容易过拟合。

    比如,当 Dropout 的概率是 p = 0.5 时,代表每次训练时大约有一半的神经元会被“屏蔽掉”,不会参与这次计算或更新。这会强迫模型学习备用方案,不能只依赖特定几个“聪明神经元”。

    我们用下图来说明:

    ?k=ef33362f&u=https%3A%2F%2Fmmbiz.qpic

    左图是标准的两层隐藏层神经网络,右图展示了应用 Dropout 后的网络结构。打叉的圆圈表示被随机丢弃的神经元,它们在当前训练迭代中不参与计算。每次训练都会随机丢弃不同的神经元,使得实际参与工作的网络结构不断变化。

    这种随机失活的效果,导致每一次迭代,网络结构都略有不同(因为不同的神经元被关闭),可以认为我们并行训练了一大批“缩水”的神经网络,然后让它们共享参数 ,从而达到训练多个子模型并平均的效果 

    因为某一次迭代中缺少了某个特定神经元,网络仍要学会完成任务;久而久之,每个神经元都不能“抱大腿”,不能依赖某几个特定伙伴共同作用来记住某个特征 。通过打乱这种“固定搭配”,Dropout 促使网络去学习更加鲁棒的特征,这些特征即使在其他部分神经元缺席时也依然存在并且有用。

    【推理阶段】

    那么,应用了Dropout的网络在推理(inference)阶段该如何工作呢?毕竟,测试或实际使用时我们希望利用完整的模型能力,而不是让一半神经元闲着(否则可能每次推理的结果不一样)。

    实际上,在推理时不再随机丢弃节点,而是让所有神经元都参加计算 。不过,为了与训练时的输出幅度相匹配,需要做一个等效的缩放(scale):如果训练中使用了p=0.5的Dropout,那么在测试时通常会将每个神经元的输出乘以(1–p)(即0.5)再输出 。这样可以保证输出的期望值不变,避免因为训练和测试阶段有效网络规模不一致而造成偏差。这种做法等价于将训练时众多随机子网络的预测进行平均,从而利用所有神经元共同完成任务。

    ?k=55bd9c3e&u=https%3A%2F%2Fmmbiz.qpic

    ?k=6642eb2f&u=https%3A%2F%2Fmmbiz.qpic

    以前面介绍的识别叶子与花朵的神经网络模型举例。

    训练集中,花朵的照片往往色彩鲜艳,而树叶的照片几乎都是绿色的。没有Dropout时,模型也许会走“捷径”——它发现颜色是区分花和叶子的最快线索,于是某些神经元专门学会了“识别鲜艳颜色”,只要看到画面颜色鲜艳就判定为花,绿色就判定为叶。这样一来,模型在训练集上很准(因为训练集里确实如此),但一旦遇到反常情况就麻烦了:比如一朵白色的花或者一片红色的叶子,模型可能会因颜色特征不符而判断错误。

    现在引入Dropout,在每次训练这个图像识别网络时,我们随机关闭一部分神经元。也许在某次迭代中,那个负责识别颜色的神经元刚好被“关掉”了。于是,这一次模型不得不退而求其次,依赖其他特征(比如形状、边缘轮廓等)来区分花和叶子。另一轮训练中,另一些神经元被关闭,模型又尝试不同的特征组合来完成任务。经过大量这样的随机组合训练,模型不会过度依赖某单一特征,如纯粹的颜色辨别。相反,它会学到更加全面的识别策略:既看颜色,也看形状和纹理。

    最终,当我们不用Dropout进行推理时(相当于所有特征通道都可用),模型已经掌握了多种判别依据,哪怕遇到颜色反常的花朵或树叶,也能做出正确判断。这就好比平时练习中你经常抽掉某些线索让模型练习“盲练”,培养出举一反三的本领,实战时它就不怕某个线索缺失或异常了。

    ?k=c04872b9&u=https%3A%2F%2Fmmbiz.qpic

    04

    Dropout的局限性和大模型的应用

    Dropout 虽然是防止过拟合的利器,但也并非完美无缺,它有一些局限和注意事项:

    • 降低模型容量:由于训练中有一定比例的神经元被舍弃,等于减少了模型可用的参数数量。这可能导致模型的拟合能力下降,训练误差一开始会比不使用Dropout时高。通常需要更长的训练时间或者更多的训练轮数来弥补这一点,否则可能走向另一个极端:欠拟合(underfitting)的情况。选择合适的dropout比例很重要:太高会丢掉过多信息,太低则起不到作用,一般隐层0.2~0.5是常用范围。


    • 并非处处适用:在某些网络层或模型结构中,Dropout并不适宜使用。例如在卷积神经网络的卷积层中,很少使用过高的dropout率,因为卷积层参数较少且有平移不变特性,本身不易过拟合。另外,一些正则化手段会与Dropout功能重叠或冲突,比如批量归一化(Batch Normalization)。总之,需要根据具体情况调整策略,而不是盲目应用Dropout。


    • 不能完全解决记忆问题:Dropout降低了模型对某些特定神经元/特征的依赖,但如果训练数据本身非常少或者分布单一,模型还是可能记住训练样本的细节。此时需要配合增加数据、多样化样本分布等其他方法才能根本上改善泛化能力。换言之,Dropout是减缓过拟合的工具之一,但并不是保证模型完全不记忆训练集的“万能药”。

    对于像 GPT-4 这样的大型语言模型而言,Dropout 的使用策略可能和小模型有所不同。大型模型通常拥有海量参数和数据,其训练流程可能只对每个样本遍历很少的轮次(一遍或几遍)就已足够 。在这种少轮次、大数据训练的情况下,模型倾向于欠拟合而非过拟合,因而对强力正则化的需求减小。一些现代的大型模型干脆在训练时省略了Dropout

    这并不意味着大模型不会过拟合,但他们往往采取了其它策略来提高泛化:比如使用权重衰减大量的数据恰当的训练轮次来控制过拟合 。另外,一些替代或改进的方法也在研究中,总体来看,在GPT-4o这类规模的模型中,Dropout并不再是防止过拟合的必须手段,更大的数据集、更好的数据多样性以及模型架构上的改进都在帮助模型获得良好的泛化能力。

    福利时间

    过去我们发表了很多 MCP(模型上下文协议)的原理介绍与实操分享。如果你希望进一步系统的掌握 MCP 的底层原理与工程实践,不再只是“用工具”,而是能够“打造工具”,那么我真诚推荐你阅读本公众号全新创作的新书

    📘《MCP原理揭秘与开发指南——构建可扩展的AI智能体》

    本书基于 2025-03-26 最新 MCP 协议规范 与 1.9.0 版本的 SDK 编写,全面覆盖从核心设计理念协议机制解析MCP 开发实践与完整源码案例,帮助你从根本上理解 MCP,并掌握 SDK 的高阶开发能力。

    请注意——这不是一本面向 MCP Server 使用者的“工具说明书”,而是一本为MCP开发者编写的、以MCP SDK解析与实战为核心的技术指南。

    本书内容:

    图片

    更多详情请点击以下链接:

    识别以下名片

    加入公众号交流群(说明来意)

    图片

    ?k=fa3aafaf&u=https%3A%2F%2Fmmbiz.qpic

    ?k=b6d19ca0&u=https%3A%2F%2Fmmbiz.qpic

    ?k=d0c3f8f5&u=https%3A%2F%2Fmmbiz.qpic

    ?k=cbcf9c2a&u=https%3A%2F%2Fmmbiz.qpic

    ?k=55bd9c3e&u=https%3A%2F%2Fmmbiz.qpic

    ?k=6642eb2f&u=https%3A%2F%2Fmmbiz.qpic

    ?k=c04872b9&u=https%3A%2F%2Fmmbiz.qpic

    ?k=0d20cb8d&u=https%3A%2F%2Fmmbiz.qpic

    ?k=55bd9c3e&u=https%3A%2F%2Fmmbiz.qpic

    ?k=6642eb2f&u=https%3A%2F%2Fmmbiz.qpic

    ?k=c04872b9&u=https%3A%2F%2Fmmbiz.qpic

    ?k=fe0b8dc6&u=https%3A%2F%2Fmmbiz.qpic

    ?k=b81c9053&u=https%3A%2F%2Fmmbiz.qpic

    阅读原文

    跳转微信打开