基于价值的强化学习

基于价值的强化学习,说白了,就是智能体采取了一个动作,这个动作的好坏用一个评价标准来评价它—Q动作值函数。
在后续的动作中,可以通过Q的计算了解到采取什么动作最好,从而达到指导智能体行动的目的。
强化学习中使用 折扣回报来定义采取动作后得到的回报。

1. 折扣回报

定义: U t = R t + γ R t + 1 + γ 2 R t + 2 + γ 3 R t + 3 + … U_t = R_t + \gamma R_{t+1} + \gamma ^2 R_{t+2} + \gamma ^3 R_{t+3} + … Ut=Rt+γRt+1+γ2Rt+2+γ3Rt+3+

该回报表示在t时刻得到的即时奖励和 t+1, t+2 …后得到的折扣奖励。

该折扣回报就是用来评价采取一个行动是好坏的标准,回报越高,说明采取的行动越好。

特性: U t U_t Ut回报是不确定的,因为它取决于状态动作

  1. P [ A = a ∣ S = s ] = π ( a ∣ s ) P [ A = a | S = s ] = \pi (a | s) P[A=aS=s]=π(as)策略函数
  2. P [ S ′ = s ′ ∣ S = s , A = a ] = p ( s ′ ∣ s , a ) P[S' = s' | S = s, A = a] = p(s' | s, a) P[S=sS=s,A=a]=p(ss,a) 状态转移概率

上述的策略和状态转移都是概率性的,所以折扣回报也是概率性的

2. action-value function 动作-值函数 Q ( s , a ) Q(s, a) Q(s,a)

可以反映在状态s下做动作a的好坏,其实也就是 U t U_t Ut的期望:

  • 动作值函数
    Q π ( s t , a t ) = E ( U t ∣ S t = s t , A t = a t ) Q_\pi(s_t, a_t) = E(U_t | S_t = s_t, A_t = a_t) Qπ(st,at)=E(UtSt=st,At=at)

在状态s下,采取动作a的期望回报

  • 最优动作值函数 Q ∗ Q^* Q
    Q ∗ ( s t , a t ) = max ⁡ π Q π ( s t , a t ) Q^*(s_t, a_t) = \max_\pi Q_\pi (s_t, a_t) Q(st,at)=maxπQπ(st,at)

状态s下,最优动作a时的期望回报

3. DQN (Deep Q-Network)

其实就是用一个神经网络近似Q函数

  • 求解 Q ∗ Q^* Q

### 基于价值的方法与基于策略方法的比较 #### Q-Learning的核心原理 Q-Learning属于基于价值的学习方法,旨在学习最优的动作值函数\(Q^*(s, a)\),即给定状态下采取某行动所能获得的最大期望回报。此方法利用贝尔曼方程迭代更新估计值,直到收敛至真实值[^1]。 对于离散动作空间的任务而言,由于不需要显式定义环境模型即可工作良好,并且易于理解和实现,因此成为入门级研究者首选工具之一。 ```python import numpy as np def q_learning(env, num_episodes=500, alpha=0.8, gamma=0.95): """ 实现简单的Q-learning算法 """ # 初始化Q表 q_table = np.zeros([env.observation_space.n, env.action_space.n]) for i in range(num_episodes): state = env.reset() while True: action = choose_action(state, q_table) # 根据当前状态选择行为 next_state, reward, done, _ = env.step(action) old_value = q_table[state, action] next_max = np.max(q_table[next_state]) new_value = (1 - alpha) * old_value + \ alpha * (reward + gamma * next_max) q_table[state, action] = new_value if done: break state = next_state return q_table def choose_action(state, q_table, epsilon=0.1): """ ε-greedy 策略选取action""" ... ``` #### Policy Gradient的核心原理 相比之下,Policy Gradient是一种直接针对参数化概率分布πθ(a|s)进行优化的技术,它试图最大化累积奖励关于这些参数的期望值。这种方法允许处理更广泛类型的决策过程——特别是那些涉及高维甚至无限大连续控制变量的情况,在这类环境中难以构建有效的表格表示法或近似器。 通过梯度上升调整权重向量w使得目标J(w)=E[Rt]尽可能增大,其中Rt代表从时间步t开始到结束所收到的所有折扣后的即时奖励之和。值得注意的是,为了稳定训练并提高样本效率,通常会引入基线b(s_t; w_b)(如平均历史收益)来减少方差而不影响无偏性。 ```python import torch from torch.distributions import Categorical class PolicyGradientAgent(torch.nn.Module): def __init__(self, input_dim, output_dim): super().__init__() self.fc = torch.nn.Linear(input_dim, 64) self.out = torch.nn.Linear(64, output_dim) def forward(self, x): h = F.relu(self.fc(x)) logits = self.out(h) dist = Categorical(logits=logits) return dist.sample(), dist.log_prob(dist.sample()) agent = PolicyGradientAgent(observation_size, n_actions) for episode in range(total_episodes): obs = env.reset() log_probs = [] rewards = [] while not done: action, log_prob = agent(torch.tensor(obs).float()) new_obs, reward, done, info = env.step(action.item()) log_probs.append(log_prob) rewards.append(reward) obs = new_obs update_policy(agent.optimizer, log_probs, rewards) ``` #### 各自的优点与局限性 - **Q-Learning** - 优点:无需事先知道转移概率矩阵P(s'|s,a); 对小型有限MDPs非常有效;容易与其他技术相结合形成新的变种版本。 - 缺点:仅限用于低维度的状态-动作对组合;当面对大规模问题时可能会遇到计算资源瓶颈以及泛化能力不足等问题。 - **Policy Gradients** - 优点:可以直接作用于任何可微分的概率型映射关系之上;支持端到端的学习框架设计;更容易推广到复杂的现实世界挑战之中去。 - 缺点:性能高度依赖于初始化质量;存在较高的采样需求从而增加了探索成本;可能陷入局部极小解而非全局最优点附近徘徊不前。 #### 应用场景的选择依据 如果任务具有较小规模、明确界限良好的离散选项集,则倾向于采用像DQN这样的value-based方案更为合适一些。而对于涉及到多模态感知输入或者需要精细调控输出幅度的情形来说,policy gradient family无疑提供了更加灵活强大的解决方案路径。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值