仅用于站内搜索,没有排版格式,具体信息请跳转上方微信公众号内链接
NVIDIA大模型岗面试,收获很多!!
是时候准备实习和面试了。
不同以往的是,当前职场已不再是那个双向奔赴时代了。求职者在变多,HC在变少,岗位要求还更高了。
最近,我们又陆续整理了很多大厂的面试题,帮助一些球友解惑答疑,分享技术面试中的那些弯弯绕绕。
总结链接如下:
《大模型算法工程师经典百问典》(2025版)正式发布!
《算法工程师直通大厂面经汇总》(2025版)正式发布!
喜欢本文记得收藏、关注、点赞。更多实战和面试交流,文末加入我们星球
强化学习基于奖励最大化假设,所有的算法都是建立在得到一个最大的期望奖励的基础上。
首先来明晰两个概念:
On-Policy:训练数据由需要训练的策略本身通过与环境的互动产生,用自己产生的数据来进行训练(可以理解为需要实时互动)
Off-Policy:训练数据预先收集好(人工或者其它策略产生),策略直接通过这些数据进行学习。
PPO,GRPO,DAPO都是On-Policy的策略。
这些On-Policy的策略一般由四个关键组件组成训练的pipeline:
Actor:产生动作的策略
Critic:评估动作或状态的价值的网络
RewardModel:对状态转移给出即时的奖励的模型或者函数
ReferenceModel:参考策略,这是为了防止在训练过程中,策略网络在不断的更新后,相对于原始策略偏移地太远。(避免它训歪了)
01
从PPO出发,捋清强化学习训练的思路
Policygradientoptimization
基于奖励假设,我们希望得到一个能够最大化奖励期望的策略,这个目标可以写成:
而奖励来自于轨迹上的每一个动作的即时奖励,于是,这个目标可以写成:
那么,一条轨迹的整体概率分布可以写成:
对于policygradient的方法来说,我们希望通过梯度上升的方式最大化轨迹得到的奖励,也就是最大化我们的目标函数。
梯度上升的更新公式可以写为:
那么问题来了,如何计算目标函数的梯度呢,这个目标函数涉及一轮迭代中轨迹上的所有点,直接去计算或者估算都具有很大的困难,而且还有由环境和策略共同决定的状态转移项,这么多项揉在一起似乎无法求解。
但是呢,要不说数学家是天才呢,它可以由一系列简单的变换变为只与策略有关的项。
先来对这个目标函数的梯度进行一个简单的推导:
那么上述目标函数的梯度转变为了一个对轨迹转移与奖励函数的积分,采用log函数的导数变换技巧,上式可以变成:
那么目标函数的导数变成:
那么现在就得到了一个只与策略和奖励有关的式子,我们可以对此进行计算,但是显然不可能对能够采样所有轨迹来进行梯度计算,在很多场景下要不轨迹无限要不穷举所需算力太大,所以我们只能对它进行估算。
而进行采样估算,就要请出大名鼎鼎的蒙特卡洛算法了。蒙特卡洛算法其实就是通过局部采样来估计整体的方法,那么我们可以采样一部分轨迹,得到:
02
Reinforce算法
根据上面的策略梯度优化的推导基础,我们可以开始介绍经典的Reinforce算法,这个算法就是简单的梯度策略优化的应用。
有了策略网络以后就可以开始在环境中采集动作轨迹𝒓,这些动作轨迹用于计算策略更新的梯度(上述蒙特卡洛法)。
当收集到了足够多的轨迹以后,采用这个蒙特卡洛估计法来计算策略梯度:
然后根据梯度进行策略更新:
反复进行采样然后计算梯度然后更新网络,直到你的策略网络拟合。
这就是经典的Reinforce算法。
评估一下这个算法:这是一个Model-free的算法,因为只涉及对策略网络本身输出采样,而不涉及由环境决定的状态转移过程。
但是呢,由于需要进行采样估计,虽然蒙特卡洛法是策略梯度的无偏估计,但是如果样本太少的话,得到的方差可能就会很大,这不利于训练的稳定性。
其实这也是策略梯度优化方法的固有缺陷,如果要学习的行为足够复杂(采样的轨迹太长)或者策略网络过大,那么要进行的采样和计算量也是非常大的,不然梯度估计的方差就会变得很大。
那么有没有减小方差的方法呢?有的兄弟,包有的。
回顾一下我们目前介绍的梯度策略优化算法,每一步的估计都乘上了从轨迹开始到结束的所有奖励,想一想真的需要吗?
我第10步的时候去做下一步决策的时候,过去9步的奖励还应该被考虑进来吗?
什么?你说不需要,我也说不需要,从因果的角度来看压根不需要之前的奖励!
那么我们可以改写一下策略梯度的数学表达式,变为:
引入一个基线可以有效减小方差(例如数据在基线上下跳动,那么对所有的数据减去这个基线的话,数据整体的方差就会有效减小,大概想象一下就可以):
这里的b就是引入的基线,这个基线常常是用一个价值模型评估当前状态的价值,即:
那么现在的策略梯度估计可以改写为:
从rewards-to-go到优势函数,目前做的一系列工作都是为了减少方差。接下来开始介绍PPO算法了。
那么我们把它代入回多步估计优势函数的式子中去,可以发现:
以上都是通过采样去对优势函数进行估计的可行公式。
把它展开来,就可以得到:
如果我们采集K步的话,那么通过等比数列求和公式,我们得到:
可以取边界值对这个衰减因子进行一个简单的分析:
03
ProximalPolicyOptimization
接下来就是著名的PPO算法啦。PPO需要训练两个模型,一个是策略网络,一个是价值网络(标准的Actor-critic结构)。
我们从它的目标函数来分析,首先对于策略网络:
对于价值模型:
这就是很简单的平方损失。然后还有一个所谓的熵损失,这是用来鼓励探索的:
那么总体损失就是:
当然,这里的损失其实完全可以自己设计,但是一般遵循这里的clip原则,因为ppo的核心就是不能让模型训练参数更新过大,否则就会越训练越偏。
这里还有个与refmodel的KL散度项,也是为了维持模型不要偏太远,即在目标函数中添加上:
公式太多不想看?那就从例子出发来捋一下强化学习的过程。
例如使用PPO去训练一个大语言模型:
一步一步来的话,就是:
一般来说,强化学习训练LLM时,都是用奖励模型或者奖励函数对模型生成的整体回答给一个奖励,然后把这个奖励复制或者平分给每个token,然后用它来计算优势值。
然后根据PPO的目标函数来计算梯度啦,计算完一个批次的数据的梯度以后就可以用来更新网络,直到它拟合。
这里插一下DPO。
04
DPO(DirectPreferenceOptimization)
从PPO的目标函数出发:
这个最大化目标可以改写成最小化目标:
这个目标接着可以写成:
最后得到:
那么对于分母,可以把它构造成一个概率分布:
那么上面的目标函数可以写为:
也就是说,我们训练出一个最优奖励模型的时候,实际上它已经给出最优的策略网络。那么也就是说,训练奖励模型和训练策略网络实际上是等价的。
那这就告诉我们,像之前的先训练奖励模型,然后通过奖励模型再来训练策略模型的这个范式,实际上并不需要先显式训练出一个奖励模型,而是可以直接用策略模型代替奖励模型去进行训练,从而得到我们最终需要的对齐模型。这两种方法在数学上是完全等价的。
所以DPO就绕过了online强化学习,直接用策略网络代替奖励模型去进行训练,从而达到同样的目的。
这里奖励模型就完全可以用策略模型进行替代。
那么来看一下我们一般是如何来训练rewardmodel的,一般来说,训练rewardmodel有两种方法。
第一种是采集LLM的两个回答,构造偏好对,来训练奖励模型给正样本更高的分数,负样本更低的分数。
它的数据组织形式是:
两两配对的模式被称为BTmodel(Bradley-Terry)。
那么把它代入我们的奖励模型的目标函数中有:
这里的D就是采集的偏好数据集。之前推导DPO的时候,我们有:
那么它代入奖励模型的目标函数中去有:
那么这里就成功把训练奖励模型,改成了直接训练策略模型,从而绕过了训练奖励模型的过程,那么后面的online强化学习过程也就不需要了,这就是所谓的直接偏好训练。
其实DPO弯弯绕绕这么多,实际上执行起来很简单,几乎就是SFT,以上的公式推导,是为了说明DPO的训练目标在数学上等价于PPO的强化学习训练目标,从而说明PPO可以做成的事,DPO按道理也应该可以做成。
这里给一些大白话的insight,DPO首先给出了PPO训练最优状态下策略网络与奖励网络的关系,也就是说如果满足了这个关系,PPO的强化学习这一步都不用训练了。
那么我们现在假定它满足这个关系了,那么我们还差一个问题,就是奖励模型哪里来的?它是经过rewardmodel的训练过程得来的。
而如果满足这个关系,我们不再需要把奖励模型显式地训练出来,而是直接把策略网络代入奖励模型的训练过程。
那么这个过程中,奖励模型的目标通过策略网络得到了实现,也就是说,训练奖励模型的过程,使得了这个关系得到了拟合式成立,从而不再需要真正的强化学习训练。
05
GRPO
GRPO的目标函数为:
其实主要的就是把GAEAdvantage估计改为了组间相对优势估计:
那么这样一改,就不需要valuemodel了,从而减少了训练开销。
GRPO的训练伪代码为:
06
DAPO
DAPO的目标函数是:
这是字节新发布的基于GRPO优化的一个算法,主要做了以下四个优化:
第二个动态采样,更像是一种训练上的工程技巧,说的是在训练过程中,模型可能对很多问题都回答的很好。
那么这样一来,对同一个批次中的很多问题,模型采样一组回答,可能都会获得最好的奖励,比如1,那么这样一来,每个回答的组间优势都变成了0,那么这样的数据就无法提供有效的梯度供模型训练。
所以在训练目标中,加入了这一项:
也就是说对于输入的样本持续采样,直到满足这个条件才把这一批数据拿去训练。
第三个是所谓的tokenlevel的损失计算。由于GRPO是先对每一条回答基于回答的长度做了一个平均,再对G个回答做一个平均。即:
而由于每个回答的长度不一致,这就会导致实际上对多个回答的每个token的loss除以了一个不一样的因子,这会导致一些很长的回答对loss的贡献减小。
而在long-COT的训练过程中,我们希望学习到有效的长回答,所以希望对长回答也给相应更大的loss。
DAPO把GRPO的这种loss计算方式称为sample-levelloss。而DAPO把这个范式改成了:
也就是所有的token的loss都施加同样的平均因子,这样对于长回答整体上就给了一个相对更大的loss。
最后一个是说之前训练模型的时候,如果模型生成的回答太长了,超过了限定值,就会被直接阶段。而对于这些被阶段的回答,会施加一个惩罚性的奖励。
而这种惩罚性的信号可能又会引入训练噪声,因为可能虽然回答很长,但是却是逻辑上非常正确的回答,那模型就会不知道这个回答到底是好的还是不好的。
那DAPO在这里实施了一个跟长度有关的线性奖励:
除了上面四个优化技巧以外,DAPO还把KL散度约束给去掉了,理由是:
就是说long-COT训练过程中,模型本来就是要在较大程度上偏离原始的状态,所以干脆省了用于约束模型更新的KL散度。
DAPO的训练流程伪代码为:
作者:catneverfat,已获作者授权发布
来源:https ://zhuanlan. zhihu.com/p/1898817630208517687
llms大厂面试题宝典(知识星球)来了,这是一个面向全体学生和机器学习/算法/大模型/科研人员的技术沟通和求职交流的平台。
在这里你可以了解最前沿AI技术资讯、Paper、大模型、多模态,算法竞赛、实战项目、获取AI算法的校招/社招准备攻略、面试题库、面试经验分享、Offer选择、内推机会、学习路线、求职答疑和海量学习资料等内容。
同时,你也可以与来自港科大、北大、清华、中科院、CMU、腾讯、百度等名校名企开发者互动交流~
llms大厂面试题宝典方向涉及搜广推、深度学习,机器学习,计算机视觉,知识图谱,自然语言处理,大数据,自动驾驶,强化学习,大模型、多模态、具身智能等多个方向。
我们会不定期开展知识星球现金立减优惠活动,加入星球前可以添加我微信:
yangyiya2002,咨询活动详情。iOS用户直接添加我微信进星球。