4.llm_note
参考https://github.com/changyeyu/LLM-RL-Visualized,对应的书《大模型算法:强化学习、微调与对齐》)
概述
llm训练时的teacher forcing机制:生成第i个token的输入:
推理时:是模型生成的第0到第i-1的序列
训练时:训练数据中实际的token序列
例如输入的是12345,输入1的时候生成了8,那要预测3的时候,输入的就是18;而训练时输入的还是12
SFT
lora
lora的核心思想:微调前后模型的参数差异具有低秩性,所以可以用A和B两个矩阵来表示,这两个矩阵的秩是lorarank
A一般是随机初始化,B用0初始化或者用很小的随机数初始化,为了保证在训练初期,lora不会对原始输出造成太大扰动
参数loraalpha用于缩放Lora输出,即Wmerge=W+A∗B∗loraalpha/lorarank
学习率一般开始的时候比较小,后面可以再调整,不过如果lora_alpha较大,可以适当减小学习率
在推理的时候,可以先进行融合,其实就是算好Wmerge,推理的时候直接用
prefix-tuning
大概是在prompt的最前面加若干个虚拟token,然后这部分有自己的参数(最开始的emb,还有后面的k和v,这里的k和v都是2个mlp,先映射到小一点的d',再映射到d),总的可训练参数量参考:

sft loss与logsoftmax
LM head:从hidden dim映射到vocab size
计算时label是shift得到的(左移一位,因为要预测next item)
正常是先过LM head,算出logit矩阵,然后每个位置对所有词表里的词算softmax得到p,再去算交叉熵(只有label那个字有log(p)),所以就是log(softmax(x))
prompt没有loss,只有response有loss,假设response长度为k,假设第i个位置对应的label是j,那交叉熵是−1/k∑i=1klog(pij)
对于response里的第i个词来说,词表大小为n,xmax=max(x0,x1,...,xn),下式第三行就是第二行分子分母同时乘e−xmax
这个简化有2个好处:
减少计算量:例如除法、少量对数
数值稳定:上式是log-sum-exp技巧,减掉max可以避免溢出
另外还有一个常用名词logprobs(log probabilities),即logsoftmax的结果,因为softmax是0到1,所以logprobs取值范围是负无穷到0
如何减小SFT引入的幻觉
sft阶段引入的新知识越多,幻觉发生率也越高
模型主要通过预训练来获取知识,sft主要是用来教会模型如何更有效地利用这些知识。
所以,新知识应该在预训练阶段或者基于预训练模型继续预训练(CPT),再用sft进行优化
另外,sft选哪个版本的开源模型作为基础模型也有讲究:
需要加一堆新知识进行深度微调时,选base版本,因为base版本未指令微调,更有通用性
任务与现有指令任务类似(通用对话、开放域问答等),且指令数据不多,选指令微调版本(-instruct或者-chat)
DPO
DPO(direct preference optimization)是监督学习,不是强化学习,loss如下
其中,
r是策略模型和参考模型的比值,即一个隐式的奖励模型,rθ(x,y)=βlogπref(y∣x)πθ(y∣x)
策略模型是复制的sft模型,参考模型一般也是复制sft模型,有些时候可以选一个更复杂的模型,但要注意两者的kl散度和训练数据分布不要差太多
DPO流程

concat:将x和yw与yl分别concat,作为策略模型和参考模型的输入(实际会将三者concat一起)
gather:算完logit和softmax后,再把y部分的拿出来,算出隐式奖励,再算Loss
beta作用
在RLHF中,β和最终奖励=r(x,y)、最终奖励=rϕ(x,y)的关系如下,
β很小时,策略模型和偏好数据分布更接近,
β很大时,策略模型和参考模型更接近
在DPO中,
β很小时,KL惩罚力度很小,策略模型有更多自由度去探索,策略模型和偏好数据分布更接近
β很大时,KL惩罚力度很大,策略模型始终要兼顾和参考模型的距离,策略模型和参考模型更接近
DPO的效果
对无害性有很大提升,对基础能力基本无影响(MMLU等)
DPO的梯度
增加优势回答出现的概率,降低劣势回答出现的概率
动态系数:优势答案和劣势答案的隐式奖励差异(注意rθ(x,y)=βlogπref(y∣x)πθ(y∣x)),如下图:
rθ(x,yl)<rθ(x,yw))时:隐式奖励模型能正确地给优质回答较高评分,图中左侧,说明已经学得比较好了,梯度比较小
rθ(x,yl)>rθ(x,yw))时:隐式奖励模型不太行,图中右侧,要加强梯度

解释:

Training-free的方法
提示词工程
prompt设计原则:
递进式尝试:先试zero-shot,效果不行再试few-shot,还是不行再尝试sft
灵活运用系统消息:引导模型的行为、风格、角色等
明确指令并用分隔符:在开头用冒号、三重引号、xml标签、换行等进行分隔
明确期望的输出格式并提供输出示例:详细描述具体输出格式要求
避免模糊描述:避免“较长”“较短”,要用具体数字,如5个要点、3段话
同时提供禁止和替代指令:告诉模型不要做什么,还有对应的替代方案
提供必要的上下文和角色信息:明确模型需要扮演的角色
分解复杂任务:复杂任务可以分进行意图分类或者逐步拆解任务
引导模型先思考后回答:明确指示模型在回答前先进行详细推理
使用参考文本并基于参考作答:提供可信的参考文本,要求模型基于此作答,可以进一步要求模型标明引用来源或参考文献
动态总结上下文:对话长度超出模型上下文窗口限制时,可以定期总结或筛选最相关信息
CoT

思维链:CoT,Chain of Thoughts,Google提出,Chain-of-Thought Prompting Elicits Reasoning in Large Language Models
思维树:ToT,Tree of Thoughts,Tree of Thoughts: Deliberate Problem Solving with Large Language Models,普林斯顿提出,允许考虑多个不同推理路径并进行自我评估,以决定下一步行动,并在必要时前瞻或回溯
思维图:GoT,Graph of Thoughts,Graph of Thoughts: Solving Elaborate Problems with Large Language Models,苏黎世联邦理工学院提出,能将模型生成的信息建模为任意图结构,其中信息单元(思维)作为顶点,边对应这些顶点间的依赖关系,能有效组合任意的信息单元
自我一致性CoT:Self-consistency CoT,Self-Consistency Improves Chain of Thought Reasoning in Language Models,Google提出,先生成多样化的推理路径集,然后从多个路径中选出最一致的答案
Auto-CoT:Automatic Chain of Thought Prompting in Large Language Models,自动构建CoT样本,先将问题聚类,再示例采样,每个类中选择一个具有代表性的问题,并用简单的Zero-shot CoT生成相应思维链
思维记忆:Memory of Thought,MoT,MoT: Memory-of-Thought Enables ChatGPT to Self-Improve,复旦提出,不用更新参数,预思考:在未标注数据集上思考并将思维保存为外部记忆;推理:回忆相关记忆以帮助推理并回答给定问题
XoT:Everything of Thoughts,Everything of Thoughts: Defying the Law of Penrose Triangle for Thought Generation,RL+MCTS,结合轻量级的策略和价值网络,对特定任务进行训练以进行思维搜索,并随后泛化到新问题。训练完后,用轻量的策略和价值网络通过MCTS高效地思维搜索,再基于MCTS和LLM写作的框架进行思维修正,进一步提升思维质量。能最大程度减少LLM调用次数
如何自动选择few-shot示例?langchain等框架中实现了example selector
基于相似性
基于n-gram重叠分数
基于MMR(最大边际相关性):在保证相关性的基础上引入多样性
多模态CoT:
Multimodal Chain-of-Thought Reasoning in Language Models:交大,两阶段框架,推理理由生成阶段:根据文本prompt+图像生成推理理由;答案推断阶段:根据文本prompt+图片+推理理由推断出最终答案
Improve Vision Language Model Chain-of-thought Reasoning,CMU,基于GPT-4o提取推理路径,对vlm进行微调以增强推理能力,再构造正负对加dpo提升效果
解码策略
以transformers.generate参数为例
beam search:每次保留累积概率的topk,最终有k个路径,再选出最高的那个
diverse beam search:Diverse Beam Search: Decoding Diverse Solutions from Neural Sequence Models,分成多个组(num_beam_groups),每个组内beam search,组间通过多样性惩罚降低生成结果的相似性
受限beam search:Guided Open Vocabulary Image Captioning with Constrained Beam Search,constraints参数指定限制条件,force_words_ids强制结果包含特定词/词组
temperature:控制不同词的概率差距。当调小时,x/T变大,然后经过exp会指数放大,这样高logit的会变得更巨大,词的差距会被拉大,所以模型的输出会更稳定,输出结果更确定;反之不同词的差距更小,输出更多样
多项式采样:multinomial sampling,不是直接选概率最大的,而是按概率大小随机采样
top-k:只在概率前k的词中进行采样
top-p:累加概率大于p后截断,只对这些token采样,控制长尾词的概率阈值。top cummulative probability,是一个门槛,即从第一名往下数,累加后的概率大于p时,把后面的词扔掉,剩下的词再softmax,并去采样。调低会去掉长尾,输出稳定;调高会放低门槛,输出多样
==> temperature和top-p虽然原理不同,但均是越大越多样,适用创作等场景;越小越稳定,适用于代码、数学
其他解码策略:
contrastive search:对比搜索,A Contrastive Framework for Neural Text Generation,在每个解码步骤中,从模型预测的最可能候选集中选择输出,以增强生成文本与人类编写前缀之间的语义连贯性,保持生成文本的词元相似度矩阵稀疏性,避免输出退化问题。
speculative decoding:投机解码,引入一个较小模型,能一次性预生成多个候选token,主模型也并行验证这些候选token。deepseek v3就整合了投机采样和多token预测(MTP),实现了每次预测2个token
lookahead decoding:前瞻解码,Break the Sequential Dependency of LLM Inference Using LOOKAHEAD DECODING,并行生成和验证多个n-gram,基于Jacobi迭代方法,打破自回归解码的顺序依赖,无需辅助模型或额外的数据存储,加速推理。
decoding by contrasting layers(DoLa):对比解码的一种,DoLa: Decoding by Contrasting Layers Improves Factuality in Large Language Models,对比模型中较早层与最终层的logits的差异,DoLa能放大transformer层中特定部分局部化的事实知识,从而增强生成文本的真实性,旨在提高输出的事实准确性并减少幻觉现象。
控制生成细节的参数
max_length:包括prompt的总长度
max_new_tokens:不包括prompt的总长度
repetition_penalty:大于1增加重复惩罚,减少重复token生成
length_penalty:beam类方法的长度惩罚,大于0时鼓励生成较长序列,反之鼓励较短序列
force_word_ids/bad_words_ids:必须生成的token id列表/不能生成的token id列表
output_logits/output_scores:输出logits/scores
RAG
主要的点在于如何对文档进行分片(chunk),然后就是正常的向量召回流程了。例如Anthoripic的Contextual RAG会给每个chunk加一个上下文,把这段context放到chunk前面,然后再去做embedding。类似如下prompt:
工具调用
详见:https://www.daiwk.net/5.llm_agentic#gong-ju-diao-yong
强化学习核心知识
一些概念
回合(episode):一次完整智能体和环境交互,从初始状态直到终止状态
马尔可夫链(MC):下一状态只和当前状态有关,和之前时刻的状态无关
马尔可夫决策过程(MDP):马尔可夫链的基础上引入动作和奖励,4元组(S,A,P,R)
部分可观测马尔可夫决策过程(POMDP):智能体无法观测到环境的完整状态,只能看到一部分,7元组(S,A,T,R,Ω,O,γ),Ω是观测集,智能体能观测到的所有可能结果,γ是折扣因子,T是转移概率,当前状态和动作下,转移到下一状态的概率
常见探索利用方法
ϵ -greedy:以ϵ的概率随机选一个动作,1−ϵ的概率选择Q最大的动作;训练初期可以用大的ϵ鼓励探索,后期减小来鼓励利用
上置信界(Upper Confidence Bound, UCB):计算每个动作的置信度上界值,将预期回报和不确定性结合,选最高上界的动作
汤普森采样:从每个动作的后验概率分布中采样来选择动作
熵正则化:优化目标中加入熵正则项,下次加油策略多样性和探索性,PPO算法中提到的
乐观初始化:将价值函数的初始估计设置为较高值来促进探索,由于初始值被高估,算法会优先尝试未被充分探索的动作
玻尔兹曼探索(Boltzmann Exploration):引入温度系数,将动作的估计价值转化为概率分布,以概率的方式选择动作。温度较高时,各动作的概率差异较小,更倾向于探索
噪声注入:OpenAI的Parameter Space Noise for Exploration,在参数空间注入噪声,在奖励信号稀疏的任务中效果很好
同/异策略、在/离线强化学习:

行为策略(behavior policy):智能体与环境交互时,实际执行交互行为的策略,负责收集用于训练的数据。
目标策略(target policy):最终希望得到的策略,用来最大化长期回报。
同策略:行为和目标策略是同一个策略,例如policy gradient和SARSA,因为通常依赖最新生成的经验来训练并更新策略,所以一般不能用replay buffer
异策略:两个策略是不同版本或者不同类型,Q-learning/DQN都是,行为策略是ϵ -greedy,目标策略是最终要学习的,需要借助replay buffer
replay buffer:一般存(st,at,rt,st+1)四元组(非Sutton教材写法)
在线强化学习:训练时策略持续和环境交互并收集经验,动态生成训练数据,目标策略也不断进化
离线强化学习:又叫batch RL,或者fully off-policy RL,训练时智能体完全不和环境交互,仅依赖预先收集的数据。训练结束之后再将策略整体部署到线上环境中
model-based/model-free:
model-based:利用环境模型进行规划和决策,例如Dyna-Q、MCTS(用于AlphaGo等)
model-free:直接与环境交互,学习策略或者价值函数,例如基于价值(Q-learning、DQN、SARSA)、基于策略(REINFORCE、PG、GRPO)、Actor-Critic(DDPG、PPO、A3C)
奖励、回报、价值函数
奖励r(reward):t时刻执行动作后,环境给的的实时奖励,在Sutton的教材里记为Rt+1或者rt+1(以下以这个为准),一般大写是随机变量,小写是观测到的具体值,另外,在别的地方也会记成rt
奖励塑形(reward shaping):设计复杂的奖励函数以表示具体任务目标,例如短视频推荐就可以设计一个多目标融合公式
回报G(gain):到未来的累计奖励,可以加折扣,Gt=Rt+1+γGt+1
价值函数:
Qπ(s,a):动作价值函数,在状态s下,采取动作a,获得的期望回报
Vπ(s):状态价值函数,在状态s下,采取所有可能动作获得的期望回报

贝尔曼方程
用动态规划解决优化和决策问题。对于给定策略π,
状态价值函数的贝尔曼方程为Vπ(s)=∑aπ(a∣s)∑s′,rp(s′,r∣s,a)[r+γVπ(s′)]
动作价值函数的贝尔曼方程为Qπ(s,a)=∑s′,rp(s′,r∣s,a)[r+γ∑a′π(a′∣s′)Qπ(s′,a′)]
最优状态价值函数的贝尔曼方程为V∗(s)=maxa∑s′,rp(s′,r∣s,a)[r+γV∗(s′)]
最优动作价值函数的贝尔曼方程为Q∗(s,a)=∑s′,rp(s′,r∣s,a)[r+γmaxa′Q∗(s′,a′)]
蒙特卡洛方法(MC)
多次试验,获得多个实际运行轨迹(需要运行到回合结束),根据它们来估计价值函数或者优化策略。实际应用时,可以在每运行完一个回合后立即更新状态价值,如下,α是学习率,Gt是某个回合实验的回报
时序差分方法(TD)
TD(Temporal Difference,TD),基于当前的价值估计进行自举(bootstrapping)学习,通过自身的估计值(如V(st+1))来更新当前的估计值(如V(st))。与MC的差别在于,TD不需要等整个回合结束,而是每前进一小就更新一次
TD目标和TD误差
TD误差:δt=VTD目标 −V(st)=rt+1+γV(st+1)−V(st)
单步TD:也叫TD(0),智能体和环境每个时间步交互一次,仅依赖未来一步的奖励和下一个状态的价值估计V(st+1)
多步TD:智能体与环境交互n次,也可以在每个时间步更新,但依赖的是未来n步奖励和状态的价值估计V(st+n),如下:
TD(λ)如下:
其中,Gtλ是在时间步t的λ回报,即综合考虑多个步数的回报,以λ为权重的加权和,计算公式如下:
REINFORCE recall
p.s.回头看一下REINFORCE recall:Off-policy Learning in Two-stage Recommender Systems
当reward是one-step的时候,等价于监督学习下的policy gradient;
当reward是multi-step的时候(例如从列表页点击视频,进入落地页后的时长叠加),等价于TD(1)的强化学习

最后更新于