• 苏果果
    2024-10-21 来自北京
    技术小白也能读懂的LoRA微调过程😢泪目了

    作者回复: 哈哈,给你画一张大饼

    共 2 条评论
    
  • 蝈大虾
    2024-10-22 来自上海
    思考题还是问了GPT: 使用 LoRA 微调时,我们会在指定的层中引入低秩适配(Low-Rank Adaptation)矩阵。假设 Rank=64,我们可以计算在每个相关层中需要的额外参数。 1. LoRA 参数计算 对于每个需要应用 LoRA 的层,假设有一个原始参数矩阵 𝑊 W,维度为 𝑑 × 𝑘 d×k,LoRA 将引入两个低秩矩阵 𝐴 A 和 𝐵 B: 𝐴 A 的维度为 𝑑 × Rank d×Rank 𝐵 B 的维度为 Rank × 𝑘 Rank×k 2. 计算每层的参数 根据你提供的矩阵: embed_tokens (32000 x 4096): 𝐴 : 32000 × 64 A:32000×64 → 2 , 048 , 000 2,048,000 𝐵 : 64 × 4096 B:64×4096 → 262 , 144 262,144 总计: 2 , 048 , 000 + 262 , 144 = 2 , 310 , 144 2,048,000+262,144=2,310,144 lm_head (32000 x 4096): 总计同上: 2 , 310 , 144 2,310,144 q_proj (4096 x 4096): 𝐴 : 4096 × 64 A:4096×64 → 262 , 144 262,144 𝐵 : 64 × 4096 B:64×4096 → 262 , 144 262,144 总计: 262 , 144 + 262 , 144 = 524 , 288 262,144+262,144=524,288 v_proj (1024 x 4096): 𝐴 : 1024 × 64 A:1024×64 → 65 , 536 65,536 𝐵 : 64 × 4096 B:64×4096 → 262 , 144 262,144 总计: 65 , 536 + 262 , 144 = 327 , 680 65,536+262,144=327,680 3. 总结 LoRA 参数量 将所有层的 LoRA 参数量相加: embed_tokens: 2 , 310 , 144 2,310,144 lm_head: 2 , 310 , 144 2,310,144 q_proj: 524 , 288 524,288 v_proj: 327 , 680 327,680 总计: 2 , 310 , 144 + 2 , 310 , 144 + 524 , 288 + 327 , 680 = 5 , 472 , 256 2,310,144+2,310,144+524,288+327,680=5,472,256 4. 与 Mistral 7B 的参数量对比 Mistral 7B 的总参数量为 7,273,849,000。与 LoRA 微调所需的参数量相比: 节省比例 = 7 , 273 , 849 , 000 − 5 , 472 , 256 7 , 273 , 849 , 000 ≈ 99.925 % 节省比例= 7,273,849,000 7,273,849,000−5,472,256 ​ ≈99.925% 结论 通过 LoRA 微调,总共需要的训练参数仅为 5,472,256,与 Mistral 7B 的参数量相比,大幅度降低了约 99.925%,使得微调更加高效。
    展开
    
    