格式没调好,可见公众号文章:https://mp.weixin.qq.com/s/Qy8b2rKdR1xji6Cvw82wEA

Image
在对Llama等英文大模型进行中文增量预训练时,专门微调词嵌入层(Embedding Layer)和语言模型头部(LM Head)是出于以下关键原因:

  1. 词嵌入层(Embedding Layer)的特殊性
    • 跨语言语义差异:
    英文预训练的词嵌入无法直接编码中文词汇的语义。例如,中文的单字/词在英文词表中不存在(如"苹果" vs. “apple”),即使通过Subword分词,子词(如"苹"+“果”)的向量也是基于英文语料训练的,对中文的表达能力有限。
    需重新学习中文词汇的分布式表示,使模型理解中文的语义空间。
    • 输入适配问题:
    扩充中文词表后,新增token的嵌入是随机初始化的(例如通过resize_token_embeddings)。微调可以优化这些新向量,并与原有词表保持一致性(例如中英文同义词的向量应接近)。
    • 低频词处理:
    中文中一些低频词或专业术语的嵌入初始效果差,微调能提升其表征质量。
  2. 语言模型头部(LM Head)的作用
    • 输出分布对齐:
    LM Head负责将隐藏状态映射到词表概率分布。英文预训练的头部权重偏向英文词频分布(如"the"概率高),而中文需要输出中文字符/词的概率主导。微调LM Head可以调整输出逻辑,适应中文的词汇分布。
    • 与新词嵌入协同:
    若词嵌入层更新而LM Head不变,会导致新学的中文向量与头部权重不匹配(例如二者点积后的logits不合理)。同时微调二者可保持输入输出的一致性。
  3. LoRA的限制与补充
    • LoRA的局限性:
    LoRA(低秩适配)通常仅针对注意力层的权重(Q/K/V等),通过低秩矩阵间接微调原参数。但词嵌入和LM Head是独立参数,且与具体语言强相关,仅靠LoRA的间接调整可能不够(尤其是新增的中文词)。
    • 避免计算开销过大:
    虽然"全量"微调Emb/LM-Head会引入额外参数,但其参数量通常远小于核心Transformer层(例如,词表50k时Emb层仅占约0.1B参数)。相比全模型微调,这种策略在资源和效果间取得了平衡。
  4. 操作示例(代码逻辑)

假设扩充中文词表

model.resize_token_embeddings(new_vocab_size)

配置LoRA(仅针对注意力层)

lora_config = LoraConfig(target_modules=[“q_proj”, “v_proj”], …)
model = get_peft_model(model, lora_config)

手动解冻Emb和LM Head

for param in model.get_input_embeddings().parameters():
param.requires_grad = True
for param in model.get_output_embeddings().parameters():
param.requires_grad = True
总结
• Emb/LM-Head与语言强相关:是跨语言迁移的关键接口,需直接适配。
• LoRA+部分全调的权衡:在保留大部分预训练知识(通过LoRA)的同时,针对性更新语言相关的核心层,兼顾效率与效果。
• 实验支持:实践中,此方法已被证明能显著提升中文生成质量,而单独使用LoRA可能导致生成不流畅或词义错误。
这种方式本质上是对模型"输入输出接口"的中文化改造,而LoRA负责调整内部的跨语言通用推理能力。

注:AIGC。

Logo

更多推荐