简介《强化学习的数学原理》是西湖大学赵世钰教授撰写的英文专著电子版面向具备一定数学基础、希望从公式层面真正吃透强化学习的学习者与研究者。全书十章加附录从网格世界示例切入基础概念依次讲透状态值与贝尔曼方程、最优状态值与贝尔曼最优性方程、值迭代与策略迭代、蒙特卡洛方法、随机近似与时间差分、值函数近似、策略梯度以及 Actor-Critic附录补足序列收敛性证明形成从概念到算法的完整数学链条。压缩包共 1 个文件为 18.9MB 的 PDF单份文档即涵盖全书正文、公式推导、各章小结与 QA便于检索、标注和打印。已有 848 人学习。读者可借书中大量举例理解回报与折扣因子、矩阵向量形式的贝尔曼方程、收缩映射等难点并将策略改进与收敛性分析落到自身算法设计与调试中。1. 先弄明白强化学习的数学原理到底在讲什么很多人学强化学习是这样起步的——找个能跑的训练脚本改几行参数看曲线往上爬就以为入门了可一旦换了环境、奖励不涨就完全不知道该动哪一行。卡住的不是写代码的能力而是手里缺一张能解释“它凭什么能学会”的地图。这本以强化学习的数学原理为主线的英文专著干的正是画地图这件事从一个网格世界的小例子出发先把状态、动作、奖励、策略这几个词定义清楚再一路推到贝尔曼方程、值迭代、策略迭代、蒙特卡洛、时序差分最后落到值函数近似、策略梯度和演员-评论家。它不要求你有任何强化学习底子因为第 1 章就是从“完全不懂”写起的但它假定你学过一点概率论和线性代数。想把原理搞懂、又不怕看公式的零基础读者正合适从它开始。2. 为什么值得花时间会调包和懂原理差在哪一步2.1 只跑通过 demo 的人通常卡在三个地方第一个卡点是“曲线不涨就不会动了”。照着教程把训练脚本跑起来前几十轮奖励确实在涨一旦进入平台期或者开始抖动能想到的只有调学习率、调批次大小、换随机种子本质上是在碰运气。这种现象在圈子里被戏称为调参玄学——不是参数有多神秘而是你不知道每一步更新到底在优化什么量。第二个卡点是“换个环境整套代码就废了”。在某个小游戏上跑通的超参数搬到另一个任务上直接不收敛。原因是原教程里的那些数字是配合那个环境的奖励尺度、回合长度、状态维度调出来的而你并不知道它们之间是什么关系。第三个卡点是“看得懂公式说不出为什么”。很多人能背出“用即时奖励加上下一状态的价值来更新当前价值”这句话但被追问一句“凭什么可以这么近似”“这个近似什么时候会失效”就答不上来了。这三件事的共同点在于缺的不是代码量而是从问题定义到算法推导的那条链子。这本英文书稿的价值就在于把这条链子一节一节补上而且作者在序言里明确说了写作目标——让读者不仅知道一个算法的流程还知道它当初为什么被这样设计、为什么有效。2.2 全书三条主线正好一条对着一个卡点这本书的结构不是十个章节平铺而是三条线交织着往上走第一次翻目录的时候先看懂这三条线后面读起来会顺很多。主线起点终点对应你前面的哪个卡点有模型 → 无模型贝尔曼方程第 2、3 章需要知道状态转移概率蒙特卡洛、时序差分第 5、7 章不需要模型换个环境就废你知道算法依赖什么前提了表格 → 函数用一张表存每个状态的价值第 4、7 章用参数化函数甚至神经网络来存第 8 章调参玄学你知道了函数近似带来哪些新误差基于值 → 基于策略先估值再按值挑动作第 4、7 章直接对策略求梯度第 9、10 章公式看不懂两条技术路线的取舍清楚了第一条线解决的是“信息从哪来”。第 2 到第 4 章的所有推导都建立在一个前提上你知道在某个状态做某个动作之后有多大概率转到哪个状态。可现实任务里这个概率往往拿不到于是第 5 章开始换思路——不问了直接采样从走过的经验里估。理解了这个转折你就明白为什么蒙特卡洛和时序差分必须放在贝尔曼方程后面讲而不是反过来。第二条线解决的是“东西存哪”。状态少的时候一个数组就能装下所有价值状态一多数组装不下就得用函数去拟合。第 8 章讲的函数近似、深度 Q 学习本质上就是把前面表格版的更新公式里的“某一格”换成“某个函数的输出”。看懂这一步你再看深度强化学习的代码会发现更新逻辑其实没变多少变的是表示方式。第三条线解决的是“优化谁”。基于值的方法先算价值再间接得到策略基于策略的方法直接调策略参数。第 9 章的策略梯度和第 10 章的演员-评论家是这条线的落点。两条路线各有各的脾气书里在对应位置都给了对比读的时候留意作者是怎么把两者接起来的。2.3 需要的前置数学没有想象中多但这两块绕不开先说清楚底线这本书不要求你学过强化学习但要求你有概率论和线性代数的基础附录里也补了一部分。具体到“够用”的程度大概是这些概率这块要熟悉随机变量、期望、条件期望。贝尔曼方程本质上就是一个条件期望的递推式如果看到 E[·|·] 就发怵第 2 章会读得很痛苦。线性代数这块要会用向量和矩阵表示一组数、会做矩阵和向量的乘法、知道矩阵求逆是什么意思。第 2 章把贝尔曼方程写成矩阵-向量形式第 3 章讨论它的性质都依赖这些。微积分只要知道“梯度指向函数上升最快的方向”就够用了真正用到求导是在第 9 章的策略梯度部分读到那里再回补也来得及。我第一次学的时候犯过一个错误想着“数学没补完就不配翻开书”结果在附录上耗了两周热情磨没了。比较靠谱的做法是边读边补——第 2 章卡住了就回去看条件期望第 9 章卡住了就回去看链式法则缺什么补什么别提前把数学书从头刷一遍。2.4 一个降低难度的读法灰框先跳过例子先吃透作者在排版上做了两个很贴心的设计值得专门说一下怎么利用。第一是灰色底纹的段落。书里把偏难的推导和可选的深入内容放在灰框里意思是按兴趣选读。第一遍读的时候凡是灰框里的证明先整段跳过只读正文里的结论和例子。等把整章的逻辑走通了再回头补一两个你最想弄明白的证明效率会高很多。硬啃证明的结果往往是每个符号都认识连起来不知道在证什么最后连正文讲什么都忘了。第二是全书只用了一个网格世界的例子。第 1 章用它讲状态和动作第 2 章用它算回报第 4 章用它演示值迭代和策略迭代第 5、7 章用它演示采样类方法。这个设计对新手极其友好——你不需要每章重新理解一个背景只要把这一个场景吃透后面所有算法都是在这同一张图上换不同的算法跑。下一章我们就从这个网格世界开始动手。3. 第一个例子怎么跑把网格世界亲手算一遍3.1 全书只用了一个玩具网格世界先把这个场景讲清楚因为后面每一章都会回到它。想象一个正方形的格子棋盘智能体站在其中某一格里每一步可以往上、下、左、右走一格走到边界外面就停在原地。棋盘里有一格是目标走进去就结束拿到一个正奖励其余每一步都给一个小的负奖励逼着它别磨蹭。这就是所谓的网格世界。它简单到什么程度你可以拿一张纸画出来用铅笔在上面走。但它又足够完整有状态在哪一格、有动作往哪走、有状态转移走一步到哪边界会挡住、有奖励每步的即时反馈、有策略怎么决定往哪走、有回合从起点走到目标算一次。第 1 章那七八个概念在这张图上全能找到对应的东西。这就是为什么作者选它做贯穿全书的例子——概念不熟的时候你可以随时回到这张图上验证。入门的话建议先自己画一遍三乘三的格子右下角设成目标格左上角设成不能进的障碍格然后凭直觉写一个“先往下走到底再往右走”的策略。画完之后再往下看代码会顺很多。3.2 用二十行代码把网格世界写成可以运行的样子光看图不够得让它在电脑上跑起来你才能拿它做实验。下面这段代码把刚才说的场景写成了一个可以调用的函数后续所有算法都会用到它。# 一个 3x3 的网格世界右下角是目标格每走一步给 -1 的即时奖励 N 3 # 每边 3 格共 9 个状态 GAMMA 0.9 # 折扣因子越接近 1 越看重远期奖励 STEP_REWARD -1 # 普通移动的即时奖励 GOAL_REWARD 1 # 进入目标格的即时奖励 ACTIONS [up, down, left, right] def step(state, action): 输入当前状态编号和动作返回 (下一状态, 即时奖励, 是否结束) r, c divmod(state, N) # 把一维编号拆成行列方便判断边界 if action up: r max(r - 1, 0) if action down: r min(r 1, N - 1) if action left: c max(c - 1, 0) if action right: c min(c 1, N - 1) next_state r * N c done (next_state N * N - 1) # 走到右下角一个回合结束 reward GOAL_REWARD if done else STEP_REWARD return next_state, reward, done # 一个最简单的策略无论在哪一格都优先往右走 policy {s: right for s in range(N * N)}这段代码里有几个地方值得停下来解释。状态用 0 到 8 的一维整数编号行和列通过 divmod 换算这样后面写数组下标最省事边界用 max 和 min 截断撞墙就停在原地这相当于告诉你“这个动作在这个状态下会转回自己”。done 这个标记很关键它标记一个回合结束终止状态之后不再有后续奖励后面写值迭代的时候要靠它决定要不要加未来价值。策略这里用字典存key 是状态、value 是动作这叫确定性策略——给定状态动作唯一确定。你可以先跑一行print(step(0, down))确认从左上角往下走会到状态 3、奖励是 -1、没有结束。再试试print(step(2, right))会发现它原地不动因为已经贴到右边界了。这种小验证看着不起眼却是后面排查问题的基础——很多算法出错源头就是转移函数写错了。提示把 N 改成 5、把目标格换到别的位置这套代码照样能用。建议你至少改一次看看后面的算法结果会怎么变这比盯着公式看有用得多。3.3 手算一条轨迹的回报理解折扣因子现在算一次完整的“走一回合”。从左上角状态 0 出发策略是往下走两格到状态 6再往右走到状态 7再往右进入状态 8 目标格。这条轨迹拿到的奖励依次是 -1、-1、-1、1。所谓回报就是把这条路上所有奖励加起来但不是直接相加而是越靠后的奖励乘上越多次折扣因子。写成式子就是G -1 0.9 × (-1) 0.9² × (-1) 0.9³ × (1) -1 - 0.9 - 0.81 0.729 ≈ -1.981如果把折扣因子改成 0也就是完全不管以后那么从状态 0 开始的回报就只有第一步的 -1。改成 0.5回报约等于 -1.625。这个数字的变化说明了折扣因子的作用它决定“多远的未来还算数”。折扣因子接近 1智能体会愿意为了远处的正奖励多绕几步接近 0它就只顾眼前。这个手算看起来很小儿科但它是理解后面所有算法的关键。贝尔曼方程无非是把“把这条轨迹上所有奖励加起来”改写成“第一步的奖励加上从下一个状态开始的回报乘一个折扣”。等你真正理解了这个递推关系第 2 章那一堆公式就不会显得突兀了。3.4 拿一张清单检查自己是不是真懂了第 1 章读完第 1 章容易产生一种“我都懂了”的错觉因为那些词日常都听过。建议合上书对着下面这张表自己填一遍填不出来的就回去重看对应小节。概念在这个网格世界里是什么一句话自查状态智能体所在的格子编号我能不能说出当前状态包含了哪些信息动作上下左右四个方向动作集合是有限的还是无限的状态转移走一步之后的落点撞墙原地不动同一状态下同一动作结果一定相同吗策略每个格子规定一个方向的字典策略和动作有什么区别奖励每步 -1进目标 1奖励是环境给的还是策略给的回合从起点走到目标的一次完整过程回合一定会结束吗马尔可夫性下一步只取决于当前格子不取决于怎么来的为什么这个性质对算法很重要最后一行值得多说一句。马尔可夫决策过程这个名词听起来唬人落到网格世界上就是你在格子 4下一步去哪只跟 4 有关跟你之前是从 1 来的还是从 7 来的没关系。这个“不记仇”的性质是所有贝尔曼方程能够成立的前提。如果环境是有记忆的比如同一格子的奖励取决于你上次来过几次那整套推导就要重写。书里第 1 章末尾专门讨论了这一点别跳过。4. 顺着目录往下走四个值得亲手实现的小算法4.1 贝尔曼方程把无穷项的未来折成一个数第 2 章开头给了两个动机示例问的是同一个问题为什么不能只看即时奖励答案在网格世界里很直观——如果只看眼前站在起点往哪走都是 -1没有任何区别但走到目标格能拿 1这个好处必须通过“未来”才能体现出来。所以需要一个量把从某个状态出发、按某个策略走下去能拿到的所有奖励的折扣和压缩成一个数。这个数就叫状态值。状态值不好直接算因为它是无穷多项求和。贝尔曼方程做的事情是把无穷项变成递推当前状态的值等于这一步的即时奖励加上折扣后下一状态的值再对所有可能的下一个状态按概率加权。这个式子一写出来无穷求和就变成了一个方程组剩下的问题只是怎么解它。书里给了两种解法闭式解和迭代解。闭式解是把方程写成矩阵形式然后求逆数学上漂亮但状态一多矩阵就大到没法算。迭代解是反复用右边算左边算到数值不再变化为止这个方法才是后面所有算法的祖宗。入门阶段重点吃透迭代解闭式解知道有这么回事就行。4.2 值迭代让表格自己刷新到收敛第 4 章的值迭代就是把上面那个迭代解的思路推到最优策略上。区别在于贝尔曼方程里是对所有动作按策略概率加权值迭代里换成了直接取最大值——因为我们要找的是最好的那个动作。import numpy as np def value_iteration(num_states9, gamma0.9, tol1e-6, max_sweeps1000): v np.zeros(num_states) # 所有状态的价值先设成 0作为起点 for sweep in range(max_sweeps): delta 0.0 # 记录这一轮里最大的变化量 for s in range(num_states): q_values [] for a in ACTIONS: ns, r, done step(s, a) # 终止状态之后没有未来所以不再加 gamma * v[ns] q_values.append(r (0 if done else gamma * v[ns])) new_v max(q_values) # 贝尔曼最优方程里的那个 max delta max(delta, abs(new_v - v[s])) v[s] new_v # 原地更新下一轮直接用新值 if delta tol: # 相邻两轮几乎没变化认为已收敛 break return v, sweep values, sweeps value_iteration() print(迭代轮数:, sweeps) print(状态价值:, np.round(values, 3))这段代码有几个参数值得改着玩。gamma 控制视野调到 0.1 你会发现所有状态的价值都接近 -1因为未来被压得几乎不存在了调到 0.99起点附近的价值会明显变低因为要绕路而远处的正奖励权重变大了。tol 控制精度设得太大会提前停设得太小会白跑很多轮。max_sweeps 是保底防止因为某些写法问题死循环——这种保底在你自己写实验时是血泪经验换来的习惯。还有一个容易忽略的细节done为真时不再加未来价值。如果漏掉这个判断目标格会被算成“还能继续走”价值就会虚高收敛出来的策略可能绕着目标格转圈。这类错误不会报错只会让你得到一个莫名其妙的结果排查起来很痛苦。跑完之后你会拿到一个 9 个数的数组每个数代表“站在这一格按最优方式走到目标大概能拿多少分”。数值是从目标格往四周扩散的离得越远越负。这个梯度感就是策略的雏形——按价值大的方向走就是最优动作。4.3 蒙特卡洛与时序差分没有模型时靠采样到第 4 章为止所有算法都需要知道状态转移概率也就是“在这个格子往右走会到哪一格”。网格世界里这个概率是显然的现实任务里往往给不出来。第 5 章的蒙特卡洛方法换了个思路不问转移概率了直接按策略走很多个回合把每条轨迹的实际回报记下来用平均回报去估计状态值。这个方法的好处是简单不需要任何模型坏处是必须等一个回合结束才能算回报而且回合越长方差越大。第 6 章专门讲随机近似用随机逼近那套理论解释“为什么这种边采样边平均的做法最后能收敛”还顺带把随机梯度下降也讲了——这一章更像工具章第一遍可以先看结论证明留到第二遍。第 7 章的时序差分方法把两者的优点结合起来不用等回合结束每走一步就用“这一步的奖励加上下一状态当前的估计值”来更新当前状态的估计。这叫做自举也就是用估计去更新估计。书上把时序差分和蒙特卡洛放在一起对比一个是无偏但方差大一个是有偏但方差小这个取舍关系是后面所有算法设计的底层张力。动手的话建议先用第 5 章的蒙特卡洛方法在同一张网格世界上跑一遍再换成第 7 章的时序差分跑一遍把两者的收敛曲线画在一张图上对比。你会直观看到蒙特卡洛的曲线抖得厉害时序差分平滑很多。这个对比做一次比读十遍文字描述都管用。4.4 走到第 8 章以后把表格换成函数前面所有内容都有一个隐含假设状态价值可以存在一张表里一格一行。棋盘只有 9 格没问题可如果状态是连续的呢是图像呢表就装不下了。第 8 章做的事情是把“每个状态一个数”换成“每个状态喂进一个函数函数吐出这个数”函数的参数可以少得多。这一章会讲目标函数怎么定、优化怎么迭代、函数形式怎么选最后落到深度 Q 学习。第 9 章把优化对象从价值换成策略本身讲策略梯度最后落到那个经典的 REINFORCE 算法。第 10 章把两者组合成演员-评论家结构一个网络负责出动作一个网络负责评价好坏。到这里公式的密度会明显上升。入门阶段不需要把每一处推导都跟下来抓住三件事就够优化的目标是什么、梯度从哪来、更新时用的是哪部分样本。其余细节可以在动手跑通之后回头补。5. 新手常见问题排查五处最容易翻车的地方5.1 现象公式看得懂合上书写不出代码现象很典型一页一页读下去每一步推导都能跟上心里想“原来如此”。把书合上打开编辑器光标闪着一行都写不出来。原因在于阅读是被动的推导过程中的“显然可得”是作者替你走完的。你在读的时候产生的是理解感不是操作感两者在脑内完全是两个系统。解决的办法是把每个公式翻译成一段最笨的代码。比如贝尔曼方程就写一个双重循环外层遍历所有状态内层遍历所有动作把奖励和未来价值加起来最后赋值回去。不要追求向量化不要追求优雅先用最笨的写法把公式里的每个符号都落到一个变量上。写完再回头对照书上的矩阵形式你会突然明白那些符号为什么那样缩并。网格世界的好处就在这里九个状态跑一遍不到一毫秒你可以随便试。5.2 现象值迭代跑几十轮数字就变成很大的数或者 NaN现象是数值发散本来该收敛的价值越跑越大或者直接出现 NaN。原因通常有三个。一是漏掉了终止状态的判断目标格被当成普通格继续累积价值形成自我加分二是折扣因子设成了 1 并且环境里有环理论上回报的无穷和就不收敛三是原地更新和同步更新的写法混用了导致某些状态用到了同一轮里刚更新过的邻居值收敛性质被破坏。解决需要逐步缩小范围。先把 gamma 调成 0.5 试跑如果收敛了说明问题出在折扣或环上再打印每一轮的 delta 值看它是稳定下降还是反复横跳最后检查终止状态的判断写在哪一行是不是所有分支都覆盖到了。养成习惯每轮打印一次最大变化量这是最便宜的自检。5.3 现象状态值和动作值混着用结果对不上现象是照着公式写出来的更新算完之后策略明显是错的比如在离目标很近的格子上反而选了一个更远的方向。原因多半是把状态值和动作值搞混了。状态值是“站在这一格按某个策略走下去值多少”动作值是“站在这一格先做这个动作之后按策略走值多少”。前者是后者的加权平均后者是把第一步动作固定住之后的期望。两个量长得像含义完全不同索引维度也不一样。解决办法是给变量起清楚的名字。状态值就叫 v_state动作值就叫 q_sa数组维度写成注释贴在旁边v 是长度等于状态数的数组q 是状态数乘动作数的二维数组。写完之后做个简单验证——对每个状态把它所有动作的 q 值按策略概率加权平均应该等于 v。这个恒等式在任何正确的实现里都成立对不上就说明有一边写错了。5.4 现象一上来就翻第 9、10 章读两页就放弃现象是听说策略梯度和演员-评论家最前沿、最实用于是跳过前面直接从后面开始结果看到梯度推导就卡死。原因很直接第 9 章的梯度不是凭空来的它用的是第 2、3 章的贝尔曼方程和第 8 章的函数近似思路第 10 章的演员-评论家是把第 7 章的时序差分和第 9 章的策略梯度拼在一起。跳着读等于把地基抽掉。解决办法是老老实实按顺序走但允许“先粗后细”。第一遍把第 2 到第 4 章读到能自己写出值迭代第 5 到第 7 章读到能说清蒙特卡洛和时序差分的差别然后再进第 8 章。这个过程大概要几周但它比反复放弃、反复重启快得多。5.5 现象灰框里的证明看哭了觉得自己不配学现象是每个灰色底纹的段落都想弄懂卡在一个定理的证明上三天最后连这一章讲什么都不知道了。原因是作者在序言里就说得很清楚灰框是按兴趣选读的内容设计意图就是让主线可以顺畅读下去。你把可选内容当必读等于自己给自己加难度。解决办法是第一次通读时直接跳过所有灰框只读正文、例子和每章末尾的问答。标记一下自己最想弄懂的那一个证明等整本书第一遍过完再回来补。补的时候也别从头啃先看定理的结论讲什么、用在哪个算法的收敛性上再回去看证明步骤。数学书的正确读法从来不是逐字通读而是带着问题去查。6. 往下走三条路和一条我自己的读法把这本书第一遍读完你手上大概会有三样东西一套从问题定义到贝尔曼方程的完整推导、几个能手写出来的表格型算法、以及对“为什么有模型能解、没模型也能解”这件事的直觉。接下来往哪走取决于你是想做研究、做工程还是纯粹想把基础打牢。下面三条路可以对着走方向具体做什么建议时长把例子做厚换掉网格世界自己实现一个多房间、有随机转移的环境把值迭代、蒙特卡洛、时序差分、Q 学习都跑一遍一到两周补理论短板重点回读随机近似那一章和附录里的序列收敛弄明白步长条件为什么那样设计两到三周转向函数近似从值函数近似那一章出发用一个小型神经网络替换表格跑通深度 Q 学习再往策略梯度和演员-评论家走一个月起步第一条路最容易被低估。很多人觉得网格世界太玩具恨不得立刻上复杂环境结果在复杂环境里遇到问题时连“是不是我的更新公式抄错了”都判断不了。在简单环境里把每个算法跑对、把收敛曲线画出来、把参数改到出错再改回来这个过程能帮你建立对算法的体感后面换环境才有参照物。第二条路适合想长期做这个方向的人。表格型算法跑通不难难的是知道它什么时候会崩。步长怎么选、采样量要多到多少、估计的偏差从哪来这些问题在随机近似那一章里其实都有答案只是第一遍读的时候你还没遇到这些问题所以看不进去。带着实际跑出来的困惑回去读收获完全不同。第三条路是大多数工程场景真正的入口。但提醒一句从表格转到函数最大的变化不是代码变复杂了而是你多了一堆新的失败模式——目标网络、经验回放、学习率、梯度爆炸每一个都可能让训练不动。前面表格型算法练出来的排查能力在这里会救你很多次。最后说一个我自己的习惯。第一遍读这本书的时候我在第 3 章卡了很久贝尔曼最优方程的矩阵形式和压缩映射那部分来回看了三遍还是虚的当时觉得是自己数学不行。后来我换了个做法——把这一章所有公式全部关掉只在纸上画那张九宫格然后用最笨的方式手推了五轮值迭代把每一轮九个数字的变化都写下来。推完那一刻压缩映射到底在说什么突然就通了。从那以后我每次读这种理论书都强制自己先把书里那个贯穿全书的小例子用最笨的代码或者纸笔完整跑一遍再回去看公式。公式是用来描述那个过程的不是用来供着的。希望帮到你。本文还有配套的精品资源点击获取
企业数字化 ERP 产品动态
相关推荐
RTX 5090 跑一天 AI 耗多少电:整机功耗实测、电费核算与降耗 有位朋友上周把新卡装进机器,连跑两天模型,第一反应不是看吞吐量,而是盯着电表发呆——转得比他预想的快多了。他问我:“RTX 5090 跑一天 AI,到底要耗多少电?”这个问题看着简单,真要认真回答&a… · 2026/11/4 8:42:17
AIGC检测与降重实测:段落定位、改写强度与复检流程 这段时间我几乎把手边能测的AIGC检测工具都跑了一遍,原因很实在:不管是给甲方交稿、给内部刊物投长文,还是帮朋友看一份要提交的材料,最后卡住的往往不是内容本身,而是那句“这段读着像AI写的”。更麻烦的是࿰… · 2026/11/4 8:42:17
Xing4.0-29B-A4B纯国产MoE大模型本地部署实战:昇腾与消费级显卡选型指南 1. 这个模型到底什么来头,为什么值得单独写一篇Xing4.0-29B-A4B 这个模型名字第一次出现在我时间线上的时候,我正蹲在机房调一台昇腾推理服务器的显存分配策略。当时第一反应是:29B 总参数、A4B 激活,这不就是典型的 MoE 稀疏架构… · 2026/11/4 8:42:17
键盘记录技术在软件测试中的合规应用与实践 1. 项目背景与核心议题 在软件测试领域,键盘记录技术作为一种常见的用户行为采集手段,长期以来被广泛应用于产品体验优化、缺陷复现等场景。然而随着欧盟《通用数据保护条例》(GDPR)和我国《个人信息保护法》的相继实施,这项技术的使用边界正… · 2026/11/4 9:29:33
校园体育馆智能预约系统设计与实践 1. 项目背景与核心价值 校园体育馆作为师生日常锻炼的重要场所,长期存在"预约难""空置率高"的矛盾现象。传统预约系统往往采用先到先得的简单规则,导致热门时段秒光、冷门时段闲置,既无法满足师生真实需求,又… · 2026/11/4 9:29:33
放弃Claude Code转用Pi:harness与agent的AI编程选型指南 1. 这场“换工具”的讨论到底在聊什么最近半年,AI Coding 圈子里的一个明显变化是:越来越多人在公开场合说自己把 Claude Code 换掉了,转去用 Pi。这个说法第一次听到会觉得有点反直觉——Claude Code 背靠的模型能力一直是第一梯队ÿ… · 2026/11/4 9:29:33
硬件工程师面试题集:从Setup/Hold到亚稳态,构建电路时间思维 简介:这份硬件工程师面试题集面向准备求职笔试与面试的硬件工程师、电子相关专业应届生及转岗人员,围绕数字电路、嵌入式系统、电子线路、通讯、微电子与半导体等核心方向整理常见考点与参考答案,帮助读者系统梳理知识框架、查漏补缺。内容涵… · 2026/11/4 9:29:33
键盘记录技术在测试中的合规应用与法律风险防范 1. 项目背景与核心矛盾键盘记录技术作为软件测试领域的基础工具,长期以来在质量保障环节扮演着重要角色。这种能够记录用户键盘输入行为的技术手段,在自动化测试、用户行为分析和系统健壮性验证等方面具有不可替代的价值。然而随着欧盟GDPR、美国CCPA以及… · 2026/11/4 9:29:33
哈希表核心原理与LeetCode经典题解 1. 哈希表基础与算法训练营Day-6全解析 作为程序员面试必考的数据结构,哈希表在实际工程中的应用频率仅次于数组和链表。今天我想结合代码随想录训练营第六天的内容,系统梳理哈希表的核心原理和四道经典LeetCode题解。这些题目覆盖了哈希表90%的典型应用… · 2026/11/4 9:28:32
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38
AI辅助技术栈评估:提升研发决策效率60% 1. 项目背景与核心价值技术决策一直是研发团队面临的重大挑战。随着技术生态的快速演进,技术栈的选择、维护和迭代变得愈发复杂。我们团队在过去两年里,先后经历了三次重大技术栈迁移,每次都需要投入大量人力进行技术评估和风险分析。直到去年… · 2026/11/4 0:00:17
从生成Token到直接决策:Jev如何重塑AI Agent工程实践 1. 从"生成文字"到"拍板决策":Jev 到底在解决什么问题大多数人第一次接触大模型,脑子里建立的模型是"输入问题、输出文字"。你问它今天天气怎么样,它给你一段描述;你让它写个周报,它给你… · 2026/11/4 0:00:17
32G统一内存跑大模型:内存账、TPS实测与端云分流 想在一台 32G 统一内存的小主机上把大模型跑成"日常可用",这件事我前后折腾了小半年。标题里说的这台 Mac mini M6,是我们这次讨论的目标平台,具体到手规格以实物为准;但下面这套推算方法和实测思路,对任何统… · 2026/11/4 0:00:17
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38