尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

序贯决策与MDP:从贝尔曼方程到强化学习落地

序贯决策与MDP:从贝尔曼方程到强化学习落地 记不清是哪一年了我在一个零售补货的项目里第一次被序贯决策这四个字结结实实地上了一课。当时团队里有个模型单点预测精度做得很漂亮每一期算出来的补货量单独看都合理得挑不出毛病可三个月跑下来总成本比老掉牙的经验规则还高。复盘时才发现问题根本不在预测准不准而在于我们把每一次补货都当成了一次独立的、互不相干的决策在优化完全没有考虑今天多进的一箱货会如何改变明天的库存状态、占用仓位、影响后天该不该补的判断。这就是序贯决策要解决的核心矛盾当一连串决策之间存在因果和状态上的耦合时每一步局部最优和整条链路全局最优往往是两回事。这篇内容我想把序贯决策这个概念从头到尾掰开揉碎讲清楚它适合做算法、做运营、做量化、做供应链、做产品策略的朋友也适合任何需要在一段时间里连续拍板、并且拍板的后果会滚雪球的人。我会从直觉、数学、求解方法、落地踩坑到真实场景一路讲下来尽量不端着能上手的部分我会给出可以直接抄的思路和参数。1. 序贯决策到底特别在哪一步一步为什么不能各管各的1.1 从这次选哪个到这一串怎么走的视角切换普通的一次性决策你面对的是一个静态的选择题选项摆在那里你评估收益挑最大的就行选完就结束了。序贯决策完全不是这个逻辑它面对的是动态过程你的每一次选择都会改变你下一步所处的局面而不同的局面又对应着完全不同的可选动作集合。换句话说决策和决策之间是有记忆、有传递、有累积效应的。你今天的动作决定了你明天的起点明天又决定了后天。我常拿下棋来打比方一个只想着这步能不能吃掉对方一个子的棋手和一个想着这步之后我的整体阵型会不会崩的棋手走的根本不是同一盘棋。前者是单步贪心后者才是序贯思维。很多项目失败不是算法不够先进而是从一开始就用单步的框架去套一个本质上是序贯的问题方向错了后面再努力也是南辕北辙。1.2 序贯决策的三个支柱状态、动作、回报要把序贯决策讲明白绕不开三个最基本的概念。状态state是对当前局面的描述它要包含做出下一步决策所需的全部关键信息既不能少得让决策失明也不能多到把噪声全包进来。动作action是你在当前状态下能做的选择这里特别容易被忽略的是动作的可行性是随状态变化的——库存为零时你没法卖货预算花完时你没法继续投放。回报reward是你执行动作后得到的即时收益或惩罚它可以是成本、是利润、是点击、是健康指标。三者连起来构成了序贯决策的基本骨架在某个状态下选一个动作得到一份回报然后状态发生转移进入下一轮。真正让这件事变复杂的是最后那个转移环节它往往带有随机性同样一个动作在不同运气下可能把你带到不同的未来状态所以序贯决策天生要和不确定性打交道。1.3 为什么贪心在序贯场景里经常是错的很多人第一次接触序贯决策时会有一个很自然的反应既然每步都选当下收益最高的动作加起来不就是全局最优了吗这个直觉在绝大多数序贯问题里都是错的而且错得很隐蔽。原因在于有些动作当期回报很低甚至为负但它能把你带到一个未来收益极高的状态这叫投资型动作反过来有些动作当期回报诱人却会把你推向一个死胡同式的状态这叫短视型陷阱。库存场景里提前囤货当期看是占用了现金、拉高了持有成本但它规避了未来缺货的高额损失推荐场景里一直推用户最爱看的同质内容当期点击很漂亮但用户很快会审美疲劳长期留存反而崩盘。贪心策略把每一步的因果链切断只看眼前的数字自然就体会不到今天忍一忍为了明天这种跨期权衡的价值。理解序贯决策本质上就是学会在时间维度上做这种权衡。2. 把问题写成数学马尔可夫决策过程与贝尔曼方程2.1 MDP 五元组怎么落到纸面序贯决策最主流的数学语言叫马尔可夫决策过程Markov Decision ProcessMDP它把一个序贯问题抽象成五个要素状态集合 S、动作集合 A、状态转移概率 P、回报函数 R、折扣因子 γ。写成五元组就是 (S, A, P, R, γ)。这里最需要理解的是那个马尔可夫到底意味着什么它的核心假设是下一个状态只依赖于当前状态和当前动作跟更早的历史没有直接关系。这个假设看起来很霸道但它是整个理论能算得动的地基。实际落地时我们做的绝大部分特征工程其实都是在构造状态目的就是让这个马尔可夫性尽可能成立——把用户最近的行为序列压成一个足够有信息量的状态表示把库存的历史出入库汇总成当前水位。状态设计得好不好直接决定 MDP 这套框架能不能用这一点后面我还会专门展开讲坑。2.2 贝尔曼方程的直觉今天的价值等于今天的回报加明天的折扣价值有了 MDP接下来就要定义什么叫好。我们引入价值函数V(s)它表示从状态 s 出发、按照某个策略一直走下去未来能拿到的累积回报的期望。有了价值函数最优决策就有了精确的含义不是选即时回报最大的动作而是选那个即时回报加上它把你带去的未来状态价值之和最大的动作。这句话的数学形式就是贝尔曼方程它是整个序贯决策领域里最重要的一个等式我把它写成最朴素的样子某个状态的价值等于在这里选最优动作的即时回报加上折扣后的下一状态价值。你可以把它理解成一种动态的回溯——今天的价值依托于明天的价值明天的依托于后天一路推到终点。贝尔曼方程的妙处在于它把一个跨越很多期的优化问题拆成了一层一层只涉及当前和下一期的递归关系让原本无从下手的长链条变得可以一步步求解。2.3 折扣因子 γ 到底在调节什么折扣因子 γgamma是个取值范围在 0 到 1 之间的数它的作用是把未来的回报打折。γ 越接近 0决策者越短视只在乎眼前γ 越接近 1越有耐心愿意为远期收益买单。很多新手会觉得这只是个技术参数随手设个 0.9 就完事其实它背后是鲜明的业务取向。如果 γ 太小模型会变得极度急功近利宁愿今天拿一块钱也不愿意为明天拿一百块铺路这在需要长期经营的场景里是致命的如果 γ 太大远期的不确定性被放大方差变大学习过程会变得很不稳定而且当 γ 等于 1 且过程没有终止时回报总和可能发散数学上就出问题了。我的经验是先问业务这个决策的规划和考核周期大概多长如果一期代表一天、业务关注季度效果那 γ 大概落在 0.95 到 0.99 之间比较合适如果一期代表一年、只关心三五年那 γ 就该调低。γ 不是拍脑袋的它应该和你的决策周期、业务耐心程度对齐。2.4 策略、价值函数、Q 函数三者是什么关系再理清三个经常被搞混的概念。策略π 是一张状态到动作的映射表它规定在什么局面下该做什么这就是我们最终想要的东西。价值函数V(s) 衡量的是在状态 s 下按某个策略走能拿多少分它评价的是状态。而Q 函数Q(s, a) 衡量的是在状态 s 下先执行动作 a、之后再按某个策略走能拿多少分它评价的是状态和动作的组合。为什么要有 Q 函数因为光有 V 还不够方便地选动作——要比较两个动作你得分别算它们各自把状态带到哪里、那边价值多高而 Q 函数直接把每个状态-动作对的价值摆在你面前取个最大值就完事了。理解了这层关系后面看各种求解算法就不会觉得是在看天书算法无非是在用不同的手段去估计 V 或者 Q然后据此改进策略。3. 求解的三条路动态规划、蒙特卡洛、时序差分3.1 值迭代和策略迭代的手算过程当模型完全已知也就是 P 和 R 都清楚的时候最经典的方法是动态规划具体分为值迭代和策略迭代。值迭代的思路很朴素先把所有状态的价值初始化为 0然后不断地用贝尔曼方程去更新每个状态的价值直到价值不再明显变化。我拿一个极简的例子走一遍能让你看得更清楚。假设有两个状态 s0 和 s1两个动作 a 和 b。在 s0 执行 a 得到回报 1 并转到 s1执行 b 得到回报 0 停在 s0在 s1 执行任何动作得到回报 0 并终止。取 γ 为 0.9。第一轮迭代所有价值都是 0V(s1) 等于 0终止态V(s0) 取 max(1 加 0.9 乘 V(s1), 0 加 0.9 乘 V(s0))即 max(1, 0) 等于 1。第二轮V(s0) 再算一遍还是 1收敛了。结论是在 s0 该选 a。这个例子简单到几乎没有悬念但它把值迭代的骨架完整呈现了初始化、用贝尔曼方程反复扫描、直到收敛、最后导出最优动作。策略迭代则是另一条路——先固定一个策略评估它的价值再基于价值把策略改好如此交替通常收敛需要的轮数更少但每一轮更贵。3.2 蒙特卡洛不靠模型靠真金白银地跑现实里 P 和 R 往往不知道你没法直接套动态规划这时候蒙特卡洛方法就登场了。它的思路很直接既然我算不出期望那我就多跑几遍用样本平均值去逼近期望。你从某个状态出发按照当前策略完整地走完一整个回合记下沿途每个状态实际拿到的累积回报反复跑很多回合之后把同一个状态的所有样本回报平均一下就得到了它的价值估计。蒙特卡洛最大的优点是它不需要知道环境的转移规律只要你能模拟或者能观察到真实的完整轨迹就行。它的缺点也很明显必须等到一个回合彻底结束才能更新如果回合特别长或者问题根本没有自然的终止点它就很难用同时它的方差通常比较大因为一条轨迹上的随机性会全部累加进来。我通常把蒙特卡洛用在那些回合制特征明显的场景比如一局游戏、一个完整的会话而对那种永不结束的连续流任务则会倾向别的方法。3.3 时序差分与 Q-Learning走一步就能学时序差分Temporal DifferenceTD方法巧妙地取了动态规划和蒙特卡洛的中间路线。它不像蒙特卡洛那样要等到回合结束也不像动态规划那样要求完整模型而是走一步、看一眼实际情况、马上更新。它用一个估计去更新另一个估计这就是所谓自举bootstrapping的思想。最著名的代表是Q-Learning它的更新规则可以这样理解把当前的 Q 值和即时回报加上下一状态最大 Q 值乘折扣这个目标做比较按照两者的差乘上一个学习率来修正当前估计。这个差就是所谓的 TD 误差学习率控制一次修正多少。Q-Learning 的一个漂亮性质是它属于离线策略off-policy意思是它学习的目标是最优策略而实际用来探索环境的行为策略可以不一样这使得它可以一边大胆试错一边学最优解。实作中学习率通常从 0.1 左右起步并逐渐衰减折扣和前文一样依业务定。3.4 三条路的适用边界对照为了让你选方法时心里有数我把三条路线放到一张表里对照这张表是我这些年做方案时反复参考的实际选择时最先看的就是有没有模型和回合是不是有限这两列。方法是否需要环境模型是否需等回合结束典型代表主要短板适合场景动态规划需要完整 P 和 R不需要值迭代、策略迭代现实里模型常拿不到状态空间小、模型可精确建模蒙特卡洛不需要需要首次访问 MC、每次访问 MC方差大、必须终止回合制游戏、会话语义时序差分不需要不需要Q-Learning、SARSA自举带来偏差、调参敏感连续流任务、在线学习我一般的判断顺序是这样先看能不能把状态空间控制到几十万以内并且模型可估能的话直接上动态规划又快又准如果实在没有模型而且任务天然是回合制的用蒙特卡洛绝大多数工程场景其实是第三条路用 TD 类方法在真实交互里边跑边学配合经验回放之类的手段来稳定训练。4. 真正落地时会踩的那些坑4.1 状态设计太大导致维度爆炸我见过太多次这样的翻车为了让状态信息充分工程师把能塞的特征全塞进去——用户最近一百次点击、商品几十个属性、时间精确到秒结果状态空间直接指数爆炸别说训练连存 Q 表都存不下。序贯决策里状态设计是一门取舍的艺术核心原则是够用就好、能压则压。我的做法是先列一份清单问自己每个特征它是否真的会改变最优动作如果两个不同的取值下最优动作永远一样那这个特征对决策就没价值可以砍掉。剩下的再做聚合和离散化把连续的数值分桶、把稀疏的类别合并、把长序列压成统计量。还有一个常见手段是特征降维用嵌入或者主成分把高维状态投影到低维表示既降了复杂度又保留了大头信息。记住状态不是越全越好而是越对着决策有用越好塞进去的每一维都在消耗你的样本效率和计算预算。4.2 奖励函数写错时的典型症状奖励函数是序贯决策里最容易写错、又最难察觉的地方。它写错的症状通常不是模型完全不动而是模型以一种你没预料到的方式钻空子。我总结了几种高频病症。第一种是奖励塑形过度你为了让模型学得快一点手工加了一堆中间奖励结果它学会了刷这些中间奖励而不去完成真正的目标比如为了拿活跃度奖励疯狂给用户推无关的高频内容。第二种是稀疏奖励陷阱真正的成功回报只在很后面才出现前面全是零模型在巨大的动作空间里根本撞不到正反馈学习几乎停滞这时候需要谨慎地引入引导性奖励或者做分层。第三种是量纲失衡不同来源的回报没有归一化某个量级大的项直接把其他项淹没了模型只盯着那一项优化。检查奖励函数我最常用的办法是假设模型是个毫无道德底线的坏蛋它会怎么最大化这个分数如果答案是你不想看到的行为那奖励就写错了。4.3 探索与利用一直薅当前最优是要出事的序贯决策里有个绕不开的张力叫探索与利用。利用是选你目前认为最好的动作来收割收益探索是选一些看起来不咋样、但没准藏着惊喜的动作来收集信息。如果只顾利用你会被早期的偶然估计锁死在一个次优选择上永远发现不了更好的路如果只顾探索你就在不停地浪费机会收益惨淡。经典的折中办法有几种ε-贪心是以一个小概率 ε 随机选动作、其余时候选当前最优简单好实现ε 通常从较大值逐渐衰减上置信界UCB是给那些尝试次数少的动作加一个不确定奖励鼓励系统去碰它们汤普森采样则是从动作价值的后验分布里抽样再选最大天然地平衡了两者。我在实际项目里的体会是探索这件事必须和业务风险一起权衡探索可以但别拿核心转化路径去做探索更多在边角流量上做实验这样既攒了数据又不至于把主营收搭进去。4.4 离线评估为什么这么难以及怎么绕学的策略到底好不好这件事在序贯决策里评估起来比监督学习难得多。监督学习里你有标注预测错了对答案就行序贯决策里你只能看到按老策略执行后发生了什么而你新策略会去到的状态历史上根本没被访问过这就是所谓的分布偏移。直接拿新旧策略在历史数据上的表现对比会被数据幸存者偏差严重误导。绕开的思路有两条一条是做离线策略评估用重要性采样之类的技术给历史样本重新加权估计新策略的表现但权重容易爆炸、方差极大需要做截断另一条更稳妥是在线做小流量实验把新策略放在一小部分流量上跑用真实反馈来验证同时用安全约束保证它不会把关键指标拉崩。我个人的原则是离线评估只能用来做粗筛和排除明显糟糕的候选真正上线前一定要有在线小流量兜底两者缺一不可。5. 不同领域里序贯决策长什么样5.1 库存与补货最经典的序贯问题库存补货是序贯决策的教科书级场景。单期的报童模型已经算是简化的序贯问题了真正的多期库存里你每一期决定进多少货需求随机到来没卖掉的变成下期库存并产生持有成本缺货则损失订单和口碑。这里的核心权衡就是提前期和不确定性进多了压资金、进少了丢销售而且这个影响是跨期累积的。把库存水位当作状态把进货量当作动作把持有成本加缺货惩罚当作负回报问题就自然成了一个 MDP。我做过的一个项目里用了带提前期的 MDP 建模之后相比原来那种预测需求再乘个安全系数的经验规则在同等服务水平下把总库存降了接近两成。关键不在于模型多花哨而在于它显式地把今天的决策影响明天的状态这件事建模了进去而经验规则往往只看当期。5.2 推荐与内容分发别把用户喂到审美疲劳推荐系统表面看是给每次曝光挑内容深一点看也是序贯的因为用户的兴趣是被历史推荐塑造出来的。你一直推同一个品类短期点击率很稳但用户的兴趣分布会逐渐坍缩长期留存反而下降。把用户兴趣表示成状态把推荐哪条内容当作动作把点击、停留、以及后续留存当作回报就构成一个序贯推荐问题。这里最难的是状态里要体现用户已经看了什么、还剩多少耐心这类不可直接观测的心理量实践中常用序列模型来构造这个状态表示。我印象很深的一次调优就是把短期点击和长期留存的回报按折扣组合起来让模型别那么急功近利结果短期点击略降但周留存有明显改善长期算总账反而更划算。这就是折扣因子在业务上的直接体现。5.3 医疗治疗路径每一步都在影响下一步慢性病和肿瘤治疗的方案调整是典型的序贯决策而且是个高风险、高不确定性的版本。医生要根据患者当前的身体指标、对上一阶段治疗的反应来决定下一阶段换不换药、加不加量、要不要手术。每一次决定都会改变患者的身体状态进而影响后续所有选项。这个领域的回报设计极其讲究既要考虑短期指标改善又要考虑长期生存和生活质量还得把副作用纳入惩罚。序贯决策在这里的价值是帮助把复杂的多阶段权衡系统化但必须强调这类应用永远只能作为辅助参考最终决策权在专业医生手里而且要用最保守的方式去评估、去约束绝不能拿真实患者去盲目试错。5.4 广告出价与预算分配钱要花在刀刃上在线广告的预算分配和出价是序贯决策的又一个高价值战场。广告主手里有一笔日预算要在一天内分散投给很多次曝光机会每次出多少价直接决定了你拿到哪些流量、花掉多少钱、剩下多少钱给后续机会。如果把预算当作状态的一部分把出价当作动作把转化价值减去成本当作回报这就成了一个带资源约束的序贯问题。难点在于节奏控制一股脑在早上把预算花光可能错过了晚上转化率更高的黄金时段出价太保守又会抢不到量。实践中通常用价值函数去估计此刻剩余预算下未来还能产生多少价值再据此反推出价这套逻辑和动态规划的思路是一脉相承的。我见过不少团队一开始用简单规则分配预算上了序贯建模之后同样预算下的转化成本能降一到两成。6. 我自己理解序贯决策的一点框架6.1 先问清楚三件事决策频率、反馈延迟、状态可观性每次接手一个新问题我不会急着套算法而是先老老实实回答三个问题。第一个是决策频率你多久拍一次板一天一次和一分钟一次适用的方法和工程架构完全不同。第二个是反馈延迟做完决策之后多久能看到回报延迟越长学习越难因为回报和你很多步之前的动作之间的因果链被拉得很长这时候往往需要设计更密集的信号或者用模型来补。第三个是状态可观性你能否真实观测到自己需要的全部状态很多场景里关键状态是隐藏的比如用户的真实意图、系统的真实负载这时候就要引入对隐藏状态的估计。这三个问题回答清楚了方法选型基本就水到渠成选错方法的团队十有八九是这三件事没想明白就开始写代码了。6.2 规模小的时候就别硬上强化学习这一点我特别想强调。序贯决策不等于强化学习强化学习只是求解序贯决策的一大类方法。如果你的状态空间只有几百上千个、转移规律也大致能估出来那老老实实写动态规划、甚至手工推一推策略往往比搭一套复杂的强化学习系统更快、更稳、更可控而且结果可解释出问题也查得动。我见过为了追热点把简单库存问题硬做成深度强化学习的案例训练半天不稳定最后还不如一张算好的表格策略。判断标准其实很简单能枚举、能估算、能显式求解的就别上采样学习只有当状态空间大到无法枚举、模型完全不可得、又必须从交互中学的时候强化学习才真正体现出它的价值。工具要匹配问题规模杀鸡别用牛刀。6.3 从规则到学习的渐进路线真正稳妥的落地路径我一般是这么走的。第一天从规则策略起步用人类经验先跑出一个能用的基线这套基线同时是你后续所有改进的对照基准。第二步做离线学习用历史数据训练价值估计或者策略做大量的离线评估、离线回放把明显不靠谱的候选筛掉。第三步才进入在线小流量把最看好的策略放到一小部分流量上跑加好安全护栏和熔断机制。第四步是逐步放量只有小流量验证稳定、监控指标健康才一点点扩大比例。这条路线看起来慢但每一步都在给你兜底出事的概率远低于那种直接all in 上线然后爆炸的做法。序贯决策本身就是关于如何一步步稳扎稳打的学问它的落地方式也应该体现这种哲学。讲了这么多最后分享一个我自己反复验证过的小技巧接手任何一个连续决策问题先用一张纸把状态-动作-回报-转移四栏画出来填不满说明你还没想清楚填得太满说明你在自找麻烦。这张纸比任何算法都更能帮你判断自己面对的到底是不是一个序贯问题以及它到底难在哪。序贯决策这东西说到底是一种在时间维度上对自己负责的思维方式把今天的账和明天的账连起来算很多原本看着纠结的选择会一下子豁然开朗。
返回列表