LLM的本质分析
具体来说,使用几个指标均保留前 25% 的指令数据,包括指令长度(过滤掉过长的指令)、指令复杂度(PPL,过滤掉 PPL 过高的指令)、IFD 和 IC-IFD。实验表明,IC-IFD在在仅保留25%指令数据的情况下,要优于完整数据集,而其他指标则表现出不同程度的性能下降,从而证明了。
REEF
REEF: Representation Encoding Fingerprints for Large Language Models
https://github.com/tmylla/REEF专治大模型“套壳”!上海AI实验室等给LLM做“指纹识别”
本文是对LLM的输出logit进行分析,计算不同模型的每一层logit之间的CKA(Centered Kernel Alignment)相似性,从而识别模型是否接近。

使用Llama和Qwen系列实测:
-
首先运行scripts/save_activation.sh脚本获取模型每一层的logits结果。
-
然后运行python compute_cka.py计算相似性,并显示成图像。
得到下图,可以看出Qwen2.5和Qwen2的相似度确实很高,而Qwen2.5和Llama的相似性很低。

分析:在训练数据相似的情况下,模型的权重也会更加相似,得到的logits也是。就算是微调也难以完全抹掉这种相似性,确实可以当作是模型的“指纹”。
Smaller Language Models Are Better Instruction Evolvers
GitHub - HypherX/Evolution-Analysis
论文主要内容是对比SLMs和LLMs在指令演化中的性能,并提出SLMs在生成更有效指令方面可能比LLMs更优。
-
Q1、在演进指令方面,SLM 的表现是否优于 LLM?
-
Q2、为什么 SLM 在指令演进方面的表现优于 LLM?
-
Q3、如何在不进行指令调整的情况下确定一条指令是否有效?
实验1:LLM和SLM生成的sft数据质量对比
使用 Llama-3.1 和 Qwen-2 系列的小型 (∼8B) 和大型 (∼70B) 模型来演化和合成新指令,同时微调各种骨干模型,并评测模型的效果(评测代码参考GitHub - HypherX/Evolution-Analysis)。

SLM生成的指令数据比LLM更好。
SLM甚至展示了演化出更复杂和多样化指令的能力。

实验2:SLM的生成更加多样化?
上面的实验表明,SLM能够进化并生成更复杂和多样化的指令。猜测这是由于LLM具有卓越的指令跟踪能力,这导致在遵循指令时输出空间更窄(过度自信),从而导致生成的新指令的多样性和复杂性降低。
在 Evol-Instruct 场景中使用 Llama-3.1-8B-Instruct 和 Llama-3.1-70B-Instruct 模型来获取输出令牌的概率分布。通过提取每个输出位置的 top-1 token 概率,比较了 SLM 和 LLM 之间的输出概率分布。

观察到 SLM 的 top-1 token输出概率较低,这表明 SLM 的输出分布更加多样化。这支持了论文猜想。
实验3:如何在没有微调的情况下对数据进行质量筛选
SLM生成的指令数据更加多样化,但是质量参差不齐。需要对质量进行筛选。
IFD可以理解为指令在生成响应中的重要性。较低的 IFD 意味着样本不需要训练,因为模型在给出指令时已经能够有效地生成相应的响应。

然而当指令难度过高时,可能会导致IFD较高,但整体性能可能会下降。受此启发,将指令的难度级别引入到原始IFD中,并提出了指令复杂感知IFD(IC-IFD)。

总结:太简单的不用学,太难的学不懂,可能越学越乱。需要筛选出难度一般的数据。
具体来说,使用几个指标均保留前 25% 的指令数据,包括指令长度(过滤掉过长的指令)、指令复杂度(PPL,过滤掉 PPL 过高的指令)、IFD 和 IC-IFD 。实验表明,IC-IFD在在仅保留25%指令数据的情况下,要优于完整数据集,而其他指标则表现出不同程度的性能下降,从而证明了IC-IFD的有效性。

MixLN
Mix-LN: Unleashing the Power of Deeper Layers by Combining Pre-LN and Post-LN
https://github.com/pixeli99/MixLN
Pre-LN 会导致其深层中的梯度范数减小,从而降低其有效性。相比之下,后层规范化 (Post-LN) 在较深的层中保留了较大的梯度范数,但在较早的层中会消失梯度。

Mix-LN将 Post-LN 应用于较早的层,将 Pre-LN 应用于较深的层,确保各层之间的梯度更均匀。这使得网络的所有部分(浅层和深层)都能有效地为训练做出贡献。

在不增加模型大小的情况下增强了预训练和微调性能。通过充分利用深层的潜力,Mix-LN提高了 LLM 的整体容量和效率。
统一视角看 Attention 与 MoE
attention是将hidden_states投影成qkv,计算softmax(qk)*v。看作是softmax(qk)得到重要性权重,对v进行加权平均。而MOE是将hidden_states投影得到router,通过router对hidden_states经过MLP运算的结果进行选择(加权平均)。
两者的相似之处: 1) 二者都使用了 softmax 来归一化权重f, 本质上也是希望学习稳定. 2) 二者本质都是对新特征的加权和. 3) 二者都是动态权重, 根据输入来自适应地聚合信息.
COT是否增强模型生成正确结果的信心
Multiple Choice Questions: Reasoning Makes Large Language Models (LLMs) More Self-Confident Even When They Are Wrong
论文研究了大型语言模型(LLMs)在回答多项选择题时,其自信心是否会因是否提供推理过程而有所不同。

论文进行了以下实验:
-
准确性比较:
-
比较了不同模型在直接回答和推理链提示下的准确性。
-
结果显示,推理链提示可以提高模型的准确性。
-
自信心比较:
-
计算了模型在两种提示方式下对所选答案的平均概率。
-
结果显示,模型在推理链提示下对答案的自信心更高,无论答案是否正确。
-
概率分布分析:
-
分析了正确答案和错误答案的概率分布,发现推理链提示使得概率值更接近1。
-
不同类别分析:
-
对MMLU的57个类别分别分析了自信心的变化和准确性的变化。
-
发现推理链提示在几乎所有类别中都增加了模型的自信心,尤其是在需要推理的类别中。
-
选项变化分析:
-
比较了当直接回答和推理链回答选择不同选项时,自信心的变化。
-
结果显示,当推理链使错误答案变为正确答案时,自信心的增加更大。
LIMO(少量高质量SFT)
LIMO: Less is More for ReasoningLIMO: Less is More for Reasoning
https://github.com/GAIR-NLP/LIMO
LIMO假设认为,复杂的推理能力可以通过以下两个关键因素来实现:
-
模型参数空间中潜在的先验知识:现代基础模型在预训练阶段已经积累了大量的数学知识,这些知识为推理能力的激发提供了基础。
-
高质量的推理链:通过精心设计的推理链,将复杂问题分解为详细、逻辑的步骤,使模型能够明确地理解和应用其预训练知识。

通过精心策划的少量样本(817个),LIMO在数学推理任务上取得了显著的性能提升,表明复杂的推理能力可以通过少量但高质量的训练样本激发。
Language Models Prefer What They Know: Relative Confidence Estimation via Confidence Preferences
这篇论文提出了一种新的相对置信度估计方法,用于解决语言模型在绝对置信度估计上的不足。通过让模型比较不同问题的置信度,并利用排名聚合方法将这些偏好转换为全局置信度评分,相对置信度估计能够更可靠地反映模型对答案的置信度。

总的来说就是评价哪个更好,比评价这个好不好的方式要更优。
LoRA和SFT的本质区别
LoRA vs Full Fine-tuning: An Illusion of Equivalence
LoRA是通过两个低址矩阵相乘来近似原始权重矩阵的迭代效果 \Delta W_{m\times n}=A_{m\times l}*B_{l\times n} ,这里 l\ll (m,n)

从矩阵相乘的角度来看, \Delta W_{m\times n} 的秩肯定 \leq l 。
那么对全量微调模型的权重进行 \Delta W_{m\times n} 分析,若 \Delta W_{m\times n} 的秩为一个很小的值,则可以用LoRA近似,如果秩很大,则LoRA的低秩近似肯定会影响效果。
这里对Qwen2.5-7B-Instruct和Qwen2.5-7B进行分析,每个linear层的权重相减并获取weight_diff的秩。
import torch``import os``import torch.nn as nn``from tqdm import tqdm``from transformers import AutoModelForCausalLM``os.environ['CUDA_VISIBLE_DEVICES'] = "0"``# 假设你已经加载了微调前和微调后的模型``# model_before_path = "Qwen2.5-7B" # 微调前的模型``# model_after_path = "Qwen2.5-7B-Instruct" # 微调后的模型``model_before_path = "Qwen2.5-7B-Instruct" # 微调后的模型``model_after_path = "sft_Qwen2.5-7B-Instruct" # 微调后的模型``def get_rank(weight_diff):` `# 使用 SVD 计算奇异值` `singular_values = torch.linalg.svdvals(weight_diff)` `# 设置一个阈值来截断较小的奇异值` `threshold = 1e-3 # 根据需要调整` `rank = (singular_values > threshold).sum().item()` `return rank``def compare_models(model_before_path, model_after_path):` `print(f"compare {model_before_path} vs {model_after_path}")` `model_before = AutoModelForCausalLM.from_pretrained(model_before_path)` `model_after = AutoModelForCausalLM.from_pretrained(model_after_path)` `# 确保两个模型的结构相同` `assert model_before.state_dict().keys() == model_after.state_dict().keys(), "模型结构不一致"` `# 遍历模型的每一层` `weight_diff_list = []` `for name, param_before in model_before.named_parameters():` `if 'proj' in name and "bias" not in name:` `# 获取微调后的权重` `param_after = model_after.state_dict()[name]` `# 计算权重差` `weight_diff = param_after - param_before` `weight_diff_list.append({"name": name, "weight_diff": weight_diff})` `# 使用 GPU 加速` `device = torch.device("cuda" if torch.cuda.is_available() else "cpu")` `for data in tqdm(weight_diff_list):` `weight_diff = data['weight_diff'].to(device)` `rank = get_rank(weight_diff)` `print(f"Layer: {data['name']}, Rank of weight difference: {rank}")` `# 调用函数比较模型``compare_models(model_before_path, model_after_path)
可以得到下图,那么对于常用的lora_rank=8/16/32,必然会影响微调效果。

考虑到Qwen2.5-7B-Instruct相比Qwen2.5-7B-Base模型的微调幅度较大,这里基于Qwen2.5-7B-Instruct使用几百个样本全量微调得到了sft_Qwen2.5-7B-Instruct。处理得到结果如下

可以看出,即使采用少量样本微调, \Delta W_{m\times n} 也是几乎满秩的。

那么下面看一下原本的Qwen模型矩阵的秩

所以采用低秩近似会影响效果。
那么说好的权重的稀疏性呢,逐层打印权重中小于0.000001的参数数量占比

也就是说权重确实是稀疏的,有很多几乎为0的值,但是矩阵稀疏≠低秩!
结论
1、base模型经过少数数据的SFT之后,权重的改变不大,权重分布模式基本相同,可以作为模型的"指纹"。
2、小模型生成的数据更加多样性(但质量参差不齐),大模型收敛到更优的程度,对于指定场景有指定的回答方式,可变性不高。
3、MixLN考虑到Pre-Norm和Post-Norm的优劣结合使用,效果更好一些。
4、扩展思维过程可以增加模型对结果的信息,就是先思考再回答时,答案的准确性会提高(训练时的数据一般也是这样的,有思考的数据,结果都会更加可靠一些,可能发现的这些模型特征实际上都是反映的训练数据的特征)。比如先给答案再给分析,给出的答案可能错的会多一些,但若是先分析再给答案,那答案的正确性就会更高。
5、LIMO表明了SFT过程中,少数高质量的效果远大于大量低质量数据。
6、从 \Delta W_{m\times n} 的秩分析:矩阵稀疏≠矩阵低秩,LoRA等低秩近似的方法肯定会影响微调效果。

如何学习AI大模型?
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;
第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;
第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;
第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;
第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;
第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;
第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;
• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;
• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;
• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

1.AI大模型学习路线图
2.100套AI大模型商业化落地方案
3.100集大模型视频教程
4.200本大模型PDF书籍
5.LLM面试题合集
6.AI产品经理资源合集
👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)