You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何验证LLaMa2预训练模型与微调后模型的权重参数差异?

验证LLaMA2微调后模型与预训练模型的权重差异

你已经成功加载了预训练base模型和合并LoRA权重后的模型,以下是几种直接有效的权重对比方法:

方法1:逐层检查权重差异

遍历模型每一层参数,对比base模型和微调后模型的对应权重,输出有差异的层及差异统计信息:

import torch

# 遍历模型参数对
for (name_base, param_base), (name_finetuned, param_finetuned) in zip(base_model.named_parameters(), model.named_parameters()):
    # 确保参数名匹配
    assert name_base == name_finetuned, f"参数名不匹配:{name_base} vs {name_finetuned}"
    
    # 计算权重差值
    diff = param_base.data - param_finetuned.data
    # 考虑浮点精度,用近似相等判断
    if torch.allclose(param_base.data, param_finetuned.data, atol=1e-5):
        print(f"层 {name_base}: 权重无差异")
    else:
        print(f"层 {name_base}: 权重存在差异")
        print(f"  差异均值: {diff.mean().item():.6f}")
        print(f"  差异最大值: {diff.max().item():.6f}")
        print(f"  差异最小值: {diff.min().item():.6f}")

方法2:计算权重余弦相似度

余弦相似度越接近1,权重越相似;越接近0,差异越大:

from sklearn.metrics.pairwise import cosine_similarity
import numpy as np

for (name_base, param_base), (name_finetuned, param_finetuned) in zip(base_model.named_parameters(), model.named_parameters()):
    assert name_base == name_finetuned
    
    # 将张量展平为一维数组
    base_flat = param_base.data.cpu().numpy().flatten()
    finetuned_flat = param_finetuned.data.cpu().numpy().flatten()
    
    # 计算余弦相似度
    sim = cosine_similarity([base_flat], [finetuned_flat])[0][0]
    print(f"层 {name_base}: 余弦相似度 = {sim:.6f}")

方法3:聚焦LoRA微调层

LoRA仅针对特定层(通常是注意力层的q、v投影)微调,可只检查这些层:

# 筛选LLaMA2中常见的LoRA微调层
lora_target_layers = [name for name, _ in base_model.named_parameters() if 'q_proj' in name or 'v_proj' in name]

for layer_name in lora_target_layers:
    param_base = base_model.state_dict()[layer_name]
    param_finetuned = model.state_dict()[layer_name]
    
    if not torch.allclose(param_base, param_finetuned, atol=1e-5):
        print(f"LoRA层 {layer_name}: 权重已更新")
        print(f"  差异均值: (param_base - param_finetuned).mean().item():.6f")
    else:
        print(f"LoRA层 {layer_name}: 权重无变化")

注意事项

  • 由于使用torch.float16加载模型,计算时可能存在微小浮点误差,优先用torch.allclose替代严格相等判断
  • 若模型在GPU上,可先通过.cpu()将参数转到CPU计算,避免显存占用过高

内容的提问来源于stack exchange,提问作者Sarthak Sharma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 22:50:09