HuggingFace T5模型为何将未归一化输入添加到输出中?
T5模型残差连接设计疑问解答
问题背景
在HuggingFace的T5模型实现中,残差连接采用的是input + component_fct(norm(input))的形式——原始输入直接和子组件对归一化输入的运算结果相加,而非直觉上更合理的norm(input) + component_fct(norm(input))(后者相加的张量量级更一致)。这种设计的原因是什么?
核心设计原因
保留原始输入的特征完整性
原始输入未经过归一化,完整保留了初始特征的量级、分布以及自带的语义信号(比如不同token的权重差异)。在深度堆叠的Transformer结构中,直接将原始输入接入残差路径,能避免归一化对底层特征的过度抹平,确保模型在多层传递中不会丢失初始输入的关键信息。优化训练稳定性与梯度流动
这种设计属于预归一化(Pre-LN)架构的变体:归一化仅作用于子组件的输入,残差路径保留原始输入。反向传播时,梯度可直接通过残差路径回流到更早的层,减少归一化操作带来的梯度缩放干扰,让大深度、大参数量的T5模型训练更稳定,尤其适配大批次训练场景。适配T5的文本到文本预训练目标
T5采用统一的文本到文本框架,原始输入的量级差异本身承载着任务相关的语义信息(比如长文本与短文本的特征分布差异)。保留原始输入的残差连接,能让模型更好地利用这些信号,适配多样化的下游任务需求。
需要明确的是,这种设计并非不合理的选择,而是在训练稳定性与特征保留之间的针对性权衡,类似的思路也被应用在其他主流大模型的架构设计中。
内容的提问来源于stack exchange,提问作者Archimondain
相关产品推荐
相关产品推荐

