当前位置: 首页 > article >正文

强化学习信用分配——以RLHF为例分析

Section 1. 信用分配简介

在强化学习中,信用分配(Credit Assignment)是指确定某个动作或状态对最终奖励的具体贡献的过程。由于强化学习的奖励通常是延迟的(Delayed Reward),比如围棋,只有在胜利的时候有一个+1的奖励(稀疏奖励),智能体需要回溯分析哪些历史动作(”神之一手“)导致了后续的奖励或惩罚,这对学习效率至关重要。


一、信用分配的核心挑战

强化学习中,智能体通过试错与环境交互,但最终反馈(如游戏胜利或失败)可能由多个步骤共同导致。例如:

  • 在围棋中,一步看似普通的落子可能直到终局才显露出其关键性。
  • 在机器人控制中,某个关节的微小动作可能在几秒后才影响任务成败。

如何将全局奖励合理分解到每个动作或状态,是信用分配的核心问题。


二、不同奖励场景下的信用分配差异

信用分配的难度和方法因奖励的分布方式不同而有显著差异:

1. 稀疏奖励(Sparse Reward)

  • 特点:奖励仅在少数关键事件发生时给出(如游戏胜利/失败)。
    • 示例:迷宫导航中只有到达终点时获得+1奖励,其余时刻奖励为0。
  • 信用分配难点
    • 长时依赖:最终奖励需回溯到早期动作,如迷宫中的初始移动方向。
    • 探索低效:智能体可能因难以关联早期动作与最终奖励而陷入局部最优。
  • 解决方法
    • 蒙特卡洛方法:基于完整回合的回报(Return)更新策略,直接关联最终奖励。
    • 内在奖励(Intrinsic Reward):设计探索奖励(如好奇心驱动)提供中间反馈。
    • 分层强化学习(HRL):分解任务为子目标,逐层分配信用。
    • Decision Transformer:不通过bootstrapping传播奖励,充分利用Transformer的长程建模能力

2. 密集奖励(Dense Reward)

  • 特点:每一步都有即时反馈(如机器人行走时每步的平衡得分)。
    • 示例:机械臂抓取任务中,根据物体距离目标的接近程度实时给出奖励。
  • 信用分配难点
    • 短期与长期权衡:某些动作可能带来短期增益但损害长期收益(如贪吃蛇为吃食物撞墙)。
    • 奖励干扰:密集但噪声较大的奖励可能掩盖关键动作的价值。
  • 解决方法
    • 时序差分学习(TD Learning):通过贝尔曼方程逐步更新值函数,平衡即时与未来奖励。
    • 折扣因子(γ):调节未来奖励的权重,强调近期贡献。

3. 延迟奖励(Delayed Reward)

  • 特点:动作与奖励之间存在显著时间滞后。
    • 示例:股票交易中,买入操作可能在数天后才产生盈利或亏损。
  • 信用分配难点
    • 因果关系模糊:需区分哪些动作真正导致了后续结果。
    • 时间跨度大:传统TD方法可能因折扣因子衰减过快而低估关键动作。
  • 解决方法
    • 资格迹(Eligibility Traces):记录历史动作的“痕迹”,按时间衰减分配信用(如TD(λ)算法)。
    • 反向传播梯度(Backprop Through Time, BPTT):在循环神经网络中通过时间反向传播误差。

4. 部分可观测环境(Partially Observable Environments)

  • 特点:智能体无法获取完整状态信息(如自动驾驶中传感器数据有限)。
    • 示例:在遮挡的视觉环境中,当前观测可能无法反映真实状态。
  • 信用分配难点
    • 状态不确定性:难以确定动作是基于错误状态估计做出的。
    • 历史依赖:需结合历史观测序列推断真实状态。
  • 解决方法
    • 循环网络(RNN/POMDP):维护隐状态编码历史信息。
    • 注意力机制:聚焦关键历史片段以分配信用。

5. 多智能体协作(Multi-Agent Collaboration)

  • 特点:多个智能体共同影响全局奖励(如足球游戏中多个球员配合得分)。
    • 示例:团队任务中,某个成员的贡献可能被其他成员的行为掩盖。
  • 信用分配难点
    • 贡献解耦:需区分个体动作对团队奖励的影响。
    • 非平稳性:其他智能体的策略变化影响信用评估。
  • 解决方法
    • 反事实基线(Counterfactual Baseline):评估单个智能体改变动作时的预期奖励差异(如COMA算法)。
    • 值分解网络(VDN/QMIX):将全局Q值分解为个体Q值的组合。

三、算法视角的信用分配

不同算法通过特定机制实现信用分配:

  • Q-Learning:通过最大化动作值函数(Q-value)间接分配信用。
  • 策略梯度(Policy Gradient):使用优势函数(Advantage Function)衡量动作相对平均回报的优劣。
  • Actor-Critic:结合值函数(Critic)评估状态和策略(Actor)的梯度更新。

四、总结

信用分配的本质是在时间、空间和因果关系上追溯奖励的根源。不同奖励场景下需针对性设计算法:

  • 稀疏奖励依赖长时关联和探索激励。
  • 密集奖励需平衡短期与长期贡献。
  • 延迟奖励强调时间维度的信用回溯。
  • 部分可观测环境依赖状态估计与历史记忆。
  • 多智能体系统需解耦个体贡献与团队协作。

理解这些差异有助于选择合适算法(如优先使用蒙特卡洛方法处理稀疏奖励,或资格迹处理延迟奖励),从而提升强化学习效率。


Section 2. TD,蒙特卡洛和Critic网络信用分配机制

TD差分(Temporal Difference)、Critic网络和蒙特卡洛估计(Monte Carlo)在解决信用分配问题时采用了不同的机制,以下是它们的区别与特点:


1. 蒙特卡洛估计(Monte Carlo, MC)

  • 原理:通过完整的回合(Episode)采样,计算从当前状态到回合结束的实际回报(Return),作为该状态的信用估计。
  • 信用分配特点
    • 无偏性:基于实际观测的回报,无估计偏差。
    • 高方差:回报受后续随机动作和状态转移的影响,方差较大。方差爆炸问题‌:
      当序列长度 T T T增大时,梯度方差呈指数增长
    • 延迟更新:必须等待回合结束后才能更新,无法在线学习。
  • 适用场景:回合较短、需无偏估计的任务(如棋类游戏)。

2. TD差分(Temporal Difference, TD)

  • 原理:结合当前奖励和下一状态的估计值(自举,Bootstrapping),通过时序差分误差(TD Error)更新当前状态的信用。
  • 公式:( \delta_t = r_t + \gamma V(s_{t+1}) - V(s_t) )
  • 信用分配特点
    • 低方差:通过自举减少对后续随机性的依赖。
    • 有偏性:依赖下一状态的估计值,可能引入偏差。
    • 实时更新:每一步均可更新,适合在线学习。
  • 适用场景:连续任务、需实时更新的场景(如机器人控制)。

3. Critic网络(Actor-Critic框架中的Critic)

  • 原理:Critic网络是一个参数化的价值函数近似器(如神经网络),用于评估状态或动作的价值,指导Actor的策略更新。通常结合TD误差或MC回报作为训练目标(损失函数的Label)。
  • 信用分配特点
    • 灵活性:通过函数近似泛化到未见过的状态,适合高维复杂环境。
    • 依赖价值估计方法
      • 若Critic使用TD更新(如Q-Learning),则信用分配具有TD的特性(低方差但有偏)。
      • 若Critic使用MC目标(如REINFORCE),则信用分配接近蒙特卡洛(无偏但高方差)。
    • 高效性:通过参数共享,可快速调整多个相关状态的信用。
  • 适用场景:复杂状态空间(如图像输入)、需结合策略梯度优化的任务(如AlphaGo)。

4. 三者的核心区别

维度蒙特卡洛TD差分Critic网络
更新时机回合结束后更新每一步实时更新实时更新(通常基于TD或MC目标)
偏差-方差权衡无偏,高方差有偏,低方差取决于Critic的训练目标(TD/MC)
实现方式直接使用实际回报自举(下一状态估计值)参数化模型,结合函数近似
适用性短回合、确定性环境长回合、在线学习高维状态、复杂任务(如Atari游戏)

5. 示例说明

假设智能体在迷宫中找到出口:

  • 蒙特卡洛:逃脱后,根据完整路径的总奖励,反向更新每一步的信用(“成功是因为所有步骤都对”)。
  • TD差分:每移动一步,立即根据当前位置的价值调整上一步的信用(“这一步离出口更近,所以上一步应得更高信用”)。
  • Critic网络:通过神经网络实时预测当前位置的价值,指导策略调整(“Critic认为当前位置价值高,因此上一步动作应被加强”)。

6. 总结

  • 蒙特卡洛适合无偏估计但能接受高方差的场景。
  • TD差分在实时性和方差-偏差权衡中更优。
  • Critic网络通过函数近似扩展了TD/MC的能力,适用于复杂环境,但需平衡近似误差与训练稳定性。

Section 3. RLHF-PPO信用分配机制分析思考

1. RM模型

轨迹采样‌:生成完整响应序列 s 1 , s 2 , ⋯ , s T s_1, s_2, \cdots, s_T s1,s2,,sT, s i s_i si代表大模型输出response的第 i i i个token
RM模型通常是outcome reward, 即在response上训练输出标量reward, R = R M ( S 1 : T ) R=RM(S_{1:T}) R=RM(S1:T)。此外还有Process reward,即在每一个token输出reward, R i = R M ( S < i ) R_i=RM(S_{<i}) Ri=RM(S<i)

奖励分配策略

  • Monte Carlo分配法‌(实际常用)
    r t = { 0 t < T R t = T r_t=\left\{ \begin{array}{ll} 0 &t<T \\ R &t=T\end{array}\right. rt={0Rt<Tt=T
  • 指数衰减分配‌(理论方法)
    r t = γ T − t R r_t=\gamma^{T-t}R rt=γTtR

主流实现‌不直接计算每个token的奖励‌,而是:

  • 奖励模型仅输出整个response的标量奖励 R R R
  • 使用Critic网络预测各token位置的状态价值 V ( s t ) V(s_t) V(st)
  • 通过GAE(Generalized Advantage Estimation)计算各时刻优势:
    A ^ t = ∑ l = 0 T − t ( γ λ ) l δ t + l \hat{A}_t=\sum_{l=0}^{T-t}(\gamma\lambda)^l\delta_{t+l} A^t=l=0Tt(γλ)lδt+l

2. Critic网络

2.1 Critic数学理解

对于生成序列的每个位置t,其Monte Carlo回报计算为:
G t = ∑ k = t T γ k − t r k = γ T − t R ( 当  r k = 0 对  k < T 时 ) G_t = \sum_{k=t}^T \gamma^{k-t} r_k = \gamma^{T-t}R \quad (\text{当}\ r_k=0\ \text{对}\ k<T\ \text{时}) Gt=k=tTγktrk=γTtR( rk=0  k<T )
标准优势函数表达式:
A t = G t − V ( s t ) = γ T − t R − V ( s t ) A_t=G_t-V(s_t)=\gamma^{T-t}R-V(s_t) At=GtV(st)=γTtRV(st)
当考虑时序差分时,TD残差展开:
δ t = r t + γ V ( s t + 1 ) − V ( s t ) \delta_t=r_t+\gamma V(s_{t+1})-V(s_t) δt=rt+γV(st+1)V(st)
在Monte Carlo奖励分配设定下(中间 r = 0 r=0 r=0):
δ t = { γ V ( s t + 1 ) − V ( s t ) t < T R − V ( s T ) t = T \delta_t=\left \{ \begin{array}{ll} \gamma V(s_{t+1})-V(s_t) & t<T \\ R-V(s_T) & t=T \end{array}\right. δt={γV(st+1)V(st)RV(sT)t<Tt=T

理想情况下Critic应满足:
V ( s t ) = E [ γ T − t R ∣ s t ] V(s_t)=\mathbb{E}[\gamma^{T−t}R∣s_t] V(st)=E[γTtRst]
此时优势函数简化为:
A t = γ T − t R − γ T − t R = 0 A_t=\gamma^{T−t}R−\gamma^{T−t}R=0 At=γTtRγTtR=0
但实际训练中的三种情况:

场景数学条件优势函数意义训练效果
完美Critic V ( s t ) = γ T − t R V(s_t)=\gamma^{T−t}R V(st)=γTtR A t = 0 A_t=0 At=0策略无需更新
低估状态价值 V ( s t ) < γ T − t R V(s_t)<\gamma^{T−t}R V(st)<γTtR A t > 0 A_t>0 At>0强化当前动作
高估状态价值 V ( s t ) > γ T − t R V(s_t)>\gamma^{T−t}R V(st)>γTtR A t < 0 A_t<0 At<0抑制当前动作

对相邻状态的价值要求:
V ( s t ) = γ V ( s t + 1 ) 理想递归关系 V(s_t)=\gamma V(s_{t+1}) \quad 理想递归关系 V(st)=γV(st+1)理想递归关系

Critic网络通过价值函数分解实现:
V ( s t ) = E [ ∑ k = t T γ k − t r k ∣ s t ] ≈ C r i t i c ( s 1 : t ) V(s_t)=\mathbb{E}[\sum_{k=t}^T\gamma^{k-t}r_k|s_t]\approx Critic(s_{1:t}) V(st)=E[k=tTγktrkst]Critic(s1:t)
即使 r k = 0 ( ∀ k < T ) r_k=0 (\forall k<T) rk=0(k<T),Critic仍可学习到: V ( s t ) = γ T − t E [ R T ∣ s t ] V(s_t)=\gamma^{T-t}\mathbb{E}[R_T|s_t] V(st)=γTtE[RTst]
因此,Critic网络具有隐式信用分配能力。

2.2 Critic工程实践

在Monte Carlo分配法下,即使中间token奖励为0,优势函数仍然有效,但需满足以下条件:

  • Critic网络必须能建模时间衰减‌:通过位置编码、时间感知层等结构捕获 γ T − t R \gamma^{T-t}R γTtR的指数衰减模式
  • 训练过程需要阶段控制‌:
    • 早期侧重Critic预训练
    • 中期进行策略-Critic交替更新
    • 后期引入TD方法辅助
  • 工程实现注意事项‌:
    • 价值预测网络深度应大于策略网络
    • 对最后k个token(如k=3)取消折扣计算
    • 采用优势归一化技术

最终,通过设计合理的Critic架构和训练策略,即使中间奖励为0,系统仍能有效进行策略优化,其本质是通过Critic网络隐式学习到状态间的时序价值传递关系。

错误认知

  • ❌ RLHF-PPO可以直接使用奖励模型替代Critic网络
  • ❌ 每个token都需要独立的奖励信号
  • ❌ 优势函数可以直接等于奖励值
    正确理解
  • ✅ Critic网络和奖励模型是互补组件
  • ✅ Token级优势计算不等于token级奖励
  • ✅ 优势函数的时序关系对策略优化至关重要

2.3 消融实验数据

在GPT-2微调任务中的表现对比(序列长度=10):

方法训练步数奖励提升梯度方差
MC+无Critic5000+12.3%1.24e-3
PPO+Critic2000+28.7%4.56e-5
混合方法3500+22.1%7.89e-5

3. 结论

  • RLHF-PPO奖励和状态价值关系

    • RLHF在大模型输出的response生成标量reward,相当于稀疏奖励场景
    • 将response的每个token看作action,即时奖励 r t = 0 t < T r_t=0 \quad t<T rt=0t<T, r T = R r_T=R rT=R
    • 即使是稀疏奖励,采用Critic网络学习每个token的状态价值也是有意义的,可以减少方差,尤其对于长序列response
    • 在不使用Critic网络时,也可以直接使用 R R R进行优化,蒙特卡洛方法,但是方差很高
  • 纯MC方法的适用边界‌:仅推荐用于超短文本生成(≤5 tokens)的初期探索阶段
    ‌- Critic的核心价值‌:

    • 实现隐式的时序信用分配
    • 将方差从O(T²)降低至O(1)
    • 支持长序列稳定优化
  • ‌最佳实践路径‌:

    • 优先构建Critic网络
    • 在短序列场景尝试MC预热
    • 采用混合优势估计策略
      ‌- 理论突破方向‌:
    • 基于大语言模型的自适应基线估计
    • 分层信用分配机制
    • 元学习优化的方差控制方法

相关文章:

强化学习信用分配——以RLHF为例分析

Section 1. 信用分配简介 在强化学习中&#xff0c;信用分配&#xff08;Credit Assignment&#xff09;是指确定某个动作或状态对最终奖励的具体贡献的过程。由于强化学习的奖励通常是延迟的&#xff08;Delayed Reward&#xff09;&#xff0c;比如围棋&#xff0c;只有在胜…...

.py文件和.ipynb文件的区别:完整教程

一、概述 Python开发者常用的两种文件格式.py和.ipynb各有特点&#xff0c;本教程将通过对比分析、代码示例和场景说明&#xff0c;帮助开发者全面理解二者的区别与联系。 二、核心区别对比 1. 文件格式本质 特性.ipynb文件.py文件文件类型JSON结构化文档纯文本文件存储内容…...

【AI】AI大模型发展史:从理论探索到技术爆发

一、早期探索阶段—理论与技术奠基 1.1 符号主义与连接主义的博弈 20世纪50-70年代&#xff0c;符号主义AI主导研究方向&#xff0c;通过专家系统模拟人类逻辑推理&#xff0c;但受限于计算能力和数据规模。80年代连接主义AI兴起&#xff0c;以神经网络为核心&#xff0c;反向…...

【项目管理】第11章 项目成本管理-- 知识点整理

相关文档,希望互相学习,共同进步 风123456789~-CSDN博客 (一)知识总览 项目管理知识域 知识点: (项目管理概论、立项管理、十大知识域、配置与变更管理、绩效域) 对应:第6章-第19章 ​ ​ (二)知识笔记​ 第11章 项目成本管理 ​ 1.管理基础…...

初学STM32之编码器测速以及测频法的实现

资料来着江协科技 这篇是编码器测速&#xff0c;江科大的源码在测速的时候&#xff0c;定时器TIM2是一直在跑的&#xff0c;不受其它控的&#xff0c;它就一直隔1S读一次CNT的值。它也不管是否有输入信号。源码程序修改一下是可以实现对PWM信号以测频法的方式读取。 笔者稍微改…...

Linux 内核知识体系[1]

1 Linux内核知识体系 2.Linux内核学习路线 2.1基础知识准备 操作系统基础&#xff1a;了解操作系统的概念和基本原理&#xff0c;包括进程管理、内存管理、文件系统、输入输出等。 书籍&#xff1a;《操作系统&#xff1a;设计与实现》&#xff08;Andrew S. Tanenbaum&…...

408 计算机网络 知识点记忆(7)

前言 本文基于王道考研课程与湖科大计算机网络课程教学内容&#xff0c;系统梳理核心知识记忆点和框架&#xff0c;既为个人复习沉淀思考&#xff0c;亦希望能与同行者互助共进。&#xff08;PS&#xff1a;后续将持续迭代优化细节&#xff09; 往期内容 408 计算机网络 知识…...

Mac 下载 PicGo 的踩坑指南

Mac 下载 PicGo 的踩坑指南 一、安装问题 下载地址&#xff1a;https://github.com/Molunerfinn/PicGo/releases 下载之后直接安装即可&#xff0c;此时打开会报错&#xff1a;Picgo.app 文件已损坏&#xff0c;您应该将它移到废纸篓。 这是因为 macOS 为了保护用户不受恶意…...

消失的它:揭开 CoreData 托管对象神秘的消失之谜(上)

概述 使用 CoreData 作为 App 持久存储“定海神针”的小伙伴们想必都知道&#xff0c;我们需要将耗时的数据库查询操作乖巧的放到后台线程中&#xff0c;以便让主线程负责的 UI 获得风驰电掣般地享受。 不过&#xff0c;如何将后台线程中查询获得的托管对象稳妥的传送至主线程…...

电流互感器的两相星形接线的建模与仿真

微♥“电击小子程高兴的MATLAB小屋”获取巨额优惠 1.模型简介 本仿真模型基于MATLAB/Simulink&#xff08;版本MATLAB 2016Rb&#xff09;软件。建议采用matlab2016 Rb及以上版本打开。&#xff08;若需要其他版本可联系代为转换&#xff09; 2.仿真模型 3.仿真结果 3.1一次…...

Day3—循环起来吧

第一章一切从安装有利工具开始 第二章Python基本语法 第三章结构化程序设计 3.1条件语句 3.1.1if语句 只需要判断一个条件&#xff0c;并且在该条件为 True 时执行特定的代码块&#xff0c;而在条件为 F…...

forms+windows添加激活水印

formswindows添加激活水印 多语言水印文本&#xff0c;根据系统语言自动切换。水印显示在每个屏幕的右下角&#xff0c;位置动态调整。半透明灰色文字&#xff0c;微软雅黑字体。窗口无边框、置顶、透明背景&#xff0c;不干扰用户操作。支持多显示器。高DPI适配。 效果图&am…...

014_多线程

多线程 多线程创建线程方式一&#xff1a;继承Thread类方式二&#xff1a;实现Runable接口方式三&#xff1a;实现Callbale接口 Thread的常用方法线程安全线程同步方式一&#xff1a;同步代码块同步方法方式三&#xff1a;Lock锁 线性池创建线程池处理Runnable任务处理Callable…...

R语言基础包可视化(一:axis函数)

R语言基础包可视化(一:axis函数) 背景axis函数(坐标轴函数)各参数的图片示例hadj和padjline和poslty,lwd,lwd.ticksgap.axis总结背景 之前在介绍正态Q-Q图的过程中,画过标准正态分布的随机数、分数数、分布函数、密度函数的图像,相关的文章连接参考此处:R语言正态Q-Q图…...

Spring MVC 处理 HTTP 状态码、响应头和异常的完整示例

Spring MVC 处理 HTTP 状态码、响应头和异常的完整示例 1. 正常响应处理 通过 ResponseEntity 可以灵活控制 HTTP 状态码、响应头和响应体。 代码示例&#xff1a;创建资源返回 201 并设置 Location 头 import org.springframework.http.HttpHeaders; import org.springfram…...

Linux安装postgresql17

1、下载 wget https://ftp.postgresql.org/pub/source/v17.4/postgresql-17.4.tar.gz 2、上传解压 tar -zxvf postgresql-17.4.tar.gz 3、安装依赖 yum install -y perl-ExtUtils-Embed readline-devel zlib-devel pam-devel libxml2-devel libxslt-devel openldap-devel …...

从零搭建微服务项目Pro(第0章——微服务项目脚手架搭建)

前言&#xff1a; 在本专栏Base第0章曾介绍一种入门级的微服务项目搭建&#xff0c;尽管后续基于此框架上实现了Nacos、Eureka服务注册发现、配置管理、Feign调用、网关模块、OSS文件存储、JSR参数校验、LogBack日志配置&#xff0c;鉴权模块、定时任务模块等&#xff0c;但由于…...

dolphinscheduler创建文件夹显示存储未启用的问题--已解决

只要修改api-server/comf/common.properties和standalone-server/conf/common.properties里面的内容就可以了&#xff0c;应为你要靠standalone-server这个服务启动dolphinscheduler-web&#xff0c;其他就算怎么改你重启dolphinscheduler的时候系统也不会识别新的common.prope…...

C++线段树详解与实现技巧

📚 C++线段树详解与实现技巧 线段树(Segment Tree)是一种高效处理 区间查询 和 区间更新 的数据结构,时间复杂度为 O(log n)。本文结合代码实例,详解其核心原理与实现细节。 🌳 线段树结构特点 完全二叉树:使用数组存储,父子节点关系通过下标计算。区间划分:每个节…...

聊一聊原子操作和弱内存序

1、原子操作概念 在并发编程中&#xff0c;原子操作&#xff08;Atomic Operation&#xff09;是实现线程安全的基础机制之一。从宏观上看&#xff0c;原子操作是“不可中断”的单元&#xff0c;但若深入微观层面&#xff0c;其本质是由底层处理器提供的一组特殊指令来保证其原…...

VIRT, RES,SHR之间的关系

VIRT、RES 和 SHR 是进程内存使用的三个关键指标&#xff0c;它们之间的关系反映了进程的内存分配和使用情况。以下是它们的定义和关系&#xff1a; VIRT&#xff08;虚拟内存&#xff09;&#xff1a;表示进程分配的虚拟内存总量&#xff0c;包括所有代码、数据、共享库、堆栈…...

Ubuntu中部署MeloTTS

0. 环境 ubuntu server 22.04 cuda version 12.4 python version 3.9 1. 安装python依赖 git clone https://github.com/myshell-ai/MeloTTS.git cd MeloTTS注意不是执行 pip install melotts 如果国内服务器无法从github中下载源码&#xff0c;那么可以把github改为gitc…...

2024年React最新高频面试题及核心考点解析,涵盖基础、进阶和新特性,助你高效备战

以下是2024年React最新高频面试题及核心考点解析&#xff0c;涵盖基础、进阶和新特性&#xff0c;助你高效备战&#xff1a; 一、基础篇 React虚拟DOM原理及Diff算法优化策略 • 必考点&#xff1a;虚拟DOM树对比&#xff08;同级比较、Key的作用、组件类型判断&#xff09; •…...

Adobe After Effects的插件--------Optical Flares之Options概述

Optical Flares插件的Options是对整个效果的组装和设置。点击该按钮会弹出一个组装室弹窗。 Options组装室就是对每个【镜头对象】进行加工处理,再将其组装在一起,拼凑成完整的光效。 接下来是我对组装室的探索: 面板 面板中有预览、堆栈、编辑和浏览按钮,其作用是调节窗…...

深入解读 React 纯组件(PureComponent)

什么是纯组件&#xff1f; React 的纯组件(PureComponent)是 React.Component 的一个变体&#xff0c;它通过浅比较(shallow comparison)props 和 state 来自动实现 shouldComponentUpdate() 方法&#xff0c;从而优化性能。 核心特点 1. 自动浅比较&#xff1a; PureCompon…...

微信小程序事件详解

微信小程序中的事件绑定是实现交互功能的核心机制之一。通过事件绑定&#xff0c;开发者可以监听用户的操作行为&#xff08;如点击、输入、滑动等&#xff09;&#xff0c;并根据需要执行相应的逻辑处理。 以下是关于微信小程序事件绑定的详细说明&#xff1a; 一、事件绑定的…...

字符串与相应函数(上)

字符串处理函数分类 求字符串长度&#xff1a;strlen长度不受限制的字符串函数&#xff1a;strcpy,strcat,strcmp长度受限制的字符串函数:strncpy,strncat,strncmp字符串查找&#xff1a;strstr,strtok错误信息报告&#xff1a;strerror字符操作&#xff0c;内存操作函数&…...

Laravel源码进阶

Laravel源码进阶 版本 laravel5.8 生成服务容器 public index.php //compose必要操作 require __DIR__./../vendor/autoload.php; //容器文件 $app require_once __DIR__./../bootstrap/app.php;-bootstrap/app.php //初始化容器 构造函数中执行这个几个方法 //$this->…...

镜舟科技亮相 2025 中国移动云智算大会,展示数据湖仓一体创新方案

4月10-11日&#xff0c;2025 中国移动云智算大会在苏州金鸡湖国际会议中心成功举办。大会以“由云向智&#xff0c;共绘算网新生态”为主题&#xff0c;汇聚了众多行业领袖与技术专家&#xff0c;共同探讨了算力网络与人工智能的深度融合与未来发展趋势。 作为中国领先的企业级…...

2025蓝桥杯省赛C/C++研究生组游记

前言 至少半年没写算法题了&#xff0c;手生了不少&#xff0c;由于python写太多导致行末老是忘记打分号&#xff0c;printf老是忘记写f&#xff0c;for和if的括号也老是忘写&#xff0c;差点连&&和||都忘记了。 题目都是回忆版本&#xff0c;可能有不准确的地方。 …...