--- title: llm-rl中的熵-part-2-熵对训练的调控 source: wechat source_url: https://mp.weixin.qq.com/s/O7VpFFc0qDbV-j7tNlXsVQ tags: [wechat, article, claude, openai, gpt, agent, harness, openclaw] review_value: 9 review_confidence: 8 review_stars: 5 review_recommendation: worth-reading sha256: 3fc6094af513 --- # LLM RL中的熵 part 2: 熵对训练的调控 这是“LLM RL中的熵”系列第二篇文章,第一篇文章讲了熵的基本概念和保持RL训练过程中熵不坍塌的一些方法,这篇文章主要介绍一些熵对RL训练过程的调控方法。 ** 总目录: ** 关于熵 熵的调控: [ LLM RL中的熵 part 1: 熵的调控 ]() ** 熵对训练的调控 ** 基于熵的路径探索 基于熵的无监督RL ** 熵对训练的调控 ** ** 1 ** ** 在adv中直接增加熵相关的项 ** 《REASONING WITH EXPLORATION:AN ENTROPY PERSPECTIVE》在优势值A上增加了一项关于熵的项 𝜓(𝐻𝑡) 。如果某个token上有更大的熵,那么其会有更大的优势值,进而鼓励提高该token的概率。 对于在优势值上增加的 𝜓(𝐻𝑡) ,有如下两点需要注意的地方: * 对于 𝜓(𝐻𝑡) ,设置了一个上限 |𝐴𝑡|/𝜅 ,目的是在计算 𝐴𝑡+𝜓(𝐻𝑡) 的时候,如果 𝐴𝑡<0 ,A不会因为 𝜓(𝐻𝑡) 过大而影响其正负性。 * 对于熵项,是停梯度的(通过公式(5)中detach体现),目的是不改变原来算法的优化目标。如果熵项不停梯度,loss也会通过熵项直接影响到模型的更新,那么模型有可能不断提高熵,去hack loss,导致模型学崩。 ** 熵调控adv的自适应特性 ** 当原始优势 A>0 时,更高的熵会导致对所选token的更新更强,大大增加其出现的概率,从而使输出分布更尖锐,而更尖锐的分布会降低熵,这反过来又会减少基于熵的优势A,并削弱后续更新。 ** 为什么要鼓励高熵的token? ** 高熵 token 往往和 “能提升推理能力的关键行为” 强相关,主要有3类token: * 逻辑连接词: “首先”“因为”“然而” 等,这类词帮模型梳理推理步骤,避免跳步出错。 * 反思句:“让我验证一下这个结果”“这里可能算错了”等,这类词帮模型自查错误,提高正确率。 * 罕见解题方法:“把对数方程转成线性方程” 等,这类词帮模型突破思维定式,解决复杂题。 在这里需要强调一点,在adv上增加熵项,模型并不会真正的去固化所有的高熵token,adv还跟模型是否回答正确有关,只有那些 “ ** 试了之后真的能提高正确率 ** ” 的高熵行为才会被被模型记住(回答正确率reward才是正的)。 如下图所示,在adv上引入熵项时(图中的RL w/ Entropy Adv紫线),和原始的RL算法相比(图中的RL蓝线)反而模型的熵更低了,这也很符合直觉,因为adv中增加了熵项,更加鼓励那些熵大的token进行更加激进的更新,进而让某个token的概率变得更高,进而让熵变得更低。 RL w/ Entropy Adv熵更低了,但是模型性能是变得更好了,这是因为模型固化出了更加有利于推理出正确答案的行为(这个方法的目标不是 “让模型一直保持高熵”,而是 “在该探索的时候用熵引导,探索完后让模型对优质路径更自信”)。 ** 所以说,也并不是模型维持在一个比较高的熵的水平(没发散)、有更强的探索能力就是好的,关键是能不能探索&固化出有效的推理路径 ** 。当然,熵也不能太低,RL w/ Entropy Adv在0.17的水平也不算是熵崩溃。作者强调了这是因为加入了clip higher的trick,如果去掉clip higher熵会掉到0.03,此时如果在adv上引入熵项就不一定会好了,作者并没有给出去掉clip higher的实验对比。 和上文介绍的《REASONING WITH EXPLORATION:AN ENTROPY PERSPECTIVE》这篇文章类似,快手在最新的代码模型博客( [ 登顶!快手开源KAT-Dev-72B-Exp,刷新开源SOTA! ]() )中也提到了用熵来改变优势值的方法,其原文内容为“对每个 rollout 样本计算策略熵,并将其归一化后用作优势的放大系数。熵高的样本表示更高的不确定性和探索性,其优势将被放大,在梯度更新中占据更大比重;熵低的样本优势被相应缩小,避免过度优化低熵样本导致策略熵崩溃。”其文中并没有给出更详细的细节,应该是直接当作系数乘到adv上的,如何进行归一化也不太清楚。 ** 2 ** ** 挑选高熵token更新 ** 《REASONING WITH EXPLORATION:AN ENTROPY PERSPECTIVE》使用熵来调控优势值A,而《Beyond the 80/20 Rule: High-Entropy Minority Tokens Drive Effective Reinforcement Learning for LLM Reasoning》这篇文章可以看作是前者一种更加hard的变种——直接用熵来挑选需要更新的token,可以看成“如果token熵比较大,不调节A;如果token熵比较小,直接将A调节成0”,具体公式如下。示性函数I决定某个token是否参与模型更新, ρ表示需要保留百分之多少的token, 𝜏𝜌 表示保留 ρ%这么多的token取得熵阈值。 ** 为什么要更新高熵token ** * ** 高熵token对模型推理过程更重要 ** 。将token按照熵大小按照2:8比例分成两组,分别调节高熵token(红线)和低熵token(蓝线)在sampling时候的的温度系数(温度系数T越大,sampling的随机性越大)。发现在模型指标不崩的情况下,调节高熵token的温度系数对模型结果影响波动更大,说明高熵token更加影响模型的推理。高熵token常作为句内和句间的逻辑连接词,例如 “wait”(等等)、“however”(然而)、“unless”(除非)(表示对比或转折),“thus”(因此)、“also”(此外)(表示递进或补充),以及 “since”(既然)、“because”(因为)(表示因果关系)。同样,“suppose”(假设)、“assume”(假定)、“given”(鉴于)、“define”(定义)等标记在数学推导中频繁出现,用于引入假设、已知条件或定义。这些token是模型推理过程中的关键“岔路口”。 * ** 模型在正常RL训练时候,也主要是在优化高熵token。 ** 如下图所示,高熵token(100th percentile)的熵在训练过程中是在增加的;而低熵token的熵始终保持在一个较低的水平。 ** 局限性 ** * 20%的比例可能因数据、模型的不同而不同:如下图所示,模型对挑选token的比例还是比较敏感的。 * 作者的setting是用了DAPO,即使使用全token更新熵也是会在训练后期逐渐增加的。因此使用该方法仍然需要综合考虑熵坍塌问题,整体熵非常低的情况下划分token的边界就不明显了。 ** 3 ** ** 在reward中直接增加熵项 ** 与第一篇文章《REASONING WITH EXPLORATION:AN ENTROPY PERSPECTIVE》比较类似的是《GTPO AND GRPO-S: TOKEN AND SEQUENCE-LEVEL REWARD SHAPING WITH POLICY ENTROPY》这篇文章中提到的GTPO方法,都是直接用熵来控制RL过程中模型更新的幅度,但与第一篇文章有如下不同点: * 第一篇文章强调高熵 token 往往和 “能提升推理能力的关键行为” 强相关,因此需要鼓励这些token更新;GTPO则强调的是对token进行更加细粒度的奖励值分配。 * 第一篇文章的方法是在优势值adv上施加熵相关项,而GTPO是在reward熵施加熵相关项,但本质上没有区别。 * 第一篇文章中的方法不管样本是对是错,只要某个token熵是大的,那么就鼓励更新。而GTPO针对正、负样本有不同的更新行为。 在GTPO中,对于正样本的奖励值如下所示: ** 其鼓励生成高熵token ** ,进行更加丰富的路径探索。 𝑟𝑖 是原始的奖励值,是句子级的,正样本奖励值一般为1,最终计算的奖励 𝑟𝑖,𝑡 是token级的。 𝛼 为超参数,权衡原始奖励r和熵项。具体实验中 𝛼1 取值为1, 𝛼2 取值为0.1。在熵相关的项中,i/k表示样本序号(考虑同一个group内的样本,即同一个prompt rollout出来的多个样本),t表示token在句子中的位置。可以发现,熵项在相同t位置做了 ** 样本间的归一化 ** (归一化时只考虑正样本),进而表示出熵的 ** 相对大小 ** 。有的序列可能比较短,没有第t位置的token,那么这个样本第t位置的token熵用0代替。同时熵项也用 𝑑𝑡 进行了加权,该数值表示在同一group内的正样本中,有多少个正样本长度达到了t,即有多少个正样本在熵归一化时在分母上真正贡献了熵值(熵为非0)。这么做的目的是,t越大,能够达到t的正样本数量越少,归一化时分母实际贡献熵的样本数越少,归一化后结果越容易受到极端的熵值影响,应该降低权重,而t越大,d越小,正好可以当作调节归一化后熵的权重。 对于负样本,奖励值的计算如下: 原始奖励值为-1,由 𝛼1 进行加权,基本是和正样本的奖励函数计算方式是类似的,只不过是对 ** 熵H的倒数 ** 进行加权。熵越小促使奖励值负的越多,对模型更新影响越大。这块的insight在于,对于 ** 错的越致信(熵小)的样本,应该给予更大惩罚 ** ,促使其纠正自己的错误。公式中的 ℎ𝑡 是group中达到t长度的负样本的格式,其作用和正样本中 𝑑𝑡 一致,此处不再赘述。 对于负样本来说,GTPO是对熵低的token进行更加激进的更新,而第一篇文章《REASONING WITH EXPLORATION:AN ENTROPY PERSPECTIVE》不管样本正负,只要是高熵就进行更加激进的更新,二者是相互违背的。笔者认为GTPO的做法更加合理一点,应该对致信的错误进行更大的惩罚和修正。 GTPO最终的优化目标如下所示,是将原始的GRPO优化目标按照样本的正负性质拆成两部分进行表达,本质上和GRPO的优化目标没啥区别。 论文中也提出了GTPO序列级的一种变体:GRPO-S。公式也是和GTPO类似,只不过把token级的熵,在样本序列内部进行了平均得到序列级的熵 𝐻^ ,这么做之后每个样本有一个奖励值,而不是像原始GTPO那样每个token都有不同的奖励值。笔者感觉这样做的话就和文中的一个关注点“进行更加细粒度的奖励控制”相违背了。