Published on

Bias Vector

在深度学习(尤其是Transformer架构)中,bias vector(偏置向量) 是线性层(Linear Layer)中的一个可学习参数,用于增强模型的表达能力。

1. Bias Vector 的定义

  • 数学形式
    对于一个线性变换 ( y = Wx + b ),其中:
    • ( W ) 是权重矩阵(weight matrix)
    • ( x ) 是输入向量
    • ( b ) 是偏置向量(bias vector),与 ( y ) 同维度
  • 作用
    在不改变输入 ( x ) 的线性变换能力(由 ( W ) 控制)的前提下,平移输出结果,为模型提供额外的自由度。

2. 在多头注意力(Multi-Head Attention)中的具体应用

qkv_bias=True 时,Query(Q)、Key(K)、Value(V)的线性投影层会包含独立的偏置向量:

# PyTorch 示例(简化版)
self.q_linear = nn.Linear(d_model, d_k, bias=qkv_bias)  # 包含bias
self.k_linear = nn.Linear(d_model, d_k, bias=qkv_bias)
self.v_linear = nn.Linear(d_model, d_v, bias=qkv_bias)

为什么需要 bias?

  • 打破对称性:防止所有注意力头在初始化时表现相同(若无bias,所有头的初始输出可能高度相似)。
  • 适应数据偏移:某些任务中,输入数据可能具有固有偏移量(如文本中词向量的全局倾向性)。
  • 提升模型容量:增加少量参数(( b ) 的维度通常很小),可能改善拟合能力。

3. 是否启用 bias 的对比

配置参数量训练稳定性典型场景
qkv_bias=True略多(+3×d_k)需谨慎初始化数据分布复杂或需要高灵活性(如NLP)
qkv_bias=False更少更稳定计算资源受限或数据分布简单

4. 实际影响示例

假设输入维度 d_model=512,注意力头数 h=8,则:

  • 启用 bias
    每个头新增 ( 3 \times 512 = 1536 ) 个参数(Q/K/V各512),8个头共新增 12,288 个参数。
  • 关闭 bias
    仅保留权重矩阵的参数,无额外开销。

5. 如何选择?

  • 推荐启用qkv_bias=True)的情况:
    • 任务对细微差异敏感(如机器翻译、生成任务)。
    • 模型规模较大(参数冗余可接受)。
  • 推荐关闭qkv_bias=False)的情况:
    • 轻量级模型(如移动端部署)。
    • 数据量少,需防止过拟合。

代码验证建议

import torch.nn as nn

d_model, d_k, d_v = 512, 64, 64
q_linear = nn.Linear(d_model, d_k, bias=True)
print(f"Bias shape in Q linear: {q_linear.bias.shape}")  # 应输出 torch.Size([64])

通过检查 bias 的形状,可确认其是否与输出维度一致。

THE END