今天我们不再局限于概念基础,而是深入到驱动现代人工智能系统的算法核心 —— 从理解强化学习的定义,迈向掌握它的实际运作原理。 |文末点击阅读原文查看网页版| 更多专栏文章点击查看:
LLM 架构专栏
大模型架构专栏文章阅读指南
Agent系列
强化学习系列
欢迎加入大模型交流群:加群链接 https://docs.qq.com/doc/DS3VGS0NFVHNRR0Ru#
公众号【柏企阅文】
知乎【柏企】
个人网站:https://www.chenbaiqi.com
基于价值的方法,是强化学习发展历程中的首个主要算法范式。它蕴含着一个深刻的见解:当智能体能够精准把握处于不同状态的价值时,最优行为便会自然涌现。这一看似简单的原则,却为从博弈人工智能到机器人控制系统等众多领域提供了强大的动力。
价值主张:为何价值至关重要
强化学习的核心在于做出明智的决策。但怎样的决策才称得上 “明智” 呢?答案在于其长期后果。基于价值的方法通过评估处于特定状态或采取特定行动的益处来解决这个问题,这种益处并非仅着眼于即时奖励,还涵盖了后续的累积奖励。
这些方法体现了一个基本的人类认知:我们做决策时,考虑的不仅仅是当下的结果,还有它们将把我们带向何方。
有两个关键函数构成了基于价值的强化学习的数学支柱:
- 状态价值函数(V(s)):从状态 s 开始并遵循策略 π 之后的预期回报。
- 动作价值函数(Q(s,a)):从状态 s 开始,采取动作 a 并遵循策略 π 之后的预期回报。
这些函数蕴含着一个关键理念:你所处状态的价值取决于接下来会发生什么,而接下来发生的事又取决于再之后的情况…… 如此延伸至未来。
数学架构:贝尔曼方程
贝尔曼方程之于强化学习,就如同牛顿定律之于物理学,是支配系统演变和行为的基本原理。它以数学家理查德·贝尔曼的名字命名,通过未来值来表达当前值,建立起一种递归关系,捕捉了决策问题的序列性本质。
对于状态价值函数 V(s),贝尔曼方程表述如下:
对于动作价值函数 Q(s,a),贝尔曼方程表述如下:
这些方程之所以强大,是因为它们将现在与未来联系起来 —— 当前的价值等于即时奖励加上未来所处状态的折扣价值。这种递归结构为系统性地思考长期后果搭建了数学框架。
贝尔曼方程不仅是优雅的数学理论,更是解决跨领域复杂决策问题的算法基础。
从方程到算法:动态规划
动态规划方法将贝尔曼方程的理论框架转化为用于寻找最优策略的实用算法。这些技术假定对环境有完全的了解(转移概率和奖励),通过迭代改进价值估计直至收敛。
这种方法产生了两种基础算法:
策略评估:了解当前策略
策略评估用于计算给定策略的状态价值函数。从初始估计开始,它根据贝尔曼方程反复更新每个状态的价值,直至收敛。
def policy_evaluation(policy, env, discount_factor=0.9, theta=0.00001):
"""
给定环境和环境动态的完整描述,评估一个策略。
参数:
policy: 形状为 [S, A] 的矩阵,表示策略。
env: OpenAI环境。env.P 表示环境的转移概率。
env.P[s][a] 是一个转移元组列表 (prob, next_state, reward, done)。
discount_factor: 伽马折扣因子。
theta: 一旦所有状态的价值函数变化小于 theta,我们就停止评估。
返回:
长度为 env.nS 的向量,表示价值函数。
"""
V = np.zeros(env.nS)
while True:
delta = 0
for s in range(env.nS):
v = 0
for a, action_prob in enumerate(policy[s]):
for prob, next_state, reward, done in env.P[s][a]:
v += action_prob * prob * (reward + discount_factor * V[next_state])
delta = max(delta, np.abs(v - V[s]))
V[s] = v
if delta < theta:
break
return V
策略改进:寻找更优策略
策略改进利用价值函数,通过相对于价值函数采取贪婪行动来生成更优的策略。
def policy_improvement(env, policy_eval_fn=policy_evaluation, discount_factor=0.9):
"""
策略改进算法。迭代评估并改进策略,直到找到最优策略。
参数:
env: OpenAI环境。
policy_eval_fn: 策略评估函数,接受 3 个参数:policy, env, discount_factor。
discount_factor: 伽马折扣因子。
返回:
一个元组 (policy, V)。
policy 是最优策略,一个形状为 [S, A] 的矩阵,其中每个状态 s 包含对动作的有效概率分布。
V 是最优策略的价值函数。
"""
policy = np.ones([env.nS, env.nA]) / env.nA
while True:
V = policy_eval_fn(policy, env, discount_factor)
policy_stable = True
for s in range(env.nS):
current_action = np.argmax(policy[s])
action_values = np.zeros(env.nA)
for a in range(env.nA):
for prob, next_state, reward, done in env.P[s][a]:
action_values[a] += prob * (reward + discount_factor * V[next_state])
best_action = np.argmax(action_values)
if current_action != best_action:
policy_stable = False
policy[s] = np.eye(env.nA)[best_action]
if policy_stable:
return policy, V
这两个过程 —— 评估和改进,以循环的方式协同工作,相互促进,直至收敛到最优策略。这种巧妙的交互构成了价值迭代和策略迭代算法的基础。
价值迭代:通往最优的直接路径
价值迭代将策略评估和改进的各个方面整合到一个更新步骤中,直接计算最优价值函数。
def value_iteration(env, discount_factor=0.9, theta=0.00001):
"""
价值迭代算法。
参数:
env: OpenAI环境。env.P 表示环境的转移概率。
env.P[s][a] 是一个转移元组列表 (prob, next_state, reward, done)。
discount_factor: 伽马折扣因子。
theta: 一旦所有状态的价值函数变化小于 theta,我们就停止评估。
返回:
一个元组 (policy, V),包含最优策略和最优价值函数。
"""
V = np.zeros(env.nS)
while True:
delta = 0
for s in range(env.nS):
v = V[s]
action_values = np.zeros(env.nA)
for a in range(env.nA):
for prob, next_state, reward, done in env.P[s][a]:
action_values[a] += prob * (reward + discount_factor * V[next_state])
best_action_value = np.max(action_values)
delta = max(delta, np.abs(v - best_action_value))
V[s] = best_action_value
if delta < theta:
break
policy = np.zeros([env.nS, env.nA])
for s in range(env.nS):
action_values = np.zeros(env.nA)
for a in range(env.nA):
for prob, next_state, reward, done in env.P[s][a]:
action_values[a] += prob * (reward + discount_factor * V[next_state])
best_action = np.argmax(action_values)
policy[s, best_action] = 1.0
return policy, V
价值迭代是一种计算效率较高的方法,通过最小化策略评估步骤的数量,它通常比策略迭代收敛得更快。
实现:网格世界环境
为了将这些概念具象化,我们来为一个简单的网格世界环境实现价值迭代,这是强化学习算法的经典测试平台。在这个环境中,智能体在一个 4x4 的网格中导航,以到达目标状态,同时避开危险区域。
从根本上讲,网格世界创建了一个具有特殊状态的方形网格:
- 一个目标(右上角),到达可获得正奖励。
- 一个危险区域(左下角),到达奖励为零。
- 四种方向动作(上、右、下、左)。
- 每走一步会有一个小的负奖励,以鼓励高效行动。
智能体通过探索哪些状态有价值、哪些动作能导向这些状态,来学习在这个环境中导航。
这个实现的精妙之处在于价值迭代算法。它通过迭代改进系统地积累知识:
- 将所有状态值初始化为零。
直到收敛:
对于每个状态:
- 计算每个动作的预期未来值。
- 将状态值更新为最大的动作值。
- 如果变化极小,则停止。
- 通过选择最佳动作提取策略。
该算法从目标状态反向传播价值信息,创建一个智能体可以遵循的 “梯度”。每个状态的值代表其长期效用,这一概念从这个简单的网格环境可扩展到复杂的现实应用中。
从理论到实践的道路
动态规划方法假定对环境有完全的了解,而在现实场景中,这往往是难以实现的。这一局限性促使了更实用的方法的发展,这些方法无需环境模型,比如蒙特卡罗方法和时间差分学习。
蒙特卡罗方法从完整的经验片段中学习,根据观察到的实际回报来更新价值估计。它们不需要知道转移概率,但需要完整的片段来进行更新。
时间差分方法代表了下一个进化阶段,它结合了动态规划和蒙特卡罗方法的思想。它们从部分片段中学习,基于其他估计进行更新,这一过程称为自举。这使得在线、增量学习成为可能,无需等待片段结束。
最著名的时间差分算法 —— Q 学习,是现代深度强化学习方法的基础,将我们探索的理论原则与复杂领域的实际应用联系起来。
超越网格世界:现实世界应用
虽然网格世界为理解基于价值的方法提供了简洁、可解释的环境,但这些算法在更复杂的领域也取得了重大进展:
- 博弈领域:1992年的TD-Gammon将时间差分学习应用于双陆棋,达到了接近专家的水平。
- 机器人控制:基于价值的方法优化了制造业中机器人的运动轨迹。
- 资源管理:从能源网格到数据中心散热,基于价值的强化学习优化了资源分配。
- 推荐系统:Q 学习的变体通过从用户交互中学习,实现了内容推荐的个性化。
这些应用背后的原则始终如一:估计状态和动作的价值,然后选择能最大化这些价值的动作。
挑战与局限
尽管基于价值的方法优雅且强大,但它们也面临着重大挑战:
- 维度诅咒:随着问题复杂性的增加,状态空间呈指数级增长,使得表格方法在许多现实问题中难以应用。
- 函数近似误差:当使用近似方法(如神经网络)来表示价值函数时,学习过程可能变得不稳定。
- 探索效率:平衡探索和利用仍然很困难,尤其是在奖励稀疏的环境中。
- 信用分配:确定哪些动作对延迟奖励负责是一个根本性的挑战。
这些局限推动了更先进技术的发展,包括函数近似方法和深度强化学习,我们将在后续文章中探讨。
展望未来
基于价值的方法只是我们强化学习算法之旅的起点。在下一篇文章中,我们将探索蒙特卡罗方法和时间差分方法,这些方法使得在没有完整环境模型的情况下进行学习成为可能,这是迈向实用强化学习应用的关键一步。
我们在这里涵盖的数学基础 —— 价值函数、贝尔曼方程和迭代求解方法,在我们探索越来越复杂的强化学习方法的过程中,仍将占据核心地位。
## 推荐阅读
1. DeepSeek-R1的顿悟时刻是如何出现的? 背后的数学原理
2. 微调 DeepSeek LLM:使用监督微调(SFT)与 Hugging Face 数据
3. 使用 DeepSeek-R1 等推理模型将 RAG 转换为 RAT
4. DeepSeek R1:了解GRPO和多阶段训练
5. 深度探索:DeepSeek-R1 如何从零开始训练
6. DeepSeek 发布 Janus Pro 7B 多模态模型,免费又强大!
本文由mdnice多平台发布
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。