基于策略的强化学习

基于策略的强化学习

1. 策略函数近似(Policy Function Approximation)

策略函数 π(a∣s)
  • 策略函数是一个概率密度函数,它根据当前状态 s 输出在该状态下采取每个可能动作 a 的概率。
  • 在有限的状态和动作空间中,可以直接学习这个函数。但在连续动作空间或状态空间非常大时,直接学习变得不切实际。
策略网络 π(a∣s;θ)
  • 使用神经网络来近似策略函数,其中 θ 是网络的可训练参数。
  • 网络输入是状态 s,输出是所有可能动作的概率分布。
  • 使用Softmax激活函数确保输出的概率和为1。

2. 状态价值函数近似(State-Value Function Approximation)

动作价值函数 Q(s,a)
  • 定义为从状态 s 开始并采取动作 a 的预期折扣回报。
  • 动作价值函数依赖于策略函数和状态转移概率。
状态价值函数 V(s)
  • 定义为在状态 s 下,按照策略 π 采取动作的预期折扣回报。
  • 可以通过对动作价值函数 Q(s,a) 进行期望计算得到。

3. 基于策略的强化学习(Policy-Based Reinforcement Learning)

策略梯度(Policy Gradient)
  • 目标是学习参数 θ,以最大化期望回报 J(θ)=E[V(S;θ)]。
  • 使用策略梯度上升法来更新参数 θ
策略梯度的计算
  • 策略梯度是状态价值函数 V(s;θ) 关于 θ 的导数。

  • 通过链式法则和期望,可以推导出策略梯度的表达式:

    image-20250319143514318
  • 这个表达式表明,策略梯度可以通过对每个动作的概率的对数梯度与该动作的价值的乘积的期望来计算。

4. 离散和连续动作空间中的策略梯度计算

离散动作空间
  • 使用策略梯度的第一种形式,直接对每个动作的概率进行求和。
连续动作空间
  • 使用策略梯度的第二种形式,通过期望来计算梯度。
  • 通过从策略分布中采样动作,并计算这些动作的梯度,可以得到策略梯度的无偏估计。

5. 使用策略梯度更新策略网络

算法步骤
  1. 观察状态 s
  2. 根据策略网络 π(as;θ) 随机采样动作 a
  3. 计算 Q(s,a) 的估计值(可以通过某种方法得到)。
  4. 对策略网络进行微分,得到 image-20250319144144867
  5. 计算(随机)策略梯度:image-20250319144115499
  6. 更新策略网络:θnew=θ+β
具体方法
  • REINFORCE:通过玩完整个游戏来生成轨迹,并使用折扣回报来近似 Q(s,a)。
  • Actor-Critic方法:使用一个神经网络来近似 Q(s,a),这将在文件4中详细讨论。

6. 总结

  • 基于策略的学习:如果已知一个好的策略函数 π,智能体可以根据该策略随机采样动作 aπ(s)。
  • 策略网络:通过策略梯度算法学习策略网络,以最大化期望回报。
  • 策略梯度算法:学习参数 θ,以最大化 E[V(S;θ)]。
### 基于策略函数的强化学习概述 #### 概念 基于策略函数的强化学习是一种通过直接调整行为(action)的选择概率来优化长期奖励的方法[^1]。这种方法不依赖于构建环境模型,而是专注于寻找能够最大化预期累积奖励的最佳行动方案。 在该类方法中,策略π(a|s;θ)定义了给定状态下采取特定行动的概率分布,其中参数向量θ用于控制这种映射关系。对于确定性的策略而言,则是在每种情况下都指定唯一的一个最佳操作;而对于随机性策略来说,则允许存在一定范围内的探索可能性[^3]。 #### 实现方法 ##### 策略梯度法 (Policy Gradient Methods) 这类算法旨在估计并更新使得期望回报最大化的策略参数θ。具体做法是利用性能指标J(θ),即平均累计折扣奖赏关于θ的一阶导数来进行迭代改进: \[ \nabla_{\theta} J(\theta)=E[\sum_t\nabla_\theta log\pi(a_t | s_t;\theta)r(s_t,a_t)] \] 此表达式表明我们可以通过采样轨迹以及相应收益来近似计算梯度,并据此调整权重以提高未来获得更高总分的机会。 ##### Actor-Critic 方法 Actor-critic 结构结合了两种思路的优点——它既包含了负责决定下一步怎么走的角色actor, 又引入了一个评估当前状态好坏程度的价值网络critic。前者根据后者给出的信息不断修正自己的决策模式直至找到全局最优解为止。这种方式不仅加快了训练过程而且提高了稳定性[^2]。 ```python import torch.nn as nn class PolicyNetwork(nn.Module): def __init__(self, input_size, output_size): super(PolicyNetwork, self).__init__() self.fc = nn.Linear(input_size, output_size) def forward(self, state): action_probs = F.softmax(self.fc(state), dim=-1) return action_probs def select_action(policy_net, state): with torch.no_grad(): probs = policy_net(torch.tensor([state], dtype=torch.float)) m = Categorical(probs) action = m.sample() return action.item(), m.log_prob(action).unsqueeze(-1) ``` #### 应用场景 - **机器人导航**:让自主移动设备学会如何避开障碍物到达目标位置。 - **游戏AI开发**:创建能够在复杂环境中做出合理反应的游戏角色控制器。 - **金融交易模拟器**:设计自动买卖股票或其他资产的投资顾问系统。 - **自动驾驶汽车测试平台**:研究车辆间协作驾驶规则制定等问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值