跳到主内容
快讯直播
AI智模界
AI 词典

权重初始化:别让深层网络一开始就“聋”了

一句话定义:权重初始化(Weight Initialization)是指在训练开始之前,为神经网络里每一个权重参数赋予初始数值的过程。它看起来只是一次“填随机数”,实际上决定了信号能不能在几十上百层之间顺利传递。

为什么不能随便填

先把网络想象成一场接力传话:每一层都是一个传话人,把上一层的消息乘以权重、加上偏置,再交给下一层。如果每个传话人都习惯把音量压到九折,传过 50 层,声音只剩原来的 0.5%;反过来,每个人都放大一点,信号很快就会震耳欲聋。深度网络里的“信号”就是激活值和梯度,它的幅度会随着层数指数级放大或缩小——这就是梯度爆炸与梯度消失,而初始权重的尺度直接决定了开局往哪边走。

更极端的错误是全部填 0(或同一个常数)。此时同一层里所有神经元的输出完全一样,反向传播收到的梯度也一样,它们会永远同步更新,等于一层里只养了一个神经元。这种“对称性无法打破”是硬伤,所以偏置可以初始化为 0,权重不行。

Xavier 和 He 在做什么

Xavier 初始化(也叫 Glorot 初始化)的思路是:让每一层输出的方差大致保持不变,同时兼顾反向传播时梯度的方差,因此把权重方差取在 2/(fan_in + fan_out) 附近,其中 fan_in、fan_out 分别是该层的输入和输出连接数。它适合 tanh、sigmoid 这类两端会饱和的激活函数

He 初始化(Kaiming 初始化)是 Xavier 针对 ReLU 的修正版。ReLU 会把一半的输入直接压成 0,相当于方差被砍掉一半,所以要把权重方差放大到约 2/fan_in 来补偿。一句话记法:用 ReLU 就用 He,用 tanh/sigmoid 就用 Xavier。

做法权重尺度(近似)常见搭配主要问题
全零 / 常数0对称性无法打破,学不动
固定小随机数如 0.01浅层网络深层易梯度消失
Xavier / Glorot2/(fan_in+fan_out)tanh、sigmoid配 ReLU 偏小
He / Kaiming2/fan_inReLU 及其变体需正确判断 fan_in
预训练权重由上游模型给出迁移学习、微调依赖已有模型

和相邻概念的区别

它常被和 Batch Normalization、残差连接混为一谈。后两者是训练过程中持续稳定数值的手段,属于“中途补救”;初始化只在第 0 步起作用。但初始化做对了,后面的补救会轻松很多,甚至不需要。另外,加载预训练权重本质上也是一种初始化,只是起点不再是随机数,而是别人已经学到的东西——这也是微调能快速收敛的原因之一。

对从业者的实际意义

主流框架都给了默认初始化(如 PyTorch 的默认方案),所以日常很少手写。真正要小心的是三种情况:换了激活函数却没换初始化;自己手写层或自定义算子,忘了初始化;复现实验时发现换了随机种子结果波动很大,说明初始化尺度可能落在危险区间。排查顺序可以很简单——先看各层激活值的均值和方差是否随层数剧烈变化,再看梯度的量级。

一句总结:初始化不决定模型的上限,但决定它有没有机会开始学习。它不是“随便填的随机数”,而是一次经过计算的起步姿势。具体 API 与默认行为请以所用框架的官方文档为准。

AI 生成本文由 AI 基于公开信息自动生成,仅供参考。