第301篇 强化学习基础——马尔可夫决策过程
前面聊了监督学习(检测、分割、里程计)和无监督学习的基础。现在进入一个新的领域:强化学习(Reinforcement Learning, RL)。
强化学习和监督学习的根本区别在于:监督学习是"告诉你答案让你学",强化学习是"让你自己试错,通过奖惩信号来学"。机器人领域很多任务天然适合强化学习——走路、抓取、导航,这些技能很难用标注数据教会,但可以通过试错来掌握。
什么是强化学习
强化学习的核心设定是这样的:一个智能体(agent)在一个环境(environment)中,通过执行动作(action)来改变环境的状态(state),并从环境中获得奖励(reward)。agent的目标是找到一套行为规则(策略,policy),使得长期累积奖励最大化。
用一个机器人的例子来理解。一个四足机器人(agent)在地面上(environment),它控制关节电机(action),改变自身的姿态和位置(state),目标是往前走。每走一步获得正奖励,摔倒获得负奖励。通过大量的尝试,机器人逐渐学会怎么协调关节来稳定行走。
这个框架的关键要素可以用一个缩写来记忆:MDP(Markov Decision Process,马尔可夫决策过程)。
MDP的五元组
MDP用五个元素来形式化一个强化学习问题:(S, A, P, R, γ)。
S是状态空间,所有可能的状态的集合。对机器人来说,状态可能是关节角度、角速度、IMU数据、相机图像等。状态的定义直接决定了问题的难度——状态选得不好,再好的算法也白搭。
A是动作空间,agent可以执行的所有动作的集合。可以是离散的(前进、后退、左转、右转),也可以是连续的(关节力矩从-10Nm到10Nm的任意值)。机器人控制中大多是连续动作空间,因为电机的输出是连续量。
P是状态转移概率,P(s'|s,a)表示在状态s执行动作a后转移到状态s'的概率。这个概率描述了环境的动态特性。在确定性环境中,P是0或1;在随机环境中(比如有打滑的机器人),P是一个概率分布。
R是奖励函数,R(s,a,s')表示从状态s执行动作a到达状态s'后获得的即时奖励。奖励函数的设计是强化学习中最考验功底的部分——设计不好会导致agent钻空子(reward hacking)。
γ是折扣因子,取值0到1之间。它决定了未来奖励的权重。γ=0.99意味着100步后的奖励权重是0.99^100≈0.37。γ太小,agent只看眼前利益;γ太大,训练会不稳定。机器人控制中一般取0.99到0.999。
马尔可夫性质
MDP的名字里有个"马尔可夫",这指的是马尔可夫性质:未来只跟当前状态有关,跟历史无关。
数学表达是:P(s_{t+1}|s_t, a_t, s_{t-1}, a_{t-1}, ...) = P(s_{t+1}|s_t, a_t)。
这个假设在现实中往往不严格成立。比如机器人的电池电量会影响未来的性能,但如果你不把电量包含在状态里,当前状态就不包含这个信息。解决办法是把状态定义得足够丰富,把所有影响未来的因素都包含进去。
在实际项目中,马尔可夫性质是否成立取决于你怎么定义状态。如果状态包含了足够的信息(充分统计量),那马尔可夫假设就是合理的。这也是为什么状态设计是强化学习中最重要的环节之一。
策略与价值函数
策略π是从状态到动作的映射。确定性策略a=π(s)直接给出动作,随机策略π(a|s)给出每个动作的概率。
价值函数V(s)表示从状态s出发,按照策略π行动,能获得的期望累积奖励。它是评估一个状态"好不好"的指标。比如在下棋的例子中,V(s)高的状态意味着当前棋面对你有利。
动作价值函数Q(s,a)表示在状态s执行动作a,然后按照策略π行动,能获得的期望累积奖励。它不仅评估状态,还评估在特定状态下采取特定动作的价值。Q函数在离散动作空间中特别有用——你可以比较所有动作的Q值,选最大的那个执行,这就是ε-greedy策略的基础。
优势函数A(s,a) = Q(s,a) - V(s),表示动作a相对于平均水平的好坏。A>0说明这个动作比平均好,A<0说明比平均差。优势函数在Actor-Critic方法中非常重要,用它来更新策略可以减少方差。
# 价值函数的Bellman方程
# V(s) = E[R(s,a) + γ * V(s')]
# Q(s,a) = E[R(s,a,s') + γ * Q(s', a')]
# 其中 a' ~ π(·|s')
这两个函数之间的关系是强化学习算法的核心。基于价值的方法(如DQN)学习Q函数,从中推导出策略。基于策略的方法(如策略梯度)直接优化策略。Actor-Critic方法两者结合——Actor是策略网络,Critic是价值网络。
贝尔曼方程与最优策略
贝尔曼方程是强化学习的数学基础。它把价值函数分解为即时奖励加上下一步价值的折扣值,形成了一个递归关系。
最优策略π是在所有策略中能获得最大累积奖励的那个。对应的最优价值函数V(s)和Q*(s,a)满足贝尔曼最优方程,把max操作替代了期望。
# 贝尔曼最优方程
# V*(s) = max_a { R(s,a) + γ * Σ P(s'|s,a) V*(s') }
# Q*(s,a) = R(s,a) + γ * Σ P(s'|s,a) max_a' Q*(s', a')
# π*(s) = argmax_a Q*(s,a)
对于状态空间和动作空间都比较小的离散问题,可以用动态规划直接求解最优策略。价值迭代(Value Iteration)是反复用贝尔曼最优方程更新V值,直到收敛。策略迭代(Policy Iteration)是交替做策略评估(计算当前策略的V值)和策略改进(根据V值贪心更新策略),直到策略不再变化。两种方法都能保证收敛到最优策略,但计算量随状态空间指数增长。在机器人领域,状态空间通常是连续的、高维的(想想一个7自由度机械臂的状态空间是14维的:7个关节角度+7个关节角速度),动态规划不可行,必须用函数近似(比如神经网络)来估计价值函数或策略。这就是深度强化学习要解决的问题。
面试要点
面试中聊强化学习基础,有几个点要能讲清楚。
MDP和监督学习的区别。监督学习是给定输入-输出对,学习映射关系。强化学习没有标注数据,agent必须通过与环境交互来学习。奖励信号是稀疏的、延迟的——一个动作的好坏可能要很多步之后才能看出来。这导致了信用分配问题(credit assignment):怎么把最终的奖励归因到每一步的动作上?
奖励设计的坑。奖励函数设计不好,agent会找漏洞。经典案例:在一个跑步机器人任务中,agent发现原地转圈比往前跑能获得更高的奖励(因为奖励函数只考虑了速度大小没考虑方向)。另一个案例是在一个收集硬币的任务中,agent发现反复捡起放下同一个硬币能刷更多奖励,而不是去收集新的硬币。这种reward hacking问题在实际项目中非常常见。解决办法包括:加入约束条件、用多目标奖励组合、或者干脆换用模仿学习(让agent看专家怎么做,而不是告诉它目标是什么)。面试时能举出具体例子会加分。
POMDP的问题。现实中很多机器人场景不满足马尔可夫性质——当前观测不包含全部信息。比如机器人在迷宫中导航,传感器只能看到局部环境,无法看到整个地图。这时候状态不是完全可观测的,问题变成了POMDP(部分可观测马尔可夫决策过程)。解决办法是用RNN/LSTM编码历史观测序列,或者用注意力机制维护一个"信念状态"。这在机器人导航中是非常实际的问题。
维数灾难。状态空间维度增加时,需要的样本量指数增长。一个10维状态空间用100个网格点离散化就是100^10 = 10^20个状态,根本没法遍历。这就是为什么需要深度强化学习——用神经网络来近似价值函数或策略,避免显式遍历所有状态。
给你的建议
入门强化学习,建议先学Sutton和Barto的教材"Reinforcement Learning: An Introduction"。这本书是RL领域的圣经,免费电子版在官网上能下载。前几章把MDP、动态规划、蒙特卡洛方法讲得非常清楚。
然后上手跑代码。OpenAI的Gymnasium(原Gym)是练习RL算法的标准平台。从CartPole这种简单环境开始,实现一个DQN,跑通之后再做更复杂的任务。机器人相关的可以用MuJoCo或者Isaac Gym。
面试时,强化学习的考察深度取决于岗位。如果是机器人算法岗,MDP、策略梯度、Actor-Critic这些基础概念必须掌握。如果是研究岗,还需要了解PPO、SAC等具体算法的细节。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)