基于模型的强化学习

本文介绍了基于模型的强化学习,包括在已知MDP模型下的价值函数学习和策略计算,以及在实际问题中通过观察片段episode来推断模型参数。重点讲述了如何从经验中学习状态转移概率和奖励函数,以及如何通过算法实现模型学习和策略优化的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基于模型的强化学习

学习一个MDP模型

目前我们关注在给出一个已知MDP模型后,即状态转移 Psa(s′)P_{sa}{(s')}Psa(s) 和奖励函数 R(s)R(s)R(s) 明确给定后

  • 计算最优价值函数
  • 学习最优策略

在实际问题中,状态转移奖励函数一般不是明确给出的

往往只能够看到一些片段episodes

Episode1: s0(1)→a0(1),R(s0)(1)s1(1)→a1(1),R(s1)(1)s2(1)→a2(1),R(s2)(1)s3(1)⋯sT(1)s^{(1)}_{0}\xrightarrow{a^{(1)}_{0},R(s_{0})^{(1)}}s^{(1)}_{1}\xrightarrow{a^{(1)}_{1},R(s_{1})^{(1)}}s^{(1)}_{2}\xrightarrow{a^{(1)}_{2},R(s_{2})^{(1)}}s^{(1)}_{3}\cdots s^{(1)}_{T}s0(1)a0(1),R(s0)(1)s1(1)a1(1),R(s1)(1)s2(1)a2(1),R(s2)(1)s3(1)sT(1)

Episode2: s0(2)→a0(2),R(s0)(2)s1(2)→a1(2),R(s1)(2)s2(2)→a2(2),R(s2)(2)s3(2)⋯sT(2)s^{(2)}_{0}\xrightarrow{a^{(2)}_{0},R(s_{0})^{(2)}}s^{(2)}_{1}\xrightarrow{a^{(2)}_{1},R(s_{1})^{(2)}}s^{(2)}_{2}\xrightarrow{a^{(2)}_{2},R(s_{2})^{(2)}}s^{(2)}_{3}\cdots s^{(2)}_{T}s0(2)a0(2),R(s0)(2)s1(2)a1(2),R(s1)(2)s2(2)a2(2),R(s2)(2)s3(2)sT(2)

从经验中学习一个MDP模型

  • 学习状态转移概率 Psa(s′)P_{sa}{(s')}Psa(s)

Psa(s′)=在s下采取动作a并转移到s′的次数在s下采取动作a的次数{P_{sa}{(s')}}=\frac{在s下采取动作a并转移到s'的次数}{在s下采取动作a的次数}Psa(s)=s下采取动作a的次数s下采取动作a并转移到s的次数

  • 学习奖励函数 R(s)R(s)R(s) ,也就是立即奖赏期望

R(s)=average{R(s)(i)}R(s)=average\{R(s)^{(i)}\}R(s)=average{R(s)(i)}

学习模型&优化策略

算法实现

  1. 随机初始化策略 π\piπ
  2. 重复以下过程直到收敛
    1. 在MDP中执行 π\piπ ,收集经验数据
    2. 使用MDP中的累积经验更新对 PsaP_{sa}PsaRRR 的估计
    3. 利用对 PsaP_{sa}PsaRRR 的估计执行价值迭代,得到新的估计价值函数 VVV
    4. 根据 VVV 更新策略 π\piπ 为贪心策略

基于模型的强化学习:
假设真实的环境是一个黑盒,这种学习的方式就是首先从真实环境中学习一个MDP模型,再进行价值迭代或者策略迭代学习最优策略,以此来解决没有MDP模型的问题。

模型无关的强化学习:
另一种解决方法是不学习MDP,从经验中直接学习价值函数和策略
即模型无关的强化学习(Model-free Reinforcement Learning)
直接从经验中去学习 V(s)V(s)V(s)π\piπ,而不是学习 PsaP_{sa}PsaRRR

一般RL(Reinforcement Learning)特指模型无关的强化学习,即直接从经验中学价值函数和策略

基于模型的强化学习业界一般叫做Planning或者Dynamic Programming

马尔可夫决策过程总结

  • MDP由一个五元组构成 (S,A,{Psa},γ,R)(S,A,\{P_{sa}\},\gamma,R)(S,A,{Psa},γ,R) ,其中状态转移 PPP 和奖励函数 RRR 构成了动态系统
  • 动态系统和策略交互的占用度量

ρπ(s,a)=Ea∼π(s),s′∼p(s,a)[∑t=0Tγtp(st=s,at=a)]\rho^{\pi}(s,a)=\mathbb{E}_{a\sim\pi(s),s'\sim p(s,a)}{\left[\sum^{T}_{t=0}{\gamma^{t}p(s_{t}=s,a_{t}=a)}\right]}ρπ(s,a)=Eaπ(s),sp(s,a)[t=0Tγtp(st=s,at=a)]

  • 一个白盒环境给定的情况下,可用动态规划的方法求解最优策略(值迭代和策略迭代)
  • 如果环境是黑盒的,可以根据统计信息来拟合出动态环境 PPPRRR ,然后做动态规划求解最优策略
强化学习是一种机器学习方法,可以在不断试错和学习的过程中,最大化某种奖励函数。在强化学习中,智能体采取行动,环境给予奖励或惩罚,智能体依靠这些奖励或惩罚来学习如何采取更好的行动以最大化总体奖励。 在基于模型强化学习中,智能体试图学习环境的模型,并使用这个模型来预测采取不同行动的结果。然后,智能体可以使用这个模型来规划最优的行动策略。 下面是一个基于模型强化学习代码实现的例子,使用 Gym 和 Tensorflow: ```python import gym import numpy as np import tensorflow as tf # 定义超参数 learning_rate = 0.1 discount_factor = 0.99 num_episodes = 1000 num_steps = 200 # 定义环境 env = gym.make('CartPole-v0') # 定义神经网络 inputs = tf.placeholder(shape=[None, env.observation_space.shape[0]], dtype=tf.float32) hidden_layer = tf.layers.dense(inputs=inputs, units=32, activation=tf.nn.relu) outputs = tf.layers.dense(inputs=hidden_layer, units=env.action_space.n, activation=None) # 定义损失函数和优化器 action_taken = tf.placeholder(shape=[None], dtype=tf.int32) target_value = tf.placeholder(shape=[None], dtype=tf.float32) action_mask = tf.one_hot(action_taken, env.action_space.n) chosen_action_value = tf.reduce_sum(action_mask * outputs, axis=1) loss = tf.reduce_mean(tf.square(chosen_action_value - target_value)) optimizer = tf.train.AdamOptimizer(learning_rate).minimize(loss) # 初始化 Tensorflow 变量 sess = tf.Session() sess.run(tf.global_variables_initializer()) # 训练模型 for episode in range(num_episodes): # 重置环境 state = env.reset() total_reward = 0 # 生成数据 states = [] actions = [] rewards = [] for step in range(num_steps): # 选择行动 action_values = sess.run(outputs, feed_dict={inputs: [state]}) action = np.argmax(action_values[0]) # 执行行动 next_state, reward, done, _ = env.step(action) # 记录数据 states.append(state) actions.append(action) rewards.append(reward) # 更新状态和奖励 state = next_state total_reward += reward if done: break # 计算折扣奖励 discounted_rewards = np.zeros_like(rewards) running_reward = 0 for t in reversed(range(len(rewards))): running_reward = running_reward * discount_factor + rewards[t] discounted_rewards[t] = running_reward # 计算优势值 state_values = sess.run(outputs, feed_dict={inputs: states}) advantages = discounted_rewards - state_values[np.arange(len(states)), actions] # 训练神经网络 sess.run(optimizer, feed_dict={ inputs: states, action_taken: actions, target_value: discounted_rewards }) # 输出结果 print("Episode %d, Total reward: %d" % (episode + 1, total_reward)) ``` 这个例子使用 CartPole-v0 环境,它是 OpenAI Gym 的一个经典强化学习环境。代码使用 Tensorflow 建立一个神经网络来预测行动价值,并优化损失函数来提高预测精度。在每个 episode 中,智能体与环境进行交互,生成数据,计算折扣奖励和优势值,并使用这些数据来训练神经网络。最终,智能体应该能够学会在 CartPole-v0 环境中保持直立。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值