- 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