Salesforce AI研究: 从奖励建模到在线RLHF工作流

摘要

该研究在本技术报告中介绍了在线迭代基于人类反馈的强化学习(Online Iterative Reinforcement Learning from Human Feedback, RLHF)的工作流程,在最近的大语言模型(Large Language Model, LLM)文献中,这被广泛报道为大幅优于其离线对应方法。然而,现有的开源RLHF项目仍然主要局限于离线学习环境。在本技术报告中,该研究旨在填补这一空白,并提供一个易于复现的在线迭代RLHF的详细方案。特别是,由于在线人工反馈对于资源有限的开源社区通常是不可行的,该研究首先使用一组多样的开源数据集构建偏好模型,并使用构建的代理偏好模型来近似人工反馈。然后,该研究讨论了在线迭代RLHF背后的理论见解和算法原理,并给出了详细的实际实施方案。该研究训练的LLM SFR-Iterative-DPO-LLaMA-3-8B-R在LLM聊天机器人基准测试中取得了令人印象深刻的性能,包括AlpacaEval-2、Arena-Hard和MT-Bench,以及其他学术基准测试如HumanEval和TruthfulQA。该研究表明,有监督微调(Supervised Fine-Tuning, SFT)和迭代RLHF可以使用完全开源的数据集获得最先进的性能。此外,该研究已经公开了模型、精心整理的数据集以及全面的分步代码指南。请参考https://github.com/RLHFlow/RLHF-Reward-Modeling和https://github.com/RLHFlow/Online-RLHF以获取更详细的信息。

参考论文: https://arxiv.org/pdf/2405.07863

1 引言

基于人类反馈的强化学习(Reinforcement Learning from Human Feedback, RLHF)已成为将人类偏好信号整合到机器学习方法中的关键技术,特别是在使大语言模型(Large Language Models, LLMs)与人类价值观和偏好保持一致方面。著名的例子包括革命性的闭源ChatGPT、Claude和Gemini,以及强大的开源模型如Zephyr、Starling和LLaMA-3。特别是,自ChatGPT推出以来,RLHF在各种社区中引起了极大的兴趣。然而,与有监督微调相比,RLHF在开源社区中的研究相对较少,而有监督微调已经有了许多优秀的开源项目,如Open-Hermes和Vicuna。

为了便于讨论,该研究基于标准RLHF工作流。该研究将LLM表征为一个策略 π \pi π,它接受一个提示 x ∈ X x \in \mathcal{X} xX并从分布 π ( ⋅ ∣ x ) \pi(\cdot|x) π(x)中生成一个响应 a ∈ A a \in \mathcal{A} aA。该研究将RLHF的初始模型表示为 π 0 \pi_0 π0,它在预训练阶段之后在一些指令跟随数据上进行微调。该研究假设有一个提示集,从某个未知但固定的分布 x ∼ d 0 x \sim d_0 xd0中采样。RLHF的关键组成部分是偏好预言机(Preference Oracle),其数学定义如下。

定义1(偏好预言机)。存在一个偏好预言机 P : X × A × A → [ 0 , 1 ] P: \mathcal{X} \times \mathcal{A} \times \mathcal{A} \rightarrow [0,1] P:X×A×A[0,1],该研究可以查询它以接收偏好信号:

y ∼ Ber ( P ( a 1 ≻ a 2 ∣ x , a 1 , a 2 ) ) y \sim \text{Ber}(P(a_1 \succ a_2|x,a_1,a_2)) yBer(P(a1a2x,a1,a2)),

其中 Ber ( t ) \text{Ber}(t) Ber(t)是参数为 t t t的Bernoulli分布, y = 1 y=1 y=1表示 a 1 a_1 a1优于 a 2 a_2 a2, y = 0 y=0 y=0表示 a 2 a_2 a2优于 a 1 a_1 a1

为了进一步简化问题,通常假设偏好信号可以用基于奖励的Bradley-Terry模型来建模,这是偏好学习中一种著名的方法。

定义2(Bradley-Terry模型)。存在一个真实奖励函数 r ∗ r^* r,偏好模型满足:

P ( a 1 ≻ a 2 ∣ x , a 1 , a 2 ) = exp ⁡ ( r ∗ ( x , a 1 ) ) exp ⁡ ( r ∗ ( x , a 1 ) ) + exp ⁡ ( r ∗ ( x , a 2 ) ) = σ ( r ∗ ( x , a 1 ) − r ∗ ( x , a 2 ) ) P(a_1 \succ a_2|x,a_1,a_2) = \frac{\exp(r^*(x,a_1))}{\exp(r^*(x,a_1)) + \exp(r^*(x,a_2))} = \sigma(r^*(x,a_1) - r^*(x,a_2)) P(a1a2x,a1,a2)=exp(r(x,a1))+exp(r(x,a2))exp(r(x,a1))=σ(r(x,a1)r(x,a2)), (1)

其中 σ ( z ) = 1 / ( 1 + exp ⁡ ( − z ) ) \sigma(z) = 1/(1+\exp(-z)) σ(z)=1/(1+exp(z))是sigmoid函数。

这种建模是偏好预言机的一个代理,并将RLHF的学习目标与奖励最大化联系起来。实践中,由于BT模型可能无法完全捕捉复杂的人类偏好,该研究通常优化以下KL正则化目标:

J ( π ) = E x ∼ d 0 E a ∼ π ( ⋅ ∣ x ) [ r ∗ ( x , a ) + η log ⁡ π 0 ( a ∣ x ) π ( a ∣ x ) ] = E x ∼ d 0 [ E a ∼ π ( ⋅ ∣ x ) [ r ∗ ( x , a ) ] − η D KL ( π ( ⋅ ∣ x ) ∥ π 0 ( ⋅ ∣ x ) ) ] J(\pi) = \mathbb{E}_{x \sim d_0} \mathbb{E}_{a \sim \pi(\cdot|x)} [r^*(x,a) + \eta \log \frac{\pi_0(a|x)}{\pi(a|x)}] = \mathbb{E}_{x \sim d_0} [\mathbb{E}_{a \sim \pi(\cdot|x)} [r^*(x,a)] - \eta D_{\text{KL}}(\pi(\cdot|x) \| \pi_0(\cdot|x))] J(π)=Exd0Eaπ(x)[r(x,a)+ηlogπ(ax)π0(ax)]=Exd0[Eaπ(x)[r(x,a)]ηDKL(π(x)π0(x))], (2)

其中 η > 0 \eta > 0 η>0是KL惩罚系数。这种公式在实践中被广泛研究,并承认以下难以处理的封闭形式解

π ∗ ( a ∣ x ) = 1 Z ( x ) π 0 ( a ∣ x ) exp ⁡ ( 1 η r ∗ ( x , a ) ) \pi^*(a|x) = \frac{1}{Z(x)} \pi_0(a|x) \exp(\frac{1}{\eta} r^*(x,a)) π(ax)=Z(x)1π0(ax)exp(η1r(x,a)), (3)

其中 Z ( x ) = ∑ a ′ ∈ A π 0 ( a ′ ∣ x ) exp ⁡ ( 1 η r ∗ ( x , a ′ ) ) Z(x) = \sum_{a' \in \mathcal{A}} \pi_0(a'|x) \exp(\frac{1}{\eta} r^*(x,a')) Z(x)=aAπ0(ax)exp(η1r(x,a))是归一化常数。

在后续小节中,该研究首先描述现有方法,并讨论其挑战,这应作为该研究项目的动机。

1.1 先前的RLHF算法及其挑战

总的来说,先前的RLHF方法可以大致分为两类:(1)使用近端策略优化(Proximal Policy Optimization, PPO)的深度强化学习(Deep Reinforcement Learning, DRL)方法;(2)(离线)直接偏好学习方法(如DPO)。

DRL框架。DRL框架由两个阶段组成。在第一阶段,训练一个奖励模型。具体来说,给定一个偏好数据集 D off = { ( x , a w , a l ) } \mathcal{D}_{\text{off}} = \{(x,a_w,a_l)\} Doff={(x,aw,al)},其中 a w a_w aw是在给定指令或提示 x x x的情况下优于 a l a_l al的响应。BT模型的对数似然函数可以表示如下:

ℓ D off ( θ ) = ∑ ( x , a w , a l , y ) ∈ D off log ⁡ σ ( r θ ( x , a w ) − r θ ( x , a l ) ) \ell_{\mathcal{D}_{\text{off}}}(\theta) = \sum_{(x,a_w,a_l,y) \in \mathcal{D}_{\text{off}}} \log \sigma(r_\theta(x,a_w) - r_\theta(x,a_l)) Doff(θ)=(x,aw,al,y)Dofflogσ(rθ(x,aw)rθ(x,al)). (4)

该研究可以根据 D off \mathcal{D}_{\text{off}} Doff通过最大化 ℓ D off ( θ ) \ell_{\mathcal{D}_{\text{off}}}(\theta) Doff(θ)来计算最大似然估计(Maximum Likelihood Estimator, MLE) r MLE r_{\text{MLE}} rMLE。然后,在第二阶段,可以应用像PPO这样的DRL方法来优化以下正则化奖励:

r ^ ( x , a ) = r MLE ( x , a ) − η log ⁡ π ( a ∣ x ) π 0 ( a ∣ x ) \hat{r}(x,a) = r_{\text{MLE}}(x,a) - \eta \log \frac{\pi(a|x)}{\pi_0(a|x)} r^(x,a)=rMLE(x,a)ηlogπ0(ax)π(ax).

ChatGPT和Claude采用了这种方法,并为LLaMA-2/3的对齐做出了贡献。然而,众所周知,即使在最好的情况下,将DRL方法调整到最佳性能也需要在超参数选择和代码级优化方面付出大量努力。在LLMs的背景下,这变得更具挑战性,因为LLMs的微调在计算上是昂贵的。此外,PPO算法需要同时加载多个LLMs,包括actor(策略)、critic(值网络)、奖励模型和参考模型(用于KL估计),这对GPU内存造成了巨大压力,尤其是对资源受限的开源项目而言。

直接偏好学习。鉴于PPO的上述问题,有一条创新的工作直接从人类偏好数据集中学习,而无需显式构建奖励函数。在这些方法中,直接偏好优化(Direct Preference Optimization, DPO)算法特别受欢迎。它利用等式(3)将奖励表示为策略的函数,并直接使用偏好数据集 D off \mathcal{D}_{\text{off}} Doff优化以下损失函数:

L D off ( θ , π 0 ) = − ∑ ( x , a w , a l ) ∈ D off log ⁡ σ ( η log ⁡ π θ ( a w ∣ x ) π 0 ( a w ∣ x ) − η log ⁡ π θ ( a l ∣ x ) π 0 ( a l ∣ x ) ) L_{\mathcal{D}_{\text{off}}}(\theta,\pi_0) = -\sum_{(x,a_w,a_l) \in \mathcal{D}_{\text{off}}} \log \sigma(\eta \log \frac{\pi_\theta(a_w|x)}{\pi_0(a_w|x)} - \eta \log \frac{\pi_\theta(a_l|x)}{\pi_0(a_l|x)}) LDoff(θ,π0)=(x,aw,al)Dofflogσ(ηlogπ0(awx)πθ(awx)ηlogπ0(alx)πθ(alx)). (5)

与DRL方法相比,直接偏好学习算法通常更容易调整,并且需要更少的计算资源。值得注意的是,在许多LLM基准测试的排行榜上,强大的开源模型主要使用DPO进行对齐。考虑到这些因素,在该研究项目中,该研究专注于直接偏好学习算法,而将DRL框架的研究留待未来。

虽然普通的离线直接偏好学习算法在一些案例研究中很有用,但它们也面临某些挑战。具体来说,它们被认为是离线的,因为它们从通过以下过程收集的离线偏好数据集中学习:

x ∼ d 0 , a 1 ∼ π D 1 , a 2 ∼ π D 2 , y ∼ Ber ( P ( a 1 ≻ a 2 ∣ x , a 1 , a 2 ) ) x \sim d_0, a_1 \sim \pi_D^1, a_2 \sim \pi_D^2, y \sim \text{Ber}(P(a_1 \succ a_2|x,a_1,a_2)) xd0,a1πD1,a2πD2,yBer(P(a1a2x,a1,a2)). (6)

这里, ( π D 1 , π D 2 ) (\pi_D^1,\pi_D^2) (πD1,πD2)表示两个行为策略,通常取为 π 0 \pi_0 π0、其他开源模型或专有模型。术语"离线学习"意味着该研究无法在训练过程中进一步查询偏好预言机 P P P。然而,用于离线学习的有限数据集 D off \mathcal{D}_{\text{off}} Doff导致过度优化问题。这是因为有限的数据集无法覆盖整个提示-响应空间,所以当面对分布外数据时,生成的策略模型往往表现不佳(Burns et al., 2023)。事实上,Xiong et al. (2023)表明,该研究需要对空间进行均匀覆盖,以确保普通DPO(Rafailov et al., 2023)能够学习到最优策略。这种覆盖条件在实践中很难满足,因为空间是指数级的。以下是一些突出这一问题的统计数据。

在这里插入图片描述

  • 在RLHF训练过程中,平均密度比 π ( a ∣ x ) π 0 ( a ∣ x ) > exp ⁡ ( 25 ) \frac{\pi(a|x)}{\pi_0(a|x)} > \exp(25) π0(ax)π(ax)>exp(25),如Bai et al. (2022a)的图13所报告。类似的结果见拒绝采样微调(Dong et al., 2023)和DPO(Rafailov et al., 2023)。
  • 作为一个案例研究,考虑使用行为策略Gemma-7B-it从(Cui et al., 2023)的15k提示中收集数据,以使用DPO对齐Gemma-2B-it(Team et al., 2024)。计算得出Gemma-7B-it和Gemma-2B-it之间的平均KL散度为456.4。

因此,策略之间的分布偏移通常非常大,不太可能仅从预先收集的数据集中学习到最优策略。

1.2 在线迭代RLHF

相比之下,Claude项目和LLaMA-2项目已经证明,在线迭代RLHF可以显著提高模型性能。在线迭代RLHF的过程,如Xiong et al. 中正式表述的那样,可以总结如下。给定预先收集的偏好数据集 D = D off \mathcal{D} = \mathcal{D}_{\text{off}} D=Doff(如果适用,否则为空),对于每个迭代 t ∈ [ T ] t \in [T] t[T]:

• 该研究首先根据迄今收集的历史数据 D \mathcal{D} D更新策略对 ( π t 1 , π t 2 ) (\pi_t^1,\pi_t^2) (πt1,πt2);
• 该研究收集 m m m个元组作为 D t \mathcal{D}_t Dt:通过 x t , i ∼ d 0 x_{t,i} \sim d_0 xt,id0采样随机提示,通过 ( a t , i 1 , a t , i 2 ) ∼ ( π t 1 , π t 2 ) (a_{t,i}^1,a_{t,i}^2) \sim (\pi_t^1,\pi_t^2) (at,i1,at,i2)(πt1,πt2)收集两个响应,并查询偏好信号 y t , i ∼ P y_{t,i} \sim P yt,iP;
• 更新 D ← D ∪ D t \mathcal{D} \leftarrow \mathcal{D} \cup \mathcal{D}_t DDDt

在线数据的有效性可以在RLHF的背景下直观地解释如下。最初,来自策略 π 0 \pi_0 π0的大多数样本都处于低奖励区间,并用于奖励建模。因此,该研究的奖励模型在评估低奖励响应方面是准确的。然而,随着训练的进行,策略得到改进,开始生成具有更高奖励的响应。这些高奖励响应可能落入奖励函数的分布外(Out-of-Distribution, OOD)域,构建的奖励模型不再可靠。相比之下,使用中间策略对新响应进行采样,在这些样本上查询人工反馈,并将其添加回训练集,可以显著缓解OOD问题,传统的离线方法可能无法有效处理。这种方法提高了奖励模型在高奖励区间的可靠性,进而提高了策略的性能。这种直觉延伸到直接偏好学习算法,其中该研究本质上通过不断收集新的在线数据来扩大偏好数据集。

Huggingface(Tunstall et al., 2023)的出色工作提供了一个开源方案,从高质量的离线偏好数据集中进行直接偏好学习,这可以被视为一种有效的蒸馏方式。相比之下,在线RLHF在文献中仍然没有得到充分探索。Xiong et al. (2023)从理论角度迈出了理解在线探索在RLHF中优势的第一步,本技术报告旨在提供一个详细的方案来验证所提框架的有效性。

1.3 人工反馈近似

理想情况下,在线偏好信号是从一组有代表性的人类标注者中采样得到的。然而,在实践中人工反馈极其昂贵,开源社区通常无法承担。在文献中,有一系列工作表明,训练代理偏好模型,并以半监督方式使用偏好模型给出代理标签,可以提高模型性能。该研究推测,这是因为奖励模型(判别器)通常比策略(生成器)泛化得更好。

特别是,Hoang Tran表明,如果偏好模型(奖励模型)在一组多样化的偏好数据集上训练,只有0.4B参数的Pair-RM可以为迭代偏好学习提供有意义的信号,使得生成的模型1在AlpacaEval-2长度控制获胜率上达到令人印象深刻的26.4%。受此系列工作的启发,该研究首先在第2节基于多样化的开源偏好数据集训练一个代理偏好(奖励)模型,然后使用生成的模型为后续迭代RLHF提供偏好信号。

1.4 相关工作

RLHF和RLHF算法。用于LLM对齐的主导RLHF框架最早在Christiano et al. ); Ziegler et al. 中普及,并在Instruct-GPT、Claude和LLaMA-2中得到进一步发展。这些工作通常涉及基于Bradley-Terry模型的MLE构建奖励模型,然后使用PPO算法优化具有KL正则化的奖励信号。一个值得注意的例外是LLaMA-2在其RLHF流水线中使用了拒绝采样微调和PPO的混合。该研究建议感兴趣的读者参考Bai et al. ; Touvron et al. 以获得详细描述。然而,在RLHF中使用PPO有局限性。众所周知,它是不稳定的,对实现敏感,并且资源密集。尽管有一些努力在RLHF的背景下改进PPO,但由于这些局限性,对于开源社区来说,复现使用PPO取得的成功结果具有挑战性,因为它需要大量的努力和资源,而开源社区通常无法承担。认识到PPO的这些问题,一系列工作研究了(离线)直接偏好学习算法,包括Slic、DPO、IPO、KTO、ARM和GPO。这些算法跳过奖励建模步骤,直接优化离线偏好数据集上设计的损失目标(因此得名)。人们广泛观察到,直接偏好学习算法比PPO稳定得多,并且通过标准基准测试评估取得了令人印象深刻的性能。

在这里插入图片描述

RLHF受益于在线(迭代)学习。粗略地说,在线迭代学习意味着该研究将部署中间模型,并查询这些模型响应的人工反馈。直观地说,这种策略有助于缓解学习到的奖励模型的OOD问题,其优势已在基于PPO的框架中得到报告。即使额外的反馈来自从相同离线数据集构建的代理奖励(类似于半监督学习),迭代拒绝采样微调(RAFT)和基于目标分布估计器样本的DPO已被证明优于原始离线对应方法。此外,最近的工作表明,直接偏好学习算法的在线迭代变体显著优于其离线对应方法。特别是,该研究建议感兴趣的读者参考Guo et al. (2024)以获得使用不同离线基础算法的广泛实验结果。

2 作为人工反馈近似的奖励建模

该研究在本节中介绍偏好模型构建的细节,其中研究了作为BT模型MLE的奖励建模和一般偏好模型。训练脚本和完整方案在https://github.com/RLHFlow/RLHF-Reward-Modeling中提供。

2.1 偏好数据集

遵循Pair-RM和LLaMA-2,该研究使用开源数据集的混合作为训练集。以下是对数据集的简要介绍:

  • HH-RLHF是一个成对偏好数据集,其中每个样本都伴随着一个对话历史和两个由早期的52B参数Claude模型编写的替代响应。响应的偏好由人类标注。
  • SHP来自Reddit,包括来自18个子版块的样本,如askacademia、askbaking、askengineers和changemyview。每个样本是一个Reddit帖子,其中包含一个问题/指令和一对顶层评论。一个评论比另一个评论更受Reddit用户青睐。所有偏好和响应都由人类提供。只使用得分比>2的样本,每个提示最多取5对。
  • HelpSteer。这个开源数据集包含提示、响应和五个人工标注的属性(helpfulness、correctness、coherence、complexity和verbosity),范围从0到4。提示使用模板生成和人工生成的混合方法生成,而响应由内部LLM生成。作者为每个提示生成最多4个响应,该研究可以基于它们构建成对比较。
  • PKU-SafeRLHF。这个数据集包含30k+专家比较数据。每个样本包括对一个问题的两个响应,以及分别针对helpfulness和safety的两个偏好信号。响应由开源聊天机器人生成,偏好信号通过14个危害类别多类分类的结果合并。
  • UltraFeedback)包含来自多样化资源(包括UltraChat、ShareGPT、Evol-Instruct、TruthfulQA、FalseQA和FLAN)的64k提示,作者使用从一组多样化的最先进开源LLM中采样的4个不同LLM为每个提示生成4个响应。偏好来自GPT-4,基于细粒度的标注指令,其中包含4个不同方面,即instruction-following、truthfulness、honesty和helpfulness。UltraFeedback的数据集收集策略也影响了许多后续工作。
  • UltraInteract是一个针对复杂推理任务设计的偏好数据集。作者为每个指令收集一个偏好树,指令是根,每个动作是一个节点。一个轨迹是一个从根到叶的路径,由一系列动作组成。成对的正确和不正确节点或轨迹用于偏好学习。
  • Distilabel-Capybara2是一个多轮对话的偏好数据集,其提示取自Daniele and Suphavadeeprasit,响应由开源LLM生成,偏好由GPT-4生成。
  • Distilabel-Orca3的收集方式与Capybara类似,但提示来自Lian et al. 。

LLM的训练高度依赖于数据。为了确保高质量的训练数据,该研究对使用的开源数据集进行过滤。这个过程移除了低质量和无意义的样本。此外,具有空回合或不正确标签(由数据集的其他特征暗示)的对话被删除。此外,在具有绝对分数的数据集中,边际较小的成对比较被排除,因为这些偏好信号往往是嘈杂的。这个过程大致删除了10%的数据。该研究总结了用于训练的开源数据集的统计数据,见表1,并在huggingface上准备了它们以及数据过滤脚本,可在https://huggingface.co/collections/RLHFlow/standard-format-preference-dataset-662eec0252e194d5d40c252a获得。
在这里插入图片描述
在这里插入图片描述

2.2 Bradley-Terry奖励模型和偏好模型

Bradley-Terry模型构建。该研究遵循先前的工作,使用SFT模型4初始化奖励模型。该研究将最后一层替换为线性头,以预测适合偏好学习的标量分数。奖励模型使用负对数似然损失函数进行训练,实现最大似然估计(MLE)。这个损失函数定义为:

L RM ( θ ) = − E x , a w , a l ∼ D log ⁡ σ ( r θ ( x , a w ) − r θ ( x , a l ) ) L_{\text{RM}}(\theta) = -\mathbb{E}_{x,a_w,a_l \sim \mathcal{D}} \log \sigma(r_\theta(x,a_w) - r_\theta(x,a_l)) LRM(θ)=Ex,aw,alDlogσ(rθ(x,aw)rθ(x,al)),

其中 a w a_w aw是优于 a l a_l al的偏好响应。该研究训练基于LLaMA-3-8B的奖励模型一个epoch,全局批量大小为512。学习率设置为 l r = 2 × 1 0 − 6 lr = 2 \times 10^{-6} lr=2×106,采用余弦学习率调度,预热比例为0.03。对于Gemma-2B-it,使用更大的学习率 1 0 − 5 10^{-5} 105

在这里插入图片描述

偏好模型构建。(成对)偏好模型接受一个提示 x x x和两个响应 a 1 , a 2 a_1,a_2 a1,a2作为输入,并预测 P ^ ( a 1 ≻ a 2 ∣ x , a 1 , a 2 ) \hat{P}(a_1 \succ a_2|x,a_1,a_2) P^(a1a2x,a1,a2)的概率。该研究遵循Zhao et al. ; Liu et al. ,利用LLM作为下一个token预测器的能力进行偏好建模。具体来说,对于给定的偏好对 ( x , a 1 , a 2 , A ) (x,a_1,a_2,A) (x,a1,a2,A),其中 A A A表示第一个响应是优选的,该对被格式化为一个指令跟随任务:

instruction = [CONTEXT] {x} [RESPONSE A] {a1} [RESPONSE B] {a2}, and label = A.

如果第二个响应是优选的,该研究将标签 A A A替换为 B B B。然后,该研究简单地将偏好建模视为一个指令跟随任务,在这些指令-标签对上微调模型。为了缓解位置偏差(偏好模型可能偏好给出在RESPONSE A位置的响应),响应的顺序在数据格式化期间是随机的。在推理过程中,该研究简单地使用解码 A A A的概率作为 P ^ ( a 1 ≻ a 2 ∣ x , a 1 , a 2 ) \hat{P}(a_1 \succ a_2|x,a_1,a_2) P^(a1a2x,a1,a2)

该研究训练基于LLaMA-3-8B的偏好模型一个epoch。样本被打包成长度为3072的块,使用全局批量大小128。学习率设置为 l r = 5 × 1 0 − 6 lr = 5 \times 10^{-6} lr=5×106,采用余弦学习率调度,预热比例为0.03。对于Gemma-2B-it,使用更大的学习率 1 0 − 5 10^{-5} 105。该研究顺便提到,可以在数据格式中包含详细的评分规则,以进一步改进偏好数据集,这将留待未来工作(Qin et al., 2023)。

2.3 评估结果

该研究考虑训练集的两个版本:

  • Mix1: HH-RLHF + SHP + UltraFeedback + Summarization(Stiennon et al., 2020)。
  • Mix2:表1中的所有数据集。

Mix1数据集类似于UltraFeedback的构建,带有一个额外的摘要数据集。相比之下,Mix2由更多的推理偏好对(数学和代码)和安全数据组成。该研究还考虑三种不同的方法来建模偏好信号,包括以LLM-as-a-judge方式提示、作为BT奖励模型MLE的奖励建模以及偏好模型。

该研究使用RewardBench评估模型,这是一个旨在评估奖励模型在四个类别中的能力的基准:聊天、聊天-困难、安全和推理。主要评估结果在表2中。很明显,没有明确训练,提示方法在所有指标上都不如BT模型和偏好模型。同时,偏好模型在与编码和数学相关的推理任务中优于BT模型。该研究还注意到,随着更多的数据,特别是在编码、数学和安全方面指定的数据,由mix2训练的奖励模型在安全和推理方面取得了比早期尝试版本更高的准确率。特别是,该研究在表2中使用Ultra-RM-13B作为参考模型,可以观察到,与安全和推理相关的额外数据(以及更强大的基础模型)在很大程度上促成了该研究奖励模型的优异性能。

在这里插入图片描述
在这里插入图片描述

奖励建模中的长度偏差。众所周知,由RLHF对齐的LLM通常给出更长的响应,奖励模型中也存在长度偏差,可能受到使用的偏好数据的影响。为了更好地理解这种偏差,该研究从提示集中随机抽取2K个提示,并使用SFT模型为每个提示生成8个响应(见第3节的详细信息)。然后,该研究计算响应的长度和奖励,并在图5中绘制它们之间的Pearson相关系数的热图。显然,两个奖励模型在某种程度上都偏向于更长的响应。相比之下,UltraRM-13B表现出更强的偏差,因为该研究观察到UltraRM-13B(左图)的平均Pearson相关系数为0.19,而基于mix2训练的BT奖励为0.06(右图)。这可能部分是由于使用了额外的Capybara、OpenOrca和UltraInteract,其优选响应比被拒绝的响应更短。该研究将在第4节回到奖励模型影响的消融研究。

该研究顺便提到,在文献中,对不同类型的信号进行单独建模,并在随后的策略优化阶段战略性地合并它们也是常见的,这将留待未来工作。

3 迭代策略优化

该研究在本节中开发在线迭代RLHF的主要算法,包括理论见解和实施细节。特别地,算法将以直接偏好学习的风格设计,以实现稳定和高效的训练。

3.1 有监督微调

该项目使用的基础模型是LLaMA-3-8B。为了确保项目的可复现性和开放性,该研究自行执行SFT以获得初始策略 π 0 \pi_0 π0。该研究收集了一组高质量的指令数据集用于SFT,例如ShareGPT、SlimOrca、MathInstruct和Evol-Instruct(完整列表见附录)。训练以 2 × 1 0 − 5 2 \times 10^{-5} 2×105的学习率进行一个epoch。采用余弦调度器,全局批量大小设置为32,预热比例为0.03。为了加速训练,该研究遵循Diao et al. (2023); Tunstall et al. (2023)打包样本并使用块大小8192。该研究使用来自TRL的SFT-Trainer,详细方案可在https://github.com/RLHFlow/Online-RLHF获得。

3.2 迭代直接偏好学习:理论见解和算法原理

该研究在算法1中为在线迭代RLHF提供主要算法框架,并总结关键原则和算法思想如下。

混合批量学习。该研究制定了一个稍微更一般的框架,将初始离线数据集与训练期间收集的在线数据结合起来,因此得名混合学习,类似于Claude(Bai et al., 2022a)和LLaMA-2(Touvron et al., 2023)的方案。此外,为了缓解训练和部署大型LLM的计算成本,该研究使用大批量大小 m m m进行稀疏更新。

非对称结构以平衡开发和探索。该框架还具有非对称结构,因为该研究将两个代理分为主代理和增强器。

  • 主代理旨在学习 π ∗ \pi^* π。具体来说,对于每次迭代,第一个代理,称为主代理,始终在历史数据的MLE r MLE r_{\text{MLE}} rMLE下采用最优策略,这可以看作是对迄今为止收集的信息的充分利用;
  • 增强器旨在协助主代理的学习。由于主代理仅利用历史数据,因此只有在该研究能够从新收集的在线数据或离线数据 D off \mathcal{D}_{\text{off}} Doff提供足够覆盖(在实践中不太可能成立,如第1.1节所讨论)时,它才有效。因此,增强器在相对于主代理策略 π t 1 \pi_t^1 πt1存在更多不确定性的方向上探索(由 Γ t m ( λ , π t 1 , π ′ ) \Gamma_t^m(\lambda,\pi_t^1,\pi') Γtm(λ,πt1,π)衡量),同时与 π t 1 \pi_t^1 πt1保持适度的KL散度。

当应用战略探索方法时,该研究有以下理论保证。

在这里插入图片描述

定理1。对于任何精度参数 ϵ > 0 \epsilon > 0 ϵ>0,当批量大小 m = O ~ ( d e ϵ 2 ) m = \tilde{O}(\frac{d_e}{\epsilon^2}) m=O~(ϵ2de)并适当选择其他超参数时,那么,以高概率,在最多 T = O ~ ( d e ) T = \tilde{O}(d_e) T=O~(de)次迭代后,该研究可以找到一个 t 0 ∈ [ T ] t_0 \in [T] t0[T],使得

J ( π ∗ ) − J ( π t 0 ) + η E x t 0 ∼ d 0 [ D KL ( π ∗ ( ⋅ ∣ x t 0 ) ∥ π t 0 ( ⋅ ∣ x t 0 ) ) ] ≲ ϵ J(\pi^*) - J(\pi_{t_0}) + \eta \mathbb{E}_{x_{t_0} \sim d_0}[D_{\text{KL}}(\pi^*(\cdot|x_{t_0}) \| \pi_{t_0}(\cdot|x_{t_0}))] \lesssim \epsilon J(π)J(πt0)+ηExt0d0[DKL(π(xt0)πt0(xt0))]ϵ,

其中 J ( π ) = E x ∼ d 0 [ E a ∼ π ( ⋅ ∣ x ) [ r ∗ ( x , a ) ] − η D KL ( π ( ⋅ ∣ x ) ∥ π 0 ( ⋅ ∣ x ) ) ] J(\pi) = \mathbb{E}_{x \sim d_0} [\mathbb{E}_{a \sim \pi(\cdot|x)} [r^*(x,a)] - \eta D_{\text{KL}}(\pi(\cdot|x) \| \pi_0(\cdot|x))] J(π)=Exd0[Eaπ(x)[r(x,a)]ηDKL(π(x)π0(x))]是KL正则化值。这里 O ~ \tilde{O} O~隐藏了一些对数因子, d e d_e de是RLHF问题的复杂度度量。特别地,如果奖励函数可以嵌入到特征映射 ϕ : X × A → R d \phi: \mathcal{X} \times \mathcal{A} \rightarrow \mathbb{R}^d ϕ:X×ARd中线性的 d d d维空间,那么 d e = d d_e = d de=d

3.3 实践实施细节

现在该研究将重点从理论见解转移到实践实施。该研究在图6中提供了实现的说明。

MLE策略。由于主代理只利用数据,该研究可以在历史数据上运行DPO来近似 r MLE r_{\text{MLE}} rMLE下的最优策略: π t MLE \pi_t^{\text{MLE}} πtMLE。该研究注意到,虽然由于其简单性,该研究在这里使用DPO,但算法1可以通过将其与任何预言机算法(例如PPO和InfoNCA(Chen et al., 2024a))相结合来实现,这些算法是KL正则化优化问题的合理近似。

探索策略。主要挑战在于选择增强器策略进行探索。回想一下,该研究的目标是找到一个增强器策略,从以下策略子集中最大化相对于主代理的不确定性:

π ~ ∈ Π t = { π ′ ∈ Π : η ⋅ E x ∼ d 0 D KL ( π ( ⋅ ∣ x ) , π t 1 ( ⋅ ∣ x ) ) ≤ Γ t m ( λ , π t 1 , π ′ ) } \tilde{\pi} \in \Pi_t = \left\{\pi' \in \Pi: \eta \cdot \mathbb{E}_{x \sim d_0} D_{\text{KL}}(\pi(\cdot|x),\pi_t^1(\cdot|x)) \leq \Gamma_t^m(\lambda,\pi_t^1,\pi') \right\} π~Πt={πΠ:ηExd0DKL(π(x),πt1(x))Γtm(λ,πt1,π)}.

不幸的是,除了线性情况,不确定性估计器没有解析形式。但该研究可以得出的主要见解是最大化与 π t 1 \pi_t^1 πt1的策略差异,同时保持适度的KL散度。这激励该研究使用 π t 1 \pi_t^1 πt1的模型变体。该研究讨论了一些流行的启发式实现。

  • 调整温度和训练步骤。在Claude项目中,作者选择使用具有不同训练步骤的模型作为 ( π t 1 , π t 2 ) (\pi_t^1,\pi_t^2) (πt1,πt2)。例如,如果该研究总共运行PPO 2个epoch,该研究可以将 π t 1 \pi_t^1 πt1作为在第一个epoch结束时保存的模型,将 π t 2 \pi_t^2 πt2作为在第二个epoch结束时保存的模型。此外,LLaMA-2项目调整 π t 1 \pi_t^1 πt1的采样温度以诱导 π t 2 \pi_t^2 πt2。这些修改在模型中引入了多样性,并促进了探索。

  • 拒绝采样是另一种流行的基于集成的探索方法。在LLM的背景下,它通常限于 n n n个最佳的采样。具体来说,该研究通过 π t 1 \pi_t^1 πt1为每个提示独立采样 n n n个响应,然后使用偏好/奖励函数对响应进行排序,并将奖励最高的响应作为最终输出。换句话说,该研究将 π t 2 \pi_t^2 πt2作为 π t 1 \pi_t^1 πt1 n n n个最佳变体。通过这种方式, π t 2 \pi_t^2 πt2扩大了 π t 1 \pi_t^1 πt1之间的边界,并提供了探索。同时,在这种情况下,两个策略之间的KL散度以 log ⁡ n − n − 1 n \log n - \frac{n-1}{n} lognnn1为上界,通常远优于这个保守估计。

在该研究的实验中,该研究使用DPO来近似计算预言机,并使用开源包TRL5实现DPO。该研究在历史数据上用参考模型 π 0 \pi_0 π0(SFT模型)运行DPO 2个epoch,以获得MLE策略 π t MLE \pi_t^{\text{MLE}} πtMLE。该研究使用余弦学习率调度器,峰值学习率为5e-7,预热比例为0.03。该研究使用全局批量大小128,使用KL系数 η = 0.1 \eta=0.1 η=0.1。为了加速训练,该研究不像Bai; Xiong那样在每次迭代时从 π 0 \pi_0 π0重新开始,而是使用上一次迭代的模型作为初始检查点,并使用 π 0 \pi_0 π0作为参考模型。通过这种选择,该研究没有看到性能退化,而且节省了一半的训练时间。

为了促进探索,该研究将温度调整与拒绝采样策略相结合,其中 n = 8 n=8 n=8。该研究没有固定 π t 1 = π t MLE \pi_t^1 = \pi_t^{\text{MLE}} πt1=πtMLE(如置信集的中心)并单独优化 π t 2 \pi_t^2 πt2成为 π t MLE \pi_t^{\text{MLE}} πtMLE的8个最佳变体,而是将 π t 1 \pi_t^1 πt1 π t 2 \pi_t^2 πt2分别作为由 π t MLE \pi_t^{\text{MLE}} πtMLE诱导的8个最佳策略和8个最差策略。换句话说,该研究将由奖励模型排序的最佳响应和最差响应作为偏好对。在这种情况下,该研究联合优化两个策略以最大化它们的差异(由不确定性衡量),这在实践中往往更有效,并享有定理1中所述的相同理论保证。这种选择类似于Hoang Tran; Pace et al. ; Yuan et al. ; Xu et al. 。该研究还删除了 π t 1 \pi_t^1 πt1 π t 2 \pi_t^2 πt2给出相同响应的对,这意味着这个方向上的不确定性已经很小。对于这一轮实验,该研究仍然使用作为BT奖励模型MLE训练的奖励函数来对响应进行排序,原因如下。首先,为了对 n n n个响应进行排序,使用奖励模型的复杂度在 n n n中是线性的,而使用成对偏好模型则复杂得多。其次,在早期实验中,该研究在迭代RLHF中观察到显著的长度偏差。因此,该研究想探索缓解长度偏差的策略,用响应的长度惩罚奖励值相对更容易。最后,除了推理任务,BT奖励模型与偏好模型相当,对于该研究的目标可能已经令人满意。该研究将BT奖励模型和偏好模型之间更全面的比较留待未来研究。

提示集和数据生成。该研究从UltraFeedback、HelpSteer、OpenOrca、UltraInteract、Capybara和DIBT-10K6收集提示,并在此处准备完整的提示集7。在该研究的实验中,该研究使用60K提示的子集,迭代三次,因此每次迭代使用20K提示生成20K x 8个响应。为了加速数据生成,该研究使用VLLM进行推理。该研究将最大生成长度设置为2048,使用采样温度1.0/0.7,没有任何top-k/top-p策略。为了更直观地理解该研究的提示集合,该研究在Nomic Atlas8上提供了可视化图,使用nomic-embed-text-v1.5文本嵌入模型生成。

在这里插入图片描述

4 模型评估

4.1 基准测试

该研究通过标准基准测试评估模型,包括AlpacaEval-2、MT-Bench和Chat-Arena-Hard。

  • AlpacaEval-2:这个基准测试专注于单轮对话,包括805个涵盖各种主题的测试提示。模型与GPT-4-Preview(11/06)进行头对头比较以计算获胜率。使用相同的GPT-4模型作为评判。为了缓解GPT-4的长度偏差,还提出了一个长度控制变体。
  • MT-Bench:这个基准测试是一个多轮基准测试,包括来自8个不同领域的160个测试提示。模型应首先回答初始问题,然后回答预定义的后续问题。然后由GPT-4模型以1-10的量表对模型的响应进行评分,最终得分计算为两轮的平均分。
  • Chat-Arena-Hard:该基准测试包括来自聊天机器人竞技场(一个用于LLM评估的众包平台)实时数据的500个测试提示。这些提示评估模型在特异性、领域知识、复杂性、解决问题、创造力、技术准确性和实际应用方面的能力。除了与人类偏好的一致性外,与AlpacaEval-2和MT-Bench相比,Chat-Arena-Hard进一步具有不同模型之间明显的可分离性。

在这里插入图片描述
在这里插入图片描述

该研究还使用学术基准测试度量生成模型的能力,包括GSM-8K、MMLU、HumanEval、TruthfulQA、ARC和MBPP。这些基准测试评估模型在编码、推理和一般知识方面的能力。特别是,众所周知,RLHF对齐可能会在推理、校准(提供准确的置信度估计)和真实性能力(生成准确和真实的响应)方面引入性能退化,这在文献中也被称为对齐税。因此,在这些基准测试上评估该研究的模型对于理解迭代RLHF对这些特定方面的影响至关重要。

该研究在表3中总结了该研究在该项目中使用的基准测试。

4.2 主要结果

在线迭代RLHF显著提高对话质量。该研究使用AlpacaEval-2、MT-Bench和Chat-Arena-Hard评估模型的对话能力(结果见表4)。与其他参数少于10B的开源模型相比,该研究的模型SFR-Iterative-DPO-LLaMA-3-8B-R在对话和指令跟随基准测试中以显著优势超过了它们。值得注意的是,该研究使用迭代DPO训练的模型始终优于普通离线DPO(DPO基线)。这证明了在线迭代RLHF的优势。此外,该研究的模型优于由DPO或PPO对齐且比该研究的基础模型大得多的Tulu-2-DPO-70B和GPT-3.5-turbo-1106。这些结果表明,在线迭代RLHF可以有效调整模型响应的风格,从而提高对话质量。

在这里插入图片描述

学术任务。由于RLHF通常会以负面方式影响模型的推理和校准能力,该研究将模型在学术基准测试上的性能(表5)与SFT检查点和其他基线进行比较。与SFT基线相比,该研究没有观察到显著的性能退化。有趣的是,该研究迭代DPO对齐的模型甚至在GSM-8K、MMLU、TruthfulQA和ARC基准测试中优于SFT模型。该研究认为,模型的这些增强能力是在预训练阶段和SFT阶段注入的,迭代DPO帮助它更有效地利用它们。这是因为在迭代RLHF中使用的60K对齐数据比在前两个阶段使用的数据量级要小得多。

备注1。基于一些初始检查点和更多epoch的RLHF对齐模型可以接近甚至超过GPT-4和Claude等最先进的闭源模型在基准测试上的表现。然而,该研究注意到,该研究在解释这些结果时应该更加谨慎,因为基准测试的测试集是有限的,可能不足以捕捉复杂的现实场景。此外,小模型过拟合基准测试的可能性增加可能导致基准测试仿冒,这意味着得分高的模型的实际能力仍然有限。特别是,虽然可以在基准测试上获得更高的结果(例如,在LC AlpacaEval-2中为44.84,在Chat-Arena-hard中为35.7,但学术基准测试的性能显著下降),该研究通过人工评估在一些随机选择的测试提示上展示了当前模型。

在这里插入图片描述

通过长度惩罚过滤数据的消融研究。该研究观察到,对齐模型的响应长度明显长于SFT基线(可能是由于图5所示的奖励模型偏差)。为了解决这个问题,该研究通过在奖励函数中引入长度惩罚进行了一项消融研究:

r ~ ( x , a ) = r ^ ( x , a ) − λ ∣ a ∣ \tilde{r}(x,a) = \hat{r}(x,a) - \lambda|a| r~(x,a)=r^(x,a)λa, (8)

其中 ∣ a ∣ |a| a是响应的字符数。该研究将使用这种惩罚训练的模型与普通版本进行比较,结果如表6所示。正如预期的那样,长度惩罚有效地缓解了长度偏差,导致响应更短。特别是,使用长度惩罚训练的模型在长度控制AlpacaEval-2获胜率方面取得了更优异的成绩,并在一些学术基准测试中取得了更好的结果。这证明了缓解长度偏差的优势,并激励该研究进一步研究奖励建模中的冗长问题。最后,该研究注意到,使用长度惩罚训练的模型在Chat-Arena-Hard基准测试中表现更差。这可能表明,该研究还需要一个长度控制版本的基准测试,以提供更合理的评估。

表6: 在线迭代RLHF中奖励模型和长度惩罚影响的消融研究。响应长度是在Chat-Arena-Hard基准测试的响应上平均的。
在这里插入图片描述

奖励模型的影响。该研究调查了在线迭代RLHF中使用的奖励(偏好)模型的影响。该研究的模型性能与使用UltraRM-13B训练的模型进行比较,消融研究结果总结在表6中。该研究观察到,使用UltraRM-13B训练的模型比该研究的模型具有更长的响应,这与图5所示的更强偏差一致。考虑到对齐税,学术基准测试的准确性下降幅度大于该研究的模型。一个重要原因是UltraRM-13B没有很好的推理能力(见表2),因此它可能无法为与推理相关的对话提供适当的偏好信号。例如,在编码任务中,模型可能偏向于一些带有许多注释的响应,这些响应往往非常有帮助,但在人类评估时确实无用。值得注意的是,使用UltraRM-13B训练的模型在Chat-Arena-Hard获胜率上高于该研究的简洁版本,这也支持了Arena-Hard基准测试的冗长偏差。在训练过程中,该研究还观察到,使用UltraRM-13B训练的模型实现了更低的训练损失,这可能表明UltraRM-13B的信号更加一致,易于学习。相比之下,由于复杂的偏好信号,该研究奖励模型下的收敛速度较慢。

5 结语与未来方向

在本技术报告中,该研究研究了在线迭代RLHF的工作流程,该工作流程利用策略采样和来自代理偏好模型的外部偏好信号,该模型在一组多样化的开源偏好数据集上训练。生成的模型(称为SFR-Iterative-DPO-LLaMA-3-8B-R)在标准基准测试中表现出色,该报告提供了详细的说明以复现结果,包括数据、代码、模型和超参数选择。

仍有许多潜在的方向值得探索。首先,正如该研究在表6中所看到的,迭代RLHF严重依赖偏好信号的质量。在该项目中,该研究使用在一组多样化的开源数据集上训练的代理标量奖励模型来近似人工反馈。如果该研究可以设计一个更有效的策略来建模不同类型的偏好信号,如多头奖励和基于分类的激活策略,这将是有趣的。其次,虽然拒绝采样似乎是一个很好的启发式探索策略,但如果该研究可以设计更有效的探索方法,这仍然是有趣的。最后,大多数RLHF模型倾向于用更长的响应来回答提示。这种长度偏差在迭代RLHF框架中进一步放大。该研究通过在奖励数据过滤中利用额外的长度惩罚,对该问题进行了初步研究。如果该研究可以通过额外的算法设计或后训练技术进一步缓解这一问题,这将是有趣的。

该研究希望该项目的结果能够推进在线迭代RLHF的方向,并有助于训练更强大、更大的开源LLMs。

B 附加实验细节

SFT数据列表。该研究收集开源指令微调数据用于SFT模型训练。包括以下数据:ShareGPT、Evol-Instruct、SlimOrca、MathInstruct、Magicoder-Evol-Instruct、GPT4-LLM、OrcaMath、GPTeacher、UltraInteract。

离线普通DPO。该研究使用Nectar数据集进行离线DPO。运行1个epoch,批量大小128,学习率5e-7,余弦衰减调度器。

附加图。该研究还将性能可视化为图8。

在这里插入图片描述

(图8:该研究模型和LLaMA-3-8B-inst的评估。)

该研究详细描述了从人类反馈中进行强化学习(RLHF)的整个过程,包括算法设计、数据收集和模型评估等多个方面。

以下是我的一些观感:

  1. 详细而系统的阐述:
    • 该研究对RLHF的基础理论、偏好模型的构建以及迭代策略优化等内容进行了深入的讲解,展示了扎实的理论基础和实践经验。
    • 对关键概念和定义如偏好Oracle和Bradley-Terry模型进行了详细说明,使读者能够清晰理解相关理论背景。
  2. 数据集和实验设计:
    • 该研究使用了多个开源数据集进行训练和评估,确保了实验的广泛性和可靠性。
    • 具体列出了训练参数和方法(如批次大小、学习率、调度器等),使得实验结果具有可重复性。
  3. 在线迭代RLHF的优势:
    • 该研究展示了在线迭代RLHF在提升对话质量方面的显著效果,并通过多个基准测试数据验证了其优越性。
    • 特别是在对比其他少于10B参数的开源模型时,显示了该方法在对话和指令跟随基准上的显著优势。
  4. 未来研究方向:
    提出了未来的研究方向,包括更广泛的数据集、更高效的训练方法、改进的奖励模型以及跨领域应用,为后续研究提供了明确的路线图。
  5. 全面的致谢和开源精神:
    该研究对参与项目的团队和支持组织表示了感谢,展现了团队合作和开源精神的重要性。

该研究提供了一个全面、详细且具有指导意义的RLHF实施框架,对从事相关研究和开发的人员具有很高的参考价值。通过对理论和实践的结合,展示了如何在大型语言模型中有效地整合人类反馈,从而提升模型的性能和用户体验。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/627036.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【爬虫之scrapy框架——尚硅谷(学习笔记two)--爬取电影天堂(基本步骤)】

爬虫之scrapy框架--爬取电影天堂——解释多页爬取函数编写逻辑 (1)爬虫文件创建(2)检查网址是否正确(3)检查反爬(3.1) 简写输出语句,检查是否反爬(3.2&#x…

初识鸿蒙之ArkTS基础

前言 学习一种应用程序开发,需要从这种程序的开发语言开始,比如说Android开发从入门到放弃,肯定是从Java基础或者是Kotlin语言基础开始学习的,IOS程序开发也肯定是从object-c开始学习的。鸿蒙软件开发也不例外,如果做…

二叉树的前序遍历(leetcode)

144. 二叉树的前序遍历 - 力扣(LeetCode) 给你二叉树的根节点 root ,返回它节点值的 前序 遍历。 这道题的启发性真的很强 ,这里必须传入i的指针进去,下一次栈帧i,但回到了上一层i又变回到了原来的i&#…

办公园区建筑科技风效果(html+threejs)

办公楼科技风(Htmlthreejs) 初始化三维场景 function init() {container document.getElementById(container);camera new THREE.PerspectiveCamera(65, window.innerWidth / window.innerHeight, 0.1, 150000000);camera.position.set(550, 600, 690);scene new THREE.Sce…

短视频的拍摄方式有哪些:四川京之华锦信息技术公司

创意与技术并存的艺术之旅 在数字媒体高速发展的今天,短视频已经成为人们获取信息、表达情感、展示才艺的重要窗口。从社交平台到新闻资讯,再到教育娱乐,短视频无处不在,其独特的魅力和广泛的传播力让人们对它的拍摄方式产生了浓…

应急响应-Windows-挖矿病毒

随着虚拟货币市场的繁荣,挖矿病毒已成为网络安全领域一大挑战。该类病毒利用计算机资源进行加密货币的挖掘,给个人用户和企业网络带来了严重的安全风险。本文将针对挖矿病毒的应急响应和防范措施进行分析和总结。 一.判断挖矿病毒 服务器突然发现CPU资…

CTF例题:[SWPU2019]Web1(无列名注入)

网址:BUUCTF在线评测 搜索web1 启动靶机 点击链接进入题目 进入题目后发现有登录和注册接口,直接注册登录。 首先通过1进行测试,查看是否有注入点 出现报错,说明可能存在注入点 然后继续测试发现该服务器过滤了: or、…

Android 逆向

一、apk 查壳工具 ApkScan-PKID 相关APK文件可以在 豌豆荚 官网下载 ApkScan-PKID查壳工具 下载 - 简书 (jianshu.com) 二、脱壳工具:frida 1、Android端配置 frida-server: 该步骤需要使用到 adb,操作Android文件 Releases frida/frid…

前端已死? Bootstrap--CSS组件

目录 Bootstrap 下载 Bootstrap--全局CSS样式 栅格系统 栅格参数 正常显示 实例 代码演示: 排版 代码演示 表格 代码演示 表单 代码演示 等等...(文档很清晰了) Bootstrap--组件 结合演示:(页面) Bootstrap Bootstrap v3 中文文档 Bootstrap 是最受欢迎的 HT…

ubuntu18.04 运行ur5机械臂

视觉抓取初探索1-UR5机械臂抓取仿真 - 知乎 抓取不止!Ubuntu 18.04下UR5机械臂搭建Gazebo环境|开源分享_哔哩哔哩_bilibili 源码地址:GitHub - Geo-JTao/UR5_gripper_camera_gazebo: 在Ubantu18.04中搭建Gazebo仿真环境 遇到问题&#xff1…

Volatile解决内存不可见性

一、多线程下变量的不可见性 在多线程并发执行下,多个线程修改共享的成员变量,会出现一个线程修改了共享变量的值后,另一个线程不能直接 看到该线程修改后的变量的最新值。 我们首先让子线程去更改变量flag的值为true,主线程通过判断后执行。…

运维别卷系列 - 云原生监控平台 之 04.prometheus 查询语句 promql 实践

文章目录 [toc]PromQL 简介什么是时间序列 PromQL 数据类型即时向量 Instant vector范围向量 Range vectorTime DurationsOffset modifier modifier 浮点值 Scalar字符串 String PromQL FUNCTIONSfloor()irate()rate()round()sort()sort_desc() PromQL 运算符算术运算符比较运算…

C语言中的循环队列与栈、队列之间的转换实现

引言 在数据结构的学习中,栈(Stack)和队列(Queue)是两个非常重要的概念。它们分别遵循着后进先出(LIFO)和先进先出(FIFO)的原则。在某些情况下,我们可能需要…

用友NC printBill 任意文件读取/删除漏洞复现(XVE-2024-10609)

0x01 产品简介 用友NC是一款企业级ERP软件。作为一种信息化管理工具,用友NC提供了一系列业务管理模块,包括财务会计、采购管理、销售管理、物料管理、生产计划和人力资源管理等,帮助企业实现数字化转型和高效管理。 0x02 漏洞概述 用友NC printBill 接口处存在任意文件读…

PDF编辑阅读器PDF Expert for Mac v3.10.1中文激活版

PDF Expert for Mac是一款易于使用的 PDF 编辑器和注释器,专为 Mac 设备设计。它允许用户轻松查看、编辑、签名、注释和共享 PDF。该软件使用户能够向他们的 PDF 添加文本、图像、链接和形状,突出显示和标记文本,填写表格以及签署数字文档。它…

02-结构型设计模式(共7种)

1. Adapter(适配器模式) 适配器模式是一种结构型设计模式,它允许将一个类的接口转换成客户端所期望的另一个接口。这种模式通常用于解决接口不兼容的情况,使得原本由于接口不匹配而无法工作的类可以一起工作。 在 C 中,适配器模式可以通过类适…

数学建模——线性回归模型

目录 1.线性回归模型的具体步骤和要点: 1.收集数据: 2.探索性数据分析: 3.选择模型: 4.拟合模型: 5.评估模型: 1.R平方(R-squared): 2.调整R平方(Ad…

Windows11系统配置WSL2网络使它支持LAN访问

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、WSL2安装二、使用步骤1.NAT2.镜像 三、写在最后总结 前言 WSL2的出现感觉真的是一个惊喜,又想玩Linux,又怕日用搞不了的最佳替代方…

TreeMap详解:Java 有序 Map 原理与实现

哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一…

[初学者必看]JavaScript 简单实际案例练习,锻炼代码逻辑思维

文章目录 创意小项目合集:从简易图片轮播到购物车1. 图片轮播器2. 动态列表3. 模态框(Modal)4. 简单的表单验证5. 简易待办事项列表(Todo List)6. 简易图片画廊7. 简易时钟8. 简易搜索框高亮9. 简易颜色选择器10. 简易…