稀疏奖励困境下的突破:HER事后经验回放原理与实践解析
做强化学习这几年有一个问题几乎每次跑机器人控制、操作类任务都会撞上——稀疏奖励。目标没达成奖励恒为0算法像个无头苍蝇乱撞训练几百回合毫无进展。我早期做机械臂抓取时跑了一整夜第二天看曲线还是一条直线心态差点崩了。后来我用了hindsight这个思路的经典实现也就是事后经验回放Hindsight Experience Replay简称HER才真正把这个死结解开。当时最大的感受是算法本来不需要那么聪明只需要学会从失败里翻出有用的东西。这篇文章不是纯理论我会把HER的核心思路、为什么它能解决稀疏奖励问题、落地实操时的关键参数和踩坑点以及它背后“事后视角”这种思维在日常项目里的迁移价值一次性讲清楚。适合刚入门强化学习、正被稀疏奖励折磨的读者也适合想从工程角度把“失败样本”充分利用起来的开发者和研究者。1. 整体设计与思路拆解为什么“事后弥补”反而更高效1.1 稀疏奖励的困境算法不是不努力是不知道什么叫进步先还原一下最典型的场景。你训练一个机械臂把方块推到目标位置每一次episode结束如果方块没有落到目标点reward就是0如果落进去了reward就是1。这种0/1的稀疏奖励在数学上没有任何问题但在实际反向传播、策略梯度更新时问题极其尖锐——绝大多数样本的回报都一样策略根本分不清哪个动作“稍微好一点”哪个动作“方向错了”。我经常用一个生活中的类比来解释这件事教一个孩子射箭只在正中靶心时夸一句“好”其他情况什么反馈都不给。这种训练方式下孩子不仅学得慢而且很容易放弃因为完全无法建立“我的姿势调整了一点到底对不对”的认知。强化学习的agent在稀疏奖励面前的表现本质上是一样的。从算法层面看稀疏奖励会导致两个严重后果。第一是探索效率极低agent在初始阶段全是随机动作偶发命中目标的概率可能低到万分之一甚至更低整个回放缓冲区里几乎没有正样本价值函数学不到有意义的信息。第二是信用分配困难就算最后真的碰巧成功了这条trajectory里几十上百个动作到底是哪个动作起了决定性作用单靠一个最终奖励很难拆解清楚。1.2 HER的核心思想为失败样本重新标注“虚拟目标”HER的解决思路很反直觉但逻辑上非常通顺既然真实目标太难达成那我不如引入“事后目标”——把这条轨迹实际到达的状态当作目标重新算一遍reward再把这条数据存进经验池。这样原本完全没用的失败轨迹摇身一变成了一个“成功的示范”。因为对虚拟目标来说agent确实达成了这是硬事实不是伪造数据。举一个更具体的例子。机械臂推方块的任务中目标位置在坐标(1.0, 0.5)但是这条episode推到了(0.8, 0.5)。按照原始的goal判断reward是0这条样本毫无价值但HER会额外生成一条新样本把目标改成(0.8, 0.5)重新判断reward这时就变成了1然后作为一条“成功经验”存入回放池。下次训练时策略从这条样本里学到的是“把方块推到(0.8, 0.5)的动作序列是可行的”。这套思路的本质是把“目标空间”的学习从单一终点变成了一个分布。通过在训练中不断用真实到达状态去伪造目标agent学到的其实不是“如何完成某个特定目标”而是“如何达成一类目标的通用策略”。当一个任务的目标本身就是从某个目标分布里采样时这种泛化能力恰好是所需要的。很多人第一次听说HER会问一个问题这不是在自欺欺人吗用假目标训练出来的策略真的有用吗关键点在于这个“假目标”并不是胡乱编造的而是agent当前策略实际能够达到的状态。它的作用是帮agent在早期建立“动作—结果”之间的联系等策略逐渐变好、到达的状态越来越接近真实目标时虚拟目标也会越来越靠近真实目标最终实现在真实目标上的成功。1.3 为什么要用“目标条件化”框架HER不是补丁是结构要求使用HER有一个前提任务必须被建模成目标条件化goal-conditioned的形式。也就是说策略输入不仅有当前状态还有一个目标reward的计算必须依赖于“当前状态是否达到目标”而不是只依赖一个固定的最终奖励。我见过不少初学的人试图在自己已有的非目标条件化代码里强行塞HER结果效果很差还以为是HER没用。实际上HER适用的任务结构是状态空间和目标空间有重叠或对应关系且reward可以写成基于距离阈值的判断。拿推方块任务来说state是方块位置goal也是位置两个都在同一个空间里reward 1当且仅当|state - goal| 阈值。在这个框架下HER才有意义原本目标没达到时用真实到达状态替代目标这个被替代的目标是可以由状态直接读出来的。如果目标是“左上角那张图片的end-to-end识别结果”状态里根本不含目标信息那就没法用HER。选任务前先确认这个结构能省下后面大量返工时间。2. 核心实现原理与实操要点手把手拆解HER的关键机制2.1 经验池里到底存了什么从transition到带目标标注的四元组传统强化学习的一条transition是(s, a, r, s)即状态、动作、奖励、下一状态。HER的经验池数据结构需要扩展成(s, g, a, r, s)多了一个目标g。训练时从经验池里取出来把(s, g)拼起来作为网络输入a作为输出动作用r去更新。真正有技巧的地方在于一条原始轨迹在存入HER经验池时不是只存一条而是会生成多条不同目标标注的transition。举个例子一条长度为T的episode原始轨迹走向是s0 → s1 → s2 → ... → sT。对每一步t原始目标g_orig对应的transition要存一份另外还会随机选取这条轨迹中的未来某个状态s_kk t作为替代目标生成新的transition然后按新目标重新计算reward再存一份。这里存在一个逻辑校正对替代目标g_alt s_k如果在t时刻agent的下一状态s_{t1}恰好接近s_k那么这条transition的reward就是1否则就是0。重要的是这个“0/1”不是拿真实轨迹硬凑它反映的是“从s_t出发执行动作a_t是否帮助接近了目标s_k”这个真实信息因此数据是合法的。2.2 四种目标采样策略选择标准和我的实际使用偏好HER原论文里对比了四种从episode中选择替代目标的策略分别是final、future、episode和random。这里我直接给出每种策略的定义和实际使用感受。采样策略做法优点缺点我的使用评价final只用轨迹最终状态s_T作为替代目标简单直接与原论文思路一致对于长轨迹或阶段性任务远距离目标过多最无脑但不够高效作为baseline参考future对时刻t从后续时刻k ∈ (t, T] 中随机选一个状态s_k作为目标目标与当前状态存在时间上的因果关联采样更合理需要维护额外索引实现稍复杂最常用效果最稳强烈推荐优先试episode从整条轨迹中随机选一个状态不限制必须在t之后实现最简单可能选到“过去的”状态作为未来目标会引入错误因果偶尔也能用但我不推荐作为主方案random从全局经验池随机采样一个状态目标多样性高与当前轨迹的关联极弱早期基本没用适合作为future的辅助补充实际跑实验时我基本都是用future策略然后额外设置一个参数k论文里推荐是4意思是每条transition额外生成4条不同替代目标的样本再存池。注意这里的4不是定死的如果你的任务轨迹很长比如100步以上K4可能略少反之轨迹只有10步左右K4又略多。建议依据轨迹长度做一次粗调。2.3 reward改成什么形式二值判断和距离判断的取舍HER论文里的经典做法是用二值奖励如果状态与目标的距离小于某个阈值奖励为1否则为0。这种做法的好处是简单、不引入额外超参数配合HER本身就已经能收敛。但实际做工程时我更建议大家考虑一下reward的“密度”。如果用的是连续动作控制比如机械臂或仿真机器人可以尝试把二值奖励平滑化为负的距离值比如-|state - goal|。因为负距离是稠密奖励能提供更细粒度的梯度信息尤其是在切换目标之后agent能更快地形成“越接近目标越好”的认知。不过要注意距离奖励下的绝对值范围需要保持稳定建议做归一化否则reward尺度变化会影响价值函数初始化。我做过一组对比实验在同一个推方块环境里二值奖励HER大概需要40万步收敛到90%成功率负距离奖励HER只需要25万步左右差距挺明显。但负距离奖励也有代价如果状态空间的维度很高比如图像输入计算距离就不那么现实这时候还是二值奖励更稳。2.4 算法基座选什么DQN系列还是策略梯度系列HER是一个经验回放机制它不关心你的base algorithm是什么只要这个算法用到了经验池就能集成HER。我见过最常用的组合是DQN类包括Double DQN、Dueling DQN和DDPG/SAC这类actor-critic架构。如果任务动作空间是离散的我建议用Double DQN HER稳定、参数少、调试省心。如果动作空间是连续的优先SAC HERSAC对学习率的敏感度相对低配合HER的“目标重标注”机制整体训练过程非常稳。DDPG虽然也可以用但超参数太敏感我踩过不少坑不推荐新手直接上手。有一个容易被忽视的细节HER改变了经验池中样本的分布大量“伪造成功”的样本会让价值函数对成功状态过拟合。这时候建议把目标网络更新频率调低一点比如原来每1000步同步一次可以改成2000步或者把Q网络的权重初始化幅度调小一点避免初期Q值太大导致策略过于自信。3. 实操过程与核心环节实现一个可以复现的HER训练流程3.1 环境准备与目标条件化改造为了不纸上谈兵这里拿一个公开的经典环境来讲机械臂推方块任务比如gym的FetchPush-v1或者pybullet里的类似实现。这个环境里observation包含的是当前机械臂末端位置、方块位置、目标位置等信息reward默认就是二值稀疏奖励正是HER的目标场景。改造的第一步是把原本的observation拆开一部分当作state输入策略另一部分当作goal输入策略。在FetchPush-v1里observation是一个字典里面包含了achieved_goal和desired_goal两个字段这就天然适合HER结构。如果你的环境不是这种格式需要自己手动组装从observation中抽出与目标对应的维度作为achieved_goal外部传入的目标作为desired_goal。这里有一个很容易犯的错state中依然包含goal信息。如果你把整个observation都喂给策略又把goal也单独喂一遍输入维度重复了不仅浪费计算还可能让策略对goal的注意力被其他无关信息冲淡。建议在构造state时把与goal直接对应的维度去掉只保留状态中没有被goal覆盖的部分。比如方块位置已经是goal的一部分那state里就不用再放一份方块位置了。3.2 经验池与训练循环的实现细节HER的核心逻辑主要集中在数据采集和数据入库这两个环节。下面给一个简化的PyTorch风格伪代码展示一条episode结束后如何生成HER样本。注意这段代码只展示HER机制不包含完整的DQN/SAC更新过程方便聚焦。def her_process_episode(episode_transitions, achieved_goals, replay_buffer, her_strategyfuture, k4): T len(episode_transitions) for t, (state, goal, action, reward, next_state, done) in enumerate(episode_transitions): # 1. 先存原始目标对应的transition replay_buffer.add(state, goal, action, reward, next_state, done) # 2. 根据策略挑选替代目标 if her_strategy final: # 原论文中也可以只对最后一步做HER但这里做全部步骤 alt_goals [achieved_goals[-1]] * k elif her_strategy future: # 在t之后的时间步里采样 future_idx np.random.randint(t 1, T 1, sizek) alt_goals [achieved_goals[idx] for idx in future_idx] elif her_strategy episode: idxs np.random.randint(0, T, sizek) alt_goals [achieved_goals[idx] for idx in idxs] else: # random alt_goals [replay_buffer.sample_goal_randomly() for _ in range(k)] # 3. 对每个替代目标重新计算reward并入库 for alt_goal in alt_goals: new_reward compute_reward(achieved_goals[t 1], alt_goal) new_done check_success(new_reward) replay_buffer.add(state, alt_goal, action, new_reward, next_state, new_done)这里的compute_reward和check_success必须和环境内部的判断逻辑保持一致。很多bug就出在这里环境里的reward函数和代码里重算的reward版本对不上导致HER生成的样本和环境真实反馈不一致训练出的策略会莫名抖动。3.3 网络结构选择和输入拼接顺序对于FetchPush这类低维状态任务网络不需要很深。我常用的结构是state经过一个128维的全连接层goal经过一个128维的全连接层然后拼接起来再过两个256维的隐藏层最后输出动作或Q值。这种“先分别编码再拼接”的结构比直接把state和goal拼在一起作为输入效果要好一点因为state和goal的语义不同分开编码能保留各自的独立性。如果你把state和goal直接拼接喂进同一层网络刚开始训练时问题不大但随着训练推进目标空间和状态空间的交互越来越复杂共享底层特征会让网络不得不学习两套映射关系隐层容量很快就不够用了。分离编码在效果上并没有特别夸张的提升但能明显减少调参时间。还有一个细节是关于目标空间的归一化。假如你的任务目标是三维坐标但三个维度的数值范围差异很大比如x在[0,1]y在[0,10]z在[0,100]那就必须要归一化到统一尺度否则距离计算会完全被大数值维度主导导致小数值维度上的信息被淹没。归一化可以基于环境数据的统计值来做比如采样一万条状态算均值和方差然后固定下来。3.4 关键超参数和训练策略的推荐配置HER的引入不等于万事大吉超参数还得精调。我这里给一套在FetchPush类任务上实测过比较稳的配置可以直接作为起点。参数推荐值备注回放池大小1e6 左右太小会让HER样本被很快覆盖太大又增加采样开销batch size256较大batch能平滑目标重标注带来的方差目标采样策略futurek4然后视情况调整每episode额外生成样本数4k值与轨迹长度负相关探索噪声高斯噪声std0.2连续控制任务通用起始值学习率actor 1e-3critic 1e-3SAC框架下通常不需要特别小目标网络更新soft updatetau0.005不要设太大0.1会让训练极不稳定每环境交互步数50万~100万视任务难度而定FetchPush约50万步能到90%训练节奏上我强烈建议用并行环境哪怕只是4个并行训练速度的提升都不止线性。因为HER的样本生成依赖于“当前策略实际能达到的状态”并行环境能同时采集多条不同轨迹经验池中的状态覆盖面更广目标重标注的多样性直接提升一个档次。4. 常见问题与排查技巧实录HER实战中的那些坑4.1 训练刚开始时成功率反而下降了正常吗我跑第一次HER实验时非常困惑地发现前一万步成功率非但没有提升反而比随机策略还低了一点。查了很久才明白这不是bug是HER的“目标重标注”在早期产生的副作用。因为随机策略几乎无法实现真实目标所以HER大量生成的都是“虚拟目标对应的成功样本”这些样本让critic短暂学会了一种错觉——只要离目标近就算成功。但此时actor的策略还在随机探索成功率下降是正常的。解决办法是不要恐慌观察更长期的趋势。HER的收敛曲线通常是先下降、再爬升、最终超过无HER版本。起步阶段可以适当增大探索噪声帮助找到更多样的状态从而生成更有价值的目标。如果五千步内还在下降不用干预如果两万步还在下降检查一下reward重算逻辑是否一致。4.2 训练后期总是达不到100%成功率卡在七八成就上不去这是HER比较有名的“最后一公里”问题虚拟目标帮agent学到了大致的操作技能但真实目标往往比虚拟目标更极端、更边缘所以最后的10%~20%成功率提升异常缓慢。我会试三种处理方式按优先级排序。第一降低阈值难度把真实目标判定的阈值放宽一点看看是否是因为目标误判太苛刻。第二逐步增加真实目标的占比比如训练后期把HER生成样本的比例从k4降到k2让agent逐渐适应纯真实目标。第三引入课程学习curriculum learning从靠近初始状态的目标开始训练慢慢增加目标距离。这里特别提醒不要用“增大k值”这种简单粗暴的方式来试图解决后期问题。k值增大的效果主要在前中期后期继续加k反而会让经验池里虚拟目标占比过高真实目标被淹没成功率瓶颈更严重。4.3 我的环境动作是离散的HER还能用吗能而且效果很理想但有一个关键改动。离散动作下DQN类的更新目标是Q值不直接依赖于动作的连续梯度所以HER的样本生成逻辑完全一样不需要改reward函数的形式只需要注意DQN的target网络更新频率要比连续控制任务稍高一点比如每500步同步一次因为离散动作的Q值变化更剧烈。我拿离散动作的grid maze任务试过HER在原本3%的成功率基础上直接拉到80%这个过程充分说明了HER对任务结构的要求主要在于目标和状态空间的可对应性并不在乎动作是连续还是离散。4.4 HER样本和原始样本的比例失衡怎么办如果HER样本在经验池里的占比过高会导致agent只擅长完成虚拟目标而对真实目标的处理能力退化。这个问题尤其发生在k值设得过大、或者episode长度很短时。按我的经验遇到这种情况优先降低k值不要急着改采样策略。k2和k4之间的差距在实践中往往就决定了最后5%的成功率高低。另外可以在采样时手动控制原始样本和HER样本的比例不必严格随机。比如采样batch时以70%的概率从原始transition里取30%的概率从HER生成的transition里取这样能够人为平衡两类数据效果通常比我单纯调k值要稳定一些。4.5 经验池里大量重复状态出现在虚拟目标中训练开始震荡明显原因是采样策略选了“episode”或“random”而你的轨迹本身就存在大量相似状态尤其是机械臂在等待动作或微小移动时状态几乎不变。这时候虚拟目标之间过于接近会让critic对相近状态产生互相矛盾的判断训练就会震荡。最有效的处理是换回future策略保证替代目标来自当前轨迹的未来状态并且有条件的话在脚本地加一个最小间隔比如k时刻必须大于t3才能被选中避免太近的状态被当成目标。5. hindsight思维的工程普适性从RL训练到日常项目复盘5.1 日志回滚与故障定位中的“事后视角”HER的价值并不局限在强化学习。我在做线上服务排查时经常会遇到一种情况某个请求在某个时刻突然超时但当时没有打全日志事后想定位问题根本无从下手。后来我换了一种思路这正是“hindsight”的日常生活版本——把每次线上异常请求的实际结果当作“虚拟目标”反推回去重新梳理当时的状态变化而不是只盯着预期的正常路径。具体做法是给关键服务加一种结构化日志记录每个请求入参的hash、经过的每个模块的耗时、以及最终的结果状态。出问题时不是只看失败请求的日志而是把同一时间段内所有请求包括成功的、失败的的结果和路径做横向对照。这就像HER里的future采样从后续时刻的真实结果去验证前面的每个动作是否合理而不是只守着当时的单一预期。我踩过的一个具体的坑是只记录“成功”时的上下文快照失败时日志往往因为超时被截断。后来我改成在入口处先记录一份request摘要中间各阶段追加标记这样就算后续阶段失败至少能回看“哪些标记点通过了、哪些没通过”定位效率能有质的提升。本质上这也是一种对“事后状态”的充分利用。5.2 项目复盘与个人学习中的“hindsight式重构”每次项目结束后复盘时大部分人都会盯着“目标是否达成”。这种视角的问题是如果一个目标没达成那这项工作是否就没有价值了hindsight思维在这里给出了一个新的答案把实际发生的路径视为一种结果然后反向解释它。回头看某些决策虽然没有让指标涨到目标但让你验证了一条走不通的路这种信息本身就是“虚拟目标上的成功”。我在团队里推行过一个简单的复盘模板不写“预期做了什么”而是按时间线列出“实际上发生了什么”“当时为什么做这个选择”“如果现在重来一遍基于已有结果会怎么选”。这三问的本质就是一次HER操作——把实际路径当作目标重新计算每个选择的价值然后更新策略。坚持半年后团队犯过的同类错误明显少了很多。这件事最打动我的地方在于hindsight不是自我安慰或事后辩护而是把“失败”从不可用的状态变成了一种可学习的数据资产。只要你拥有足够多样的、覆盖真实路径的“事后状态”你就能从任何一段经历里提取出有用的训练信号。5.3 hindsight在产品设计中的应用用“现实结果”校准“用户目标”产品设计里也经常出现稀疏奖励问题。你设想用户访问页面后的目标比如注册、下单、分享但真实世界里用户的行为路径往往千差万别很多用户根本没到达你预设的目标。传统的漏斗分析会把他们标记为“流失用户”但hindsight思维会换一个角度这些用户实际到达的页面和行为特征是什么把这些“实际到达点”当作新的虚拟目标去反推哪些来源、哪些内容、哪些交互步骤能有效引导用户走到那里。我做过一个小工具站最初预设用户会先注册再使用但数据出来后大部分用户根本不注册就直接用工具。用hindsight视角看真实到达状态是“直接用工具”于是把产品目标重标注为“完成一次工具使用”围绕这个目标优化了新用户的首页引导整体使用率提升了将近一倍。注册率反而并没有明显变化但用户价值其实更高了。很多时候我们死盯预设目标反而忽略了已经发生的成功路径。5.4 hindsight思维如何反向改良“失败复盘”的工具设计我还想提一个更具体的工具设计建议。很多人用看板、OKR这类框架做目标管理但这些工具本质上都是“目标导向”的一旦目标没达成历史记录就成为一堆需要解释的失败数据。我们可以设计一种“hindsight友好的复盘工具”每次任务结束后允许参与者把“实际产出”重新填入目标栏然后基于这个新目标评分和记录原因。这么做听起来有点自欺欺人但实际效果很好。因为它把注意力从“是否成功”转移到“什么条件下会产生什么结果”。当“目标”变成“基于实际结果反推出来的规则”时团队对不确定性的容忍度会大幅提高也更容易积累出“什么操作在什么场景下有效”的认知库。这种行为模式和HER里的目标重标注异曲同工——并不是否定失败而是让失败产生可用的训练数据。最后再分享一个小技巧如果你刚开始接触HER建议不要一上来就折腾复杂环境先用一个最简单的二维点导航任务把整个流程跑通。我自己第一版HER代码是用一个2D点从起点移动到随机目标点的任务验证的环境本身不到50行代码但足够把目标采样、reward重算、经验池结构这些关键逻辑测明白。等这套流程在简单环境里跑顺了再切换到机械臂这类高维连续控制任务心态会稳很多排查问题也知道该往哪个方向看。把基础机制吃透换成任何复杂环境都只是工程量的问题而不是方法论的问题。

相关新闻

RKDevTool解包update.img全流程:原理、实操与排错

RKDevTool解包update.img全流程:原理、实操与排错

玩国产开发板、Android电视盒子或者RK方案平板的朋友,迟早会碰上update.img这个东西。它是Rockchip平台固件的标准打包格式,烧录、救砖、分发都靠它。但很多人的需求恰恰反着来——手头只有一个成品update.img,想看看里面到底装了什么、能不能…

2026/10/3 10:23:15 阅读更多 →
基于SpringBoot+Vue的企业项目管理系统设计与部署全解析

基于SpringBoot+Vue的企业项目管理系统设计与部署全解析

我在去年底接手过一套基于SpringBootVue的企业项目管理系统源码,前后花了两个多月梳理、改造和部署,踩了不少坑。今天把整套系统的设计思路、核心实现、部署流程和报错排查完整整理出来。无论是你在做毕业设计,还是团队想快速落地一套内部的轻…

2026/10/3 10:23:14 阅读更多 →
风光储互补调度运行研究:Matlab代码实现与工程实践

风光储互补调度运行研究:Matlab代码实现与工程实践

风电、光伏、储能(含电池和废弃矿井小型抽水蓄能)互补调度运行研究(Matlab代码实现)搞新能源调度快十年了,这两年最明显的感受就是:单打独斗的风电场、光伏电站越来越难混,不是被弃电限发,就是出力曲线难看被考核。真正…

2026/10/3 10:23:14 阅读更多 →

最新新闻

DRV8818+STM32F469工业级步进电机高精度控制实战

DRV8818+STM32F469工业级步进电机高精度控制实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/3 10:53:53 阅读更多 →
影刀RPA读Excel循环处理数据:从零搭建自动化流程

影刀RPA读Excel循环处理数据:从零搭建自动化流程

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/3 10:53:53 阅读更多 →
Python模拟LIF神经元网络:小世界拓扑如何驱动同步

Python模拟LIF神经元网络:小世界拓扑如何驱动同步

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/3 10:53:53 阅读更多 →
Playwright破解巨某量引擎后台登录实战:动态iframe+瑞数反爬+滑块验证

Playwright破解巨某量引擎后台登录实战:动态iframe+瑞数反爬+滑块验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/3 10:53:53 阅读更多 →
Vivado报错Labtools 27-2220?开发板检测不到的原因与排查方法

Vivado报错Labtools 27-2220?开发板检测不到的原因与排查方法

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/3 10:53:53 阅读更多 →
AI工程化从零开始:手写神经网络与部署全链路实战指南

AI工程化从零开始:手写神经网络与部署全链路实战指南

别把“from scratch”理解歪了。它不是让你用某个流行框架三分钟训练一个模型,也不是什么“零基础转码 AI 速成”的噱头。在我眼里,ai-engineering-from-scratch 就是一句话:作为一个工程师,你究竟能不能不依赖任何封装&#xff0…

2026/10/3 10:52:53 阅读更多 →

日新闻

把回忆蒸馏成 AI 的浪漫实验:为什么你需要前任.skill 完整指南

把回忆蒸馏成 AI 的浪漫实验:为什么你需要前任.skill 完整指南

把回忆蒸馏成 AI 的浪漫实验:为什么你需要前任.skill 完整指南 【免费下载链接】ex-skill 前任 skill 项目地址: https://gitcode.com/gh_mirrors/exsk/ex-skill 前任.skill 是一个运行在 Claude Code 上的开源 Skill:导入微信、iMessage、短信、…

2026/10/3 0:00:27 阅读更多 →
45个经典Linux面试题:从命令到网络排障的完整考点解析

45个经典Linux面试题:从命令到网络排障的完整考点解析

刚开始带应届生的时候,我最头疼的就是他们拿着一摞Linux面试题背得滚瓜烂熟,一上机全露馅。后来自己从被面的人变成面别人的人,才慢慢摸清楚:Linux面试题考的根本不是答案本身,而是你面对一个不确定的系统问题时&#…

2026/10/3 0:01:28 阅读更多 →
SAP生产预留实战指南:MB21/MB23/MB25协同与MRP集成

SAP生产预留实战指南:MB21/MB23/MB25协同与MRP集成

简介:本资源是一份面向SAP ABAP开发人员、生产计划专员及ERP实施顾问的实操型操作指南,聚焦SAP生产预留核心业务场景,系统解决物料预留创建、查询、校验与批量处理等高频问题。文档以结构化方式覆盖预留背景原理、OMC2编码规则、工厂级参数配…

2026/10/3 0:01:28 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/10/3 9:14:33 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/10/3 9:47:50 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/10/3 9:42:31 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/2 10:36:31 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/3 9:42:35 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/3 9:42:36 阅读更多 →