OpenAI o1的真正前世竟来自字节?ReFT技术超越传统的数学微调能力,让GPT实现进化

导语:

随着ChatGPT-o1的发布,大型语言模型在复杂推理上取得进展,但传统监督式微调(SFT)仍存在局限。字节跳动研究院提出的增强微调(ReFT)技术结合了SFT和PPO算法,旨在提升模型泛化能力。ReFT首先使用SFT预热训练,然后应用PPO深入微调,使模型探索多种推理路径。

研究团队详细阐述了ReFT的工作原理,并展示其在标准数学数据集上的优越表现。ReFT创新地融合了监督学习和强化学习的优势,为提升大型语言模型在复杂推理任务上的能力开辟了新途径,为AI研究和实际应用提供了宝贵见解。©️【深蓝AI】编译

1. 引言

革新数学问题求解:强化微调法的突破性进展

在人工智能解决数学问题的前沿领域,一项名为"“强化微调”(Reinforced Fine-Tuning,简称ReFT)的创新方法正在引起学术界的广泛关注。这项由顶尖研究团队开发的技术,不仅展示了令人瞩目的实验结果,还为AI在数学领域的应用开辟了新的可能性。

传统的监督式微调(Supervised Fine-Tuning,SFT)方法在训练AI模型解决数学问题时面临阻碍:如图1所示,SFT过程通过多个训练周期(epochs)对模型进行训练,每个训练样本包含问题(x)、推理过程(e)和答案(y)。然而,这种方法往往只能学习到单一的解题路径,限制了模型的泛化能力。

图1|展示了GSM8K数据集中问题、思维链和答案的一个示例©️【深蓝AI】编译

为了突破这一瓶颈,研究团队提出了强化微调(ReFT)方法。如图1下半部分所示,ReFT包括两个关键阶段:

  • warm-up阶段
  • 强化学习阶段

在warm-up阶段,模型通过SFT获得数学推理初步能力。随后的强化学习阶段是ReFT的核心创新所在,模型在本阶段通过“On-Policy Sampling”生成多样化的解题路径,并使用“Golden Reward”机制评估这些路径的正确性,从而不断优化自身性能。

图2|监督式微调(SFT)和强化精调(ReFT)在思维链替代方案存在性上的比较©️【深蓝AI】编译

ReFT方法的优势在图2中得到了清晰的展示。与SFT仅关注单一“黄金”解题路径不同,ReFT能够探索和学习多种解题策略。如图2右侧所示,ReFT不仅能评估多条推理路径的正确性,还可能发现新的有效解法。这种方法显著提高了模型的灵活性和泛化能力,使AI在面对新的数学问题时能够更加灵活多变。

结合监督学习和强化学习的ReFT方法,能够在相同的训练数据基础上获得比传统SFT更丰富的监督信号。这不仅提高了模型的性能,更重要的是大大增强了其泛化能力。值得注意的是,ReFT无需额外的训练数据就能取得进步,这凸显了该方法在资源利用效率方面的优势。

在广泛的实验验证中,研究团队使用了CodeLLAMA和Galactica两个基础模型,并在GSM8K、MathQA和SVAMP等标准数学数据集上进行了测试。结果显示,ReFT在性能和泛化能力方面都取得了显著的提升。更令人兴奋的是,研究还发现ReFT可以从推理时的多数投票和奖励模型重排中获得进一步的性能提升。

这项突破性研究不仅提出了一种新方法来提高AI解决数学问题的能力,还为我们展示了人工智能在复杂推理任务中的巨大潜力。随着ReFT等创新方法的不断发展,我们可以期待在不久的将来,AI在数学教育、科学研究甚至日常生活中的应用将会更加广泛和深入。

强化微调法的成功再次证明,通过巧妙结合不同的学习策略,我们能够突破AI能力的既有界限,为人工智能的发展开辟新的道路。这项研究不仅是数学AI的一大进步,更是整个AI领域向着更智能、更灵活的方向迈进的重要一步。让我们共同期待AI在数学领域带来更多令人兴奋的突破,开启人工智能新的篇章!

2. 方法

2.1 强化精调:AI数学问题求解的革新之路

在人工智能领域,特别是在数学问题求解方面,一种名为强化精调(Reinforced Fine-Tuning,简称ReFT)的创新方法正在引起广泛关注。这项由顶尖研究团队开发的技术不仅展示了令人瞩目的实验结果,还为AI在复杂推理任务中的应用开辟了新的可能性。让我们深入了解这项突破性研究的核心内容。

2.2 概述

研究团队主要关注两种类型的思维链(Chain of Thought,CoT):

1.自然语言思维链(N-CoT):这是由Wei等人在2022年提出的方法。

2.基于程序的思维链(P-CoT):由Gao等人在2023年提出,使用Python语言实现。

P-CoT的一个显著优势是可以直接执行程序来获得答案,这大大简化了解答过程的验证。

2.3 强化精调(ReFT)的核心流程

ReFT过程包含两个关键阶段:

  • warm-up阶段
  • 强化学习阶段

warm-up阶段:

在这个阶段,模型在一个包含“问题-思维链”对的数据集上进行初步微调。这个过程可以形式化表示为:

●输入: ( x , e ) (x,e) (x,e),其中 x x x是问题, e e e是对应的思维链;

●目标:使模型具备基本的问题解决能力,能够对问题生成合适的响应。

思维链生成过程被分解为一系列预测下一个词(token)的动作。整个过程可以表示为:

e = [ a 1 , a 2 , . . . , a L − 1 , a L = < e o s > ] e=[a_1,a_2,...,a_{L-1},a_L=\lt eos \gt] e=[a1,a2,...,aL1,aL=<eos>]

其中, L L L表示最大长度,<eos>是结束符号,标志着生成过程的终止。

动作生成和状态更新

s t + 1 = { x , t = 0 [ s t , a t ] , 1 ≤ t ≤ L s_{t+1} = \begin{cases}x, & t = 0 \\ [s_t, a_t], & 1 \leq t \leq L \\ \end{cases} st+1={x,[st,at],t=01tL

在每个时间步 t t t

● 动作 a t a_t at从策略 π θ ( ⋅ ∣ s t ) π_θ(·|st) πθ(st)中采样

● 状态 s t s_t st包含问题中的所有词和已生成的所有词

● 新状态 s t + 1 s_{t+1} st+1是当前状态 s t s_t st和动作 a t a_t at的连接

损失函数

warm-up阶段使用的损失函数定义如下:

L S F T ( θ ) = − E e ∼ D [ ∑ t = 1 L log ⁡ ( π θ ( a t ∣ s t ) ) ] \mathcal{L}_{SFT}(\theta)=-\mathbb{E}_{e \sim \mathcal{D}}\left[\sum_{t=1}^{L}\log\left(\pi_{\theta}(a_t\vert s_t)\right)\right] LSFT(θ)=EeD[t=1Llog(πθ(atst))]

该函数旨在最大化正确动作序列的对数概率,从而训练模型更准确地预测每一步的正确词。

强化学习阶段

r ( s t , a t , s t + 1 = { 1 , E X T R A C T ( s t + 1 ) = y 0.1 , E X T R A C T ( s t + 1 ) ≠ n u l l , ≠ y 0 , E X T R A C T ( s t + 1 ) = n u l l r(s_t,a_t,s_{t+1}{=}\begin{cases}1,\quad\mathsf{EXTRACT}(s_{t+1})=y\\0.1,\mathsf{EXTRACT}(s_{t+1})\neq\mathsf{null},\neq y\\0,\quad\mathsf{EXTRACT}(s_{t+1})=\mathsf{null}&\end{cases} r(st,at,st+1= 1,EXTRACT(st+1)=y0.1,EXTRACT(st+1)=null,=y0,EXTRACT(st+1)=null

上述公式是一个强化学习环境中的奖励函数,用于评估每个动作产生的结果。在这个强化学习任务中,模型的目标是通过一系列动作来生成一个回答,并且这个回答会与一个预设的正确答案(ground-truth answer y y y)进行比较。根据动作结果的不同,奖励函数会给出不同的奖励值。

这里的公式可以这样理解:

● 当答案正确时:如果模型生成的答案与正确答案完全一致,那么模型会获得奖励1。这表示模型做出了完全正确的决策。

● 当答案部分正确时:如果模型生成的答案虽然不是完全正确,但答案是数字类型且不为空,模型会获得一个较小的奖励0.1。这种情况通常发生在答案内容上与正确答案接近但不完全一致时,给予部分奖励可以鼓励模型在正确的方向上进行改进。

● 当答案为空或完全错误时:如果模型没有生成任何答案(即答案为null),或者答案完全错误,则不给予任何奖励(奖励为0)。这表示模型的这次尝试没有取得任何进展。

这种设计的目的是通过奖励机制引导模型学习如何更准确地回答问题。在许多情况下,正确的答案可能会很少出现(这称为稀疏奖励问题),而通过引入部分奖励,可以帮助模型在这种不利条件下更有效地学习。

总体奖励计算

r t o t a l ( s t , a t , s t + 1 ) = r ( s t , a t , s t + 1 ) − β K L ( π θ ( ⋅ ∣ s t ) , π θ ( 0 ) ( ⋅ ∣ s t ) ) r_{total}(s_t,a_t,s_{t+1})=r(s_t,a_t,s_{t+1})-\beta KL(\pi_{\theta}(\cdot|s_t),\pi_{\theta}^{(0)}(\cdot|s_t)) rtotal(st,at,st+1)=r(st,at,st+1)βKL(πθ(st),πθ(0)(st))

首先,模型在每个状态和动作对的情况下会有一个基本的奖励 r ( s t , a t , s t + 1 ) r(s_{t},a_{t},s_{t+1}) r(st,at,st+1),这个基本奖励可能取决于模型的动作是否正确或接近正确。除此之外,还会计算一个叫做Kullback-Leibler(KL)散度的值,这个值衡量的是模型当前的策略与初始策略之间的差异。总的奖励 r t o t a l ( s t , a t , s t + 1 ) r_{total}(s_{t}, a_{t}, s_{t+1}) rtotal(st,at,st+1)是这个基本奖励减去KL散度乘以一个系数 β \beta β。这样做的目的是鼓励模型不要偏离初始策略太远,同时也能学到有效的策略。这里提到的“初始策略”( π θ ( 0 ) \pi_\theta^{(0)} πθ(0))指的是在文章中描述的“warm-up”阶段通过监督学习训练得到的策略。在这个阶段,模型在包含“( q u e s t i o n , CoT question,\textit{CoT} question,CoT)”元组的数据集上进行训练,这些元组由问题和相对应的思考过程组成。这个初始策略为后续的强化学习阶段提供了一个基础,使得模型可以在此基础上进一步优化以生成更准确或更合适的回答。

在“warm-up”阶段结束后,模型使用初始策略作为强化学习阶段的起点。在强化学习阶段,策略会根据环境反馈进行调整和优化,以提高生成的思考过程和答案的质量。

因此,初始策略是连接监督学习阶段和强化学习阶段的桥梁,确保了从有监督的预训练过渡到无监督的强化学习训练的平滑性。

优势估计

A ^ t = ∑ l = 0 L − t ( γ λ ) l δ t + l \hat{A}_t=\sum_{l=0}^{L-t}(\gamma\lambda)^l\delta_{t+l} A^t=l=0Lt(γλ)lδt+l

在上述公式中,用来评估一个动作相对于平均有多好的一个指标叫做优势估计( A t ^ \hat{A_t} At^)。这个估计通过一系列的计算得到,包括将未来的奖励折现回来,并与预期的值函数( V ϕ V_{\phi} Vϕ,即状态价值)进行比较。这样可以衡量每个动作相对于平均表现的优势,从而帮助模型做出更优的决策。

时序差分(TD)和返回值

δ t ′ = − V ϕ ( s t ′ ) + r t o t a l ( s t ′ , a t ′ , s t ′ + 1 ) + γ V ϕ ( s t ′ + 1 ) \delta_{{t^{\prime}}}=-V_{\phi}(s_{{t^{\prime}}})+r_{total}(s_{{t^{\prime}}},a_{{t^{\prime}}},s_{{t^{\prime}+1}})+\gamma V_{\phi}(s_{{t^{\prime}+1}}) δt=Vϕ(st)+rtotal(st,at,st+1)+γVϕ(st+1)

时序差分 δ t ′ \delta_{t'} δt是在特定时间点上,实际观测到的奖励和状态值与预期值之间的差异。这个差异会被用来更新状态的价值估计,帮助模型更准确地预测未来的情况。

R ^ t = A ^ t + V ϕ ( s t ) \hat{R}_t=\hat{A}_t+V_{\phi}(s_t) R^t=A^t+Vϕ(st)

最后, λ − r e t u r n R ^ t \lambda-return \hat R_t λreturnR^t是基于优势估计和当前状态价值的一个综合估计,用来更新模型的策略和价值函数。它综合了即时奖励和未来奖励的信息,提供了一个全面的反馈,用于模型学习。

总之,这些计算帮助模型在复杂的环境中,通过不断更新策略和价值估计,做出更好的行动决策。

目标函数

1)策略损失(Policy Loss):

●这个公式的目的是调整策略(即模型决定采取什么行动的规则),使得获得的回报(reward)尽可能高。

π θ ( a t ∣ s t ) \pi_{\theta}(a_t|s_t) πθ(atst)表示在参数 θ \theta θ下,给定状态 s t s_t st时选择行动 a t a_t at的概率。

π θ o l d ( a t ∣ s t ) \pi_{\theta_{old}}(a_t|s_t) πθold(atst)是旧策略(即更新前的策略)给出的,在状态 s t s_t st下选择行动 a t a_t at的概率。

A ^ t \hat{A}_t A^t是一个称为优势函数的值,用来评估采取行动 a t a_t at相对于平均情况的优势有多大。

● 公式中的 minclip 函数用于控制策略更新的幅度,防止更新太剧烈,这有助于学习过程的稳定性。

L value  ( ϕ ) = 1 2 E e ∼ π θ old  [ max ⁡ ( ∥ V ϕ ( s t ) − R ^ t ∥ 2 ∥ clip ⁡ ( R ^ t − V ϕ ( s t ) , A ^ t − ϵ , A ^ t + ϵ ) ∥ 2 ) ] \begin{array}{r} \mathcal{L}_{\text {value }}(\boldsymbol{\phi})=\frac{1}{2} \mathbb{E}_{\boldsymbol{e} \sim \pi_{\theta_{\text {old }}}}\left[\operatorname { m a x } \left(\left\|V_{\boldsymbol{\phi}}\left(s_{t}\right)-\hat{R}_{t}\right\|^{2}\right.\right. \\ \left.\left.\left\|\operatorname{clip}\left(\hat{R}_{t}-V_{\phi}\left(s_{t}\right), \hat{A}_{t}-\epsilon, \hat{A}_{t}+\epsilon\right)\right\|^{2}\right)\right] \end{array} Lvalue (ϕ)=21Eeπθold [max( Vϕ(st)R^t 2 clip(R^tVϕ(st),A^tϵ,A^t+ϵ) 2)]

2)价值损失(Value Loss):

●这个公式用于调整价值函数(即模型预测从当前状态开始能得到的总回报的函数)的参数,使其预测更准确。

V ϕ ( s t ) V_{\phi}(s_t) Vϕ(st)是模型预测的在状态 s t s_t st下能够获得的总回报。

R t ^ \hat{R_t} Rt^是实际观测到的从状态 s t s_t st开始可以获得的总回报。

maxclip函数同样用于控制更新的幅度,确保价值函数的更新不会太过激进。

L R L ( θ , ϕ ) = L policy  + α L value  \mathcal{L}_{R L}(\boldsymbol{\theta}, \boldsymbol{\phi})=\mathcal{L}_{\text {policy }}+\alpha \mathcal{L}_{\text {value }} LRL(θ,ϕ)=Lpolicy +αLvalue 

3)统一的损失函数(Unified Loss Function):

●这个公式是策略损失和价值损失的加权和, α \alpha α是一个权重系数,用于平衡两者的重要性。

●通过调整这个损失函数,可以同时优化策略和价值函数,使得模型在强化学习任务中表现更好。

强化精调的优势

1)多样化解决方案:与传统方法相比,ReFT能够探索和学习多种解题策略,显著提高了模型的灵活性和泛化能力。

2)自我改进:通过强化学习阶段,模型能够不断优化自身性能,发现新的有效解法。

3)资源效率:ReFT无需额外的训练数据就能取得性能提升,展现了其在资源利用效率方面的优势。

4)泛化能力:结合监督学习和强化学习的优势,ReFT方法在相同的训练数据基础上,获得了比传统方法更强的泛化能力。

3. 实验和结论

在实验部分,研究者使用了三个数学问题数据集:GSM8K、SVAMP和MathQA,以进行模型的测试和评估。GSM8K和SVAMP 数据集中的答案格式是数值型,而在 MathQA 数据集中,则是多选题(即ABCD格式)。此外,研究者还对MathQA的一个数值版本进行了额外的实验,这个版本的答案同样是数值型。所有这些数据集的统计信息在文中的表1中呈现。

表1|训练集和测试集中两种类型思维链的数据集统计信息©️【深蓝AI】编译

实验中使用了GPT-3.5-turbo模型,通过少量样本提示(few-shot prompting)的方式来获取N-CoT(非结构化思考过程)和P-CoT(结构化思考过程)注解。文中实现了两种自我训练方法:离线自我训练(Offline Self-Training,简称OfflineST)和在线自我训练(Online Self-Training,简称Online-ST)。

实验设置涉及两个基础模型:Galactica-6.7B5和Codellama-7B6,这两个模型在解决数学问题方面表现出色,并常用于最近关于推理任务的研究。在所有实验中,训练均使用8块A100-80GB的GPU,采用DeepSpeed Zero stage 2和HuggingFace Accelerate技术。

表2|基线方法与提出的ReFT方法在所有数据集上使用两种基础模型进行微调后的价值准确度比较©️【深蓝AI】编译述

表2比较了基线方法和提出的ReFT在GSM8K、SVAMP和MathQA数据集上的性能。 结果显示,ReFT在大多数情况下都显著优于SFT和自我训练方法。特别是在GSM8K数据集上,使用CodeLLAMA模型,ReFT在N-CoT和P-CoT任务上分别比SFT提高了9点和8点以上。

图3|MathQAMCQ预测示例揭示了奖励欺骗现象©️【深蓝AI】编译

研究团队还发现,在MathQAMCQ数据集上,ReFT存在奖励黑客现象。图3展示了采样解决方案如何产生"不准确的奖励",从而影响RL训练。 为了进一步证明多选题的负面影响,研究团队在MathQA的数值变体MathQAnumeric上进行了实验。表3展示了与SFT的比较结果,显示ReFT在使用Galactica和CodeLLAMA时都consistently优于SFT。

表3|监督式微调(SFT)和强化精调(ReFT)使用两种基础模型在MathQAnumeric基准测试上的准确率比较©️【深蓝AI】编译

研究团队还应用了多数投票和奖励模型重排技术来进行GSM8K数据集的测试。表4显示,ReFT在使用奖励模型重排时在GSM8K上始终表现最佳。ReFT+Voting平均比SFT+Voting高出9.2个百分点,ReFT与重排平均比SFT与重排高出3.3个百分点。

表4|在GSM8K数据集上,监督式微调(SFT))和强化精调(ReFT)使用多数投票法和奖励模型重排序的解题准确率©️【深蓝AI】编译

此外,研究团队使用小型语言模型Galactica-125M进行了实验,表5比较了监督式微调(SFT)和基于奖励的微调(ReFT)在P-CoT数据集上的性能。尽管模型较小,ReFT在三个数据集上仍然表现优于SFT。

表5|使用Galactica125M模型在基于程序的思维链(P-CoT)数据上的实验结果©️【深蓝AI】编译

此外,作者还在GSM8K P-CoT数据集上使用CodeLLAMA进行啦消融研究,如表6显示:在没有部分奖励时,ReFT的准确率为70.9,虽然低于包含部分奖励的情况,但仍然明显优于SFT。

表6|GSM8K基于程序的思维链(P-CoT)上的消融研究©️【深蓝AI】编译

在分析部分,研究人员探讨了ReFT在GSM8K P-CoT数据集上的训练过程中的一般化能力。图4显示了ReFT策略在训练过程中的平均奖励、评估准确性和KL散度。SFT在接近第40个周期时收敛并开始过拟合,而ReFT策略在第40周期的平均奖励约为80%至90%,且价值准确性也在增加。

图4|在GSM8K基于程序的思维链(P-CoT)数据集上,强化精调(ReFT)的训练奖励、评估准确率以及KL散度随训练轮次的变化©️【深蓝AI】编译

最后,研究人员探讨了ReFT与SFT之间的关系,通过对ReFT进行不同预热步骤的训练来比较这两项技术:

图5展示了不同ReFT变体相对于SFT的价值准确性。结果显示,从第30周期开始,当SFT已经收敛时,所有ReFT变体仍在改进,并且所有变体均显著优于SFT,没有任何特定ReFT变体表现出明显优势。

图5|监督式微调(SFT)和强化精调(ReFT)在不同预热轮次下的准确率比较©️【深蓝AI】编译

4. 总结和未来方向

研究人员提出了一种新的模型微调方法——强化微调(ReFT),用于解决数学问题。与传统的监督式微调(SFT)相比,ReFT通过探索多个解题过程(CoT)注解来优化非可微目标,而不是依赖单一的CoT注解。通过在三个数据集上使用两种基础模型进行广泛实验,研究表明ReFT在性能和泛化能力方面均优于SFT。此外,研究还展示了使用ReFT训练的模型与多数投票技术和奖励模型重排技术的兼容性。ReFT在解决数学问题方面的性能也超过了多个公开可用的同等规模的开源模型,这证明了ReFT方法的有效性和实用价值。

未来,研究人员或许首次尝试将强化学习特别是PPO算法应用于大型语言模型(LLM)的数学问题解决微调中。未来的工作方向包括应用离线强化学习技术,开发无需预热的方法,以提高训练效率和性能,从而缩小与重排方法的性能差距。此外,研究还表明,一个训练有素的基于过程的奖励模型(PRM)可能显著提高性能,因此值得探索在强化学习训练中实施基于过程的奖励。最后,由于ReFT是一种多功能的方法,研究人员打算将其应用于更广泛的推理任务,其中推理可以用CoT形式化。

同样,ReFT需要比SFT更多的训练周期才能达到收敛,这主要是因为ReFT优化了一个非可微目标,并且需要探索生成空间以获得正确答案。虽然较大的学习率可能加速收敛,但也可能使策略更易于不稳定和潜在崩溃。另一种选择是使用更大的批量大小,但这会增加计算成本。此外,我们的奖励函数仅依赖于最终答案来确定奖励,但在MathQAMCQ N-CoT数据集上的实验表明,如果最终答案的可能空间有限,如A、B、C、D,则策略容易被操纵。为了缓解奖励黑客的问题,可能需要采用更详细或基于过程的奖励函数,以考虑更广泛的因素。

延伸必读🌟

1.[非常重要!!!]
https://github.com/hijkzzz/Awesome-LLM-Strawberry?tab=readme-ov-file

2.[原文]
ReFT: Reasoning with Reinforced Fine-Tuning.

3.Training large language models for reasoning through reverse curriculum reinforcement learning.

4.[OpenAI]Let’s verify step by step. arXiv preprint arXiv:2305.20050.

5.[播客]
https://x.com/rohanpaul_ai/status/1835427161370738983?s=46&t=iTysI4vQLQqCNJjSmBODPw

6.Bigger, better, faster: Human-level atari with human-level efficiency.

7.Star: Bootstrapping reasoning with reasoning.

8.Quiet-star: Language models can teach themselves to think before speaking.

©️【深蓝AI】

解读|Jeffery
审核|Los

本文原创于微信公众号【深蓝AI】,移步公众号【深蓝AI】,第一时间获取自动驾驶、人工智能与机器人行业最新最前沿论文和科技动态。👇

深蓝AI·赋能自动驾驶+机器人+AI

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

HCIP考试范围包含哪些内容?HCIP备考指南分享

在数字化浪潮汹涌的今天&#xff0c;网络技术已成为支撑现代社会高效运转的不可或缺之力。Huawei Certified ICT Professional(HCIP)认证&#xff0c;作为这一领域中的精英标识&#xff0c;正吸引着无数技术爱好者的目光。那么&#xff0c;那么要考取这一认证需要掌握哪些考试内…

Github上开源了一款AI虚拟试衣,看看效果

大家好&#xff0c;我是Shelly&#xff0c;一个专注于输出AI工具和科技前沿内容的AI应用教练&#xff0c;体验过300款以上的AI应用工具。关注科技及大模型领域对社会的影响10年。关注我一起驾驭AI工具&#xff0c;拥抱AI时代的到来。 前几天我们聊过关于虚拟换装的话题&#xf…

Android RecyclerView 实现 GridView ,并实现点击效果及方向位置的显示

效果图 一、引入 implementation com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.30 二、使用步骤 1.Adapter public class UnAdapter extends BaseQuickAdapter<UnBean.ResultBean, BaseViewHolder> {private int selectedPosition RecyclerView.NO_POSITIO…

CVE-2024-1112 Resource Hacker 缓冲区溢出分析

漏洞简述 CVE-2024-1112 是 Resource Hacker 软件的一个缓冲区溢出漏洞。该漏洞存在于版本 3.6.0.92 中。由于软件在处理命令行中的文件路径时未对文件字符串长度进行限制&#xff0c;过长的字符串参数导致内存被过度写入&#xff0c;从而引发缓冲区溢出。 漏洞复现 构造长度…

基于相关性分析和梯度提升的睡眠质量影响因素研究

1.项目背景 注意该数据为人工合成数据&#xff0c;结论与认知可能不符&#xff0c;仅供学习分析的方法。 睡眠质量作为人类健康的重要指标&#xff0c;受到多种复杂因素的共同影响&#xff0c;包括生理状况、生活习惯、环境因素以及心理状态等多个方面。这些因素在不同的情境…

编译内核lspcu 工具源码 util-linux

1. 获取源码 wget https://mirrors.edge.kernel.org/pub/linux/utils/util-linux/v2.34/util-linux-2.34.tar.xz 2. 解压 tar xvf util-linux-2.34.tar.gz cd util-linux-2.34 本次实验环境&#xff1a;使用云主机 1.查看Lscpu , dmesg ,lsblk 等版本 我们看到这些指令都是…

JSP 指令标识和脚本标识的使用

文章目录 前言一、JSP 页面是什么&#xff1f;二、JSP 基本语法 1.指令标识 &#xff08;1&#xff09;page 指令&#xff08;2&#xff09;include 指令&#xff08;3&#xff09;taglib 指令2.脚本标识总结 前言 在进行Java Web 应用开发的过程中&#xff0c;JSP 是必不可少的…

全流程管理的商标管理软件如何实现一站式品牌保护?

如今&#xff0c;企业对于商标管理的需求已不再局限于单一的申请流程&#xff0c;而是扩展到了包括撤三、无效宣告、异议处理、维权行动乃至诉讼解决在内的全业务范畴。面对这一复杂多变的挑战&#xff0c;一款能够灵活应对、全面覆盖的可全业务管理商标管理软件成为了企业品牌…

湖北智彩星科技有限公司:AR共享游乐设备,让快乐加倍升级!

在科技日新月异的今天&#xff0c;娱乐方式正经历着前所未有的变革。湖北智彩星科技有限公司&#xff0c;作为行业内的佼佼者&#xff0c;凭借其创新的AR&#xff08;增强现实&#xff09;共享游乐设备&#xff0c;为大众带来了一场前所未有的娱乐盛宴&#xff0c;让快乐体验实…

在项目管理中,项目进度由哪些要素决定?

在项目管理领域&#xff0c;项目进度受到多种要素的综合影响。以下是一些关键的决定要素&#xff1a; 一、项目范围 1、任务清单 明确的任务清单是项目进度的基础。详细列出项目中需要完成的各项任务&#xff0c;包括任务的先后顺序、并行任务等&#xff0c;直接关系到进度规划…

中国土地利用覆盖和变化数据集(1980-2021)

该数据集通过融合森林资源清查数据和20种遥感土地利用产品&#xff0c;重建生成了1980-2015年中国森林覆盖数据集&#xff0c;空间分辨率为11公里。并且在此基础上进一步获得高精度森林覆被信息和土地利用覆盖数据集相融合&#xff0c;生成了中国1980-2021年土地利用覆盖和变化…

Vue3 + Vite Web项目 Electron 打包桌面应用程序

在根目录下创建 electron 文件夹 创建 electron/main.js 文件&#xff1a; // 导入模块 const { app, BrowserWindow ,Menu } require(electron) const path require(path)// 创建主窗口 const createWindow () > {const mainWindow new BrowserWindow({width: 1440…

RHEL7(RedHat红帽)软件安装教程

目录 1、下载RHEL7镜像 2、安装RedHat7 注&#xff1a;如果以下教程不想看&#xff0c;可以远程控制安装V:OYH-Cx330 【风险告知】 本人及本篇博文不为任何人及任何行为的任何风险承担责任&#xff0c;图解仅供参考&#xff0c;请悉知&#xff01;本次安装图解是在一个全新的演…

【网络安全】TCP和UDP

一、TCP/UDP对比 1.共同点&#xff1a; 都是工作在TCP/IP体系结构的传输层的协议 工作主要都是把端口号往原始数据封装 在 TCP 协议中&#xff0c;原始数据指的是应用程序产生的需要通过网络进行传输的数据。这些数据可以是各种类型的信息&#xff0c;例如文本、图像、音频、…

【项目】多设计模式下的同步异步日志系统

文章目录 项目介绍开发环境核心技术日志系统介绍为什么需要日志系统日志系统技术实现同步写日志异步写日志 相关技术知识补充不定参函数不定参宏函数的使用C中不定参函数的使用C中不定参函数的使用 设计模式单例模式工厂模式建造者模式代理模式 日志系统框架设计模块划分日志等…

高校大数据实训管理平台怎么选择?

泰迪智能科技大数据实训管理平台分为多个方向包括&#xff1a;人工智能方向、大数据方向、商务数据分析方向&#xff0c;不同高校可以结合高校情况选择合适自己院校的相关产品平台。 高校实训管理平台是实验室模块的核心母平台&#xff0c;对实验室的所有课程及实训资源进行统…

【Linux】手把手教你制作一个简易shell——(进程创建fork进程替换wait与进程等待exec的应用)(自定义shell程序设计)

前言 大家好吖&#xff0c;欢迎来到 YY 滴Linux系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C Linux的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY的…

HTTP协议:发展、请求响应、状态码 等

文章目录 HTTP发展历程HTTP请求URL和URIHTTP协议版本HTTP请求方法GET 和 POST 区别HTTP状态码HTTP 请求与响应报文HTTP 请求流程 HTTP 超文本传输协议&#xff08;Hypertext Transfer Protocol&#xff0c;HTTP&#xff09;是一个简单的请求-响应协议&#xff0c;它通常运行在…

快速数据检索最佳闪存驱动器恢复下载

当你意识到你的闪存盘丢失了重要文件时&#xff0c;你是否曾有过心脏停跳的时刻&#xff1f;丢失数据可能会毁掉你的一天&#xff0c;并带来很大的压力&#xff0c;无论是重要的工作文件&#xff0c;你喜欢的照片&#xff0c;还是备份你需要保持。好消息是&#xff0c;在闪存驱…

Leetcode 合并区间

我们借助一个辅助链表(元素类型是一维数组)来进行结果统计。 这个算法解决了“合并区间”的问题&#xff0c;具体要求是给定一组区间&#xff08;每个区间有开始和结束位置&#xff09;&#xff0c;如果两个区间有重叠&#xff0c;那么需要将它们合并成一个区间&#xff0c;并…