神经网络Transformer架构中的长度归一化
字数 1426 2025-11-25 17:40:05

神经网络Transformer架构中的长度归一化

长度归一化是在序列生成任务中,特别是在使用波束搜索解码时,对候选序列的得分进行修正的一种技术。其核心目的是解决模型倾向于生成短序列的偏差问题。

1. 问题的根源:模型对序列长度的自然偏差
当自回归语言模型(如Transformer解码器)逐词生成序列时,它会为每个时间步计算下一个词的概率。一个序列的总体概率是所有这些条件概率的乘积。对于一个由N个词元组成的序列,其概率为:
P(sequence) = P(y1) * P(y2|y1) * P(y3|y1, y2) * ... * P(yN|y1, y2, ..., yN-1)
由于每个条件概率都是一个介于0和1之间的小数,随着序列长度N的增加,更多的概率项被相乘,导致整个序列的联合概率(乘积)会呈指数级下降。这意味着,在没有任何修正的情况下,模型会天然地给较短的序列分配更高的概率得分,因为短序列需要相乘的概率项更少,乘积值自然更大。这导致波束搜索等解码算法会过早地倾向于结束序列,生成出简短但可能不完整或信息量不足的文本。

2. 解决方案:引入长度归一化
为了解决上述偏差,我们不对原始的联合概率进行比较,而是对其进行了归一化处理,使得不同长度的序列可以在一个更公平的基准上进行比较。最常用的方法是对数概率求和后的长度归一化

  • 第一步:转换为对数空间。首先,将概率的乘积转换为对数的求和,以避免数值下溢(即多个极小值相乘导致结果四舍五入为零)并简化计算。
    log P(sequence) = log P(y1) + log P(y2|y1) + ... + log P(yN|y1, y2, ..., yN-1)
  • 第二步:应用长度归一化。然后,用这个对数概率之和除以序列长度的某个函数。最常见的函数是序列长度本身(词元数量N)的幂。
    归一化得分 = (log P(sequence)) / (N^α)
    其中,α 是一个可调节的超参数,通常取值在0和1之间。

3. 超参数α的作用与影响
超参数α控制着长度惩罚的强度,它决定了我们应在多大程度上“奖励”长序列或“惩罚”短序列。

  • 当α = 0时:归一化得分为 log P(sequence) / 1,这等价于完全没有长度归一化。模型依然偏向短序列。
  • 当α = 1时:归一化得分为 log P(sequence) / N,这相当于计算了序列的平均对数概率。这是一个非常直接和常见的设置,能有效平衡长度偏差。
  • 当α < 1时:惩罚力度减弱。例如,当α=0.7,分母的增长速度慢于序列长度本身的增长,这意味着对长序列的“惩罚”较轻,模型会更倾向于生成长度稍长的序列。
  • 当α > 1时:惩罚力度加强,模型会强烈倾向于生成非常短的序列。

通过调整α,可以在生成序列的流畅性、信息完整性和长度之间进行权衡。

4. 在波束搜索中的实际应用
在波束搜索的解码过程中,算法会维护一个包含top-k(k为波束宽度)个最佳候选序列的列表。当比较两个不同长度的候选序列时(例如,一个长度为5,另一个长度为10),直接比较它们的对数概率之和是不公平的。此时,系统会计算每个候选序列的长度归一化得分,并依据这个归一化后的得分来对波束中的候选序列进行排序和选择。这确保了最终选出的最优序列是在充分考虑了长度因素后,整体质量最高的序列,而非仅仅是概率上“侥幸”更高的短序列。

神经网络Transformer架构中的长度归一化 长度归一化是在序列生成任务中,特别是在使用波束搜索解码时,对候选序列的得分进行修正的一种技术。其核心目的是解决模型倾向于生成短序列的偏差问题。 1. 问题的根源:模型对序列长度的自然偏差 当自回归语言模型(如Transformer解码器)逐词生成序列时,它会为每个时间步计算下一个词的概率。一个序列的总体概率是所有这些条件概率的乘积。对于一个由N个词元组成的序列,其概率为: P(sequence) = P(y1) * P(y2|y1) * P(y3|y1, y2) * ... * P(yN|y1, y2, ..., yN-1) 由于每个条件概率都是一个介于0和1之间的小数,随着序列长度N的增加,更多的概率项被相乘,导致整个序列的联合概率(乘积)会呈指数级下降。这意味着,在没有任何修正的情况下,模型会天然地给较短的序列分配更高的概率得分,因为短序列需要相乘的概率项更少,乘积值自然更大。这导致波束搜索等解码算法会过早地倾向于结束序列,生成出简短但可能不完整或信息量不足的文本。 2. 解决方案:引入长度归一化 为了解决上述偏差,我们不对原始的联合概率进行比较,而是对其进行了归一化处理,使得不同长度的序列可以在一个更公平的基准上进行比较。最常用的方法是 对数概率求和后的长度归一化 。 第一步:转换为对数空间 。首先,将概率的乘积转换为对数的求和,以避免数值下溢(即多个极小值相乘导致结果四舍五入为零)并简化计算。 log P(sequence) = log P(y1) + log P(y2|y1) + ... + log P(yN|y1, y2, ..., yN-1) 第二步:应用长度归一化 。然后,用这个对数概率之和除以序列长度的某个函数。最常见的函数是序列长度本身(词元数量N)的幂。 归一化得分 = (log P(sequence)) / (N^α) 其中, α 是一个可调节的超参数,通常取值在0和1之间。 3. 超参数α的作用与影响 超参数 α 控制着长度惩罚的强度,它决定了我们应在多大程度上“奖励”长序列或“惩罚”短序列。 当α = 0时 :归一化得分为 log P(sequence) / 1 ,这等价于完全没有长度归一化。模型依然偏向短序列。 当α = 1时 :归一化得分为 log P(sequence) / N ,这相当于计算了序列的 平均对数概率 。这是一个非常直接和常见的设置,能有效平衡长度偏差。 当α < 1时 :惩罚力度减弱。例如,当α=0.7,分母的增长速度慢于序列长度本身的增长,这意味着对长序列的“惩罚”较轻,模型会更倾向于生成长度稍长的序列。 当α > 1时 :惩罚力度加强,模型会强烈倾向于生成非常短的序列。 通过调整 α ,可以在生成序列的流畅性、信息完整性和长度之间进行权衡。 4. 在波束搜索中的实际应用 在波束搜索的解码过程中,算法会维护一个包含top-k(k为波束宽度)个最佳候选序列的列表。当比较两个不同长度的候选序列时(例如,一个长度为5,另一个长度为10),直接比较它们的对数概率之和是不公平的。此时,系统会计算每个候选序列的长度归一化得分,并依据这个归一化后的得分来对波束中的候选序列进行排序和选择。这确保了最终选出的最优序列是在充分考虑了长度因素后,整体质量最高的序列,而非仅仅是概率上“侥幸”更高的短序列。