【强化学习】强化学习基础教程:基本概念、强化学习的定义,要素,方法分类 以及 Rollout、episode回合、transition转移、trajectory轨迹的概念

1.基础概念

1.1 强化学习的定义

  • 实现序贯决策的机器学习方法—强化学习(reinforcement learning)
  • 强化学习定义:机器通过与环境进行交互,不断尝试,从错误中学习,做出正确决策从而实现目标的方法。
  • 强化学习是与有监督学习方法和无监督学习方法并列的一类机器学习方法
  • 强化学习是机器通过与环境交互来实现目标的一种计算方法。机器和环境的一轮交互是指,机器在环境的一个状态下做一个动作决策,把这个动作作用到环境当中,这个环境发生相应的改变并且将相应的奖励反馈和下一轮状态传回机器,交互是迭代进行
  • 在每一轮交互中,智能体感知到环境目前所处的状态,经过自身的计算给出本轮的动作,将其作用到环境中;环境得到智能体的动作后,产生相应的即时奖励(注意是即时奖励)信号并发生相应的状态转移。智能体则在下一轮交互中感知到新的环境状态,依次类推。
  • 强化学习(Reinforcement learning,RL)讨论的问题是一个智能体(agent) 怎么在一个复杂不确定的环境(environment) 里面去极大化它能获得的奖励。通过感知所处环境的状态(state) 对动作(action) 的反应(reward),来指导更好的动作,从而获得最大的收益(return),这被称为在交互中学习,这样的学习方法就被称作强化学习
    在这里插入图片描述

1.2 强化学习的基本要素

动作(action):智能体作出的决策行为
智能体(agent):学习器与决策者,作出动作的主体
状态(state):智能体从环境中获得到的信息
奖励(reward):环境根据状态与智能体做出的动作产生的反馈信号,用R或r表示
回报(return):未来的累积奖励,用Ut表示从t时刻到结束时的累积奖励
策略(policy):一般用π表示,由观测到的状态根据策略决定作出动作
在这里插入图片描述

2.强化学习分类

2.1 根据agent学习方式分为基于策略的强化学习Policy based RL ,基于价值的强化学习Value based RL以及Actor-Critic方法

  • Policy based RL :学习一个策略函数π(a|s),无需构造价值函数,如REINFORCE算法

  • Value based RL:学习最优动作价值函数 Q ∗ Q^* Q,无需策略函数,如Q-learning,Sarsa,DQN方法

  • Actor-Critic方法:一种特别的方法,上述两者的结合,Actor会基于概率作出动作,Critic会根据作出的动作打分,是一类结合了策略评估(Critic)和策略改进(Actor)的强化学习算法。它们通过同时学习一个策略函数(Actor)和一个值函数(Critic),从而可以更有效地学习到优秀的策略;A2C (Advantage Actor-Critic)、A3C (Asynchronous Advantage Actor-Critic)、DDPG (Deep Deterministic Policy Gradient)、TD3 (Twin Delayed Deep Deterministic Policy Gradient)、PPO (Proximal Policy Optimization)等算法均是Actor-Critic方法

在这里插入图片描述

2.2 根据理不理解所处的环境(agent有无学习环境的模型)分为model-based与model-free

  • model-based:学习环境的模型,通过学习状态转移概率 P ( s , s ′ ) P(s,s') P(s,s)采取行动
  • model-free:无环境的模型,通过学习价值函数 V π ( s ) V_\pi(s) Vπ(s)与策略函数进行决策。Q-learning,Sarsa,Policy Gradients都是model-free方法,从环境中得到反馈从而学习,智能体只能和环境进行交互,通过采样到的数据来学习,这类学习方法统称为无模型的强化学习(model-free reinforcement learning

在这里插入图片描述

2.3 根据agent是否与环境交互分为在线强化学习Online RL与离线强化学习Offline RL

  • Online RL:学习过程中,agent除了从数据集中学习,还需要与环境进行交互。

  • Offline RL:学习过程中,agent不与环境进行交互,只从数据集中直接学习一套策略来完成相关任务。

2.4 根据如何使用已有的数据进行学习和决策划分为在线策略(on-policy)和离线策略(off-policy)

  • 称采样数据的策略为行为策略(behavior policy),称用这些数据来更新的策略为目标策略(target policy)
  • 在线策略(on-policy)算法表示行为策略和目标策略是同一个策略,agent根据当前的策略来选择动作,并且学习的目标是优化当前正在执行的策略(要求必须本人在场,边玩边学习);
  • 离线策略(off-policy)算法表示行为策略和目标策略不是同一个策略,学习算法可以利用从其他策略生成的数据来进行学习,而不局限于当前执行的策略(可以自己玩也可以看着别人玩,通过看着别人玩来学习其他人的行为准则)
  • 离线策略学习使用经验回放池将之前采样得到的样本收集起来再次利用,就好像使用脸盆接水后洗手。因此,离线策略学习往往能够更好地利用历史数据,并具有更小的样本复杂度(算法达到收敛结果需要在环境中采样的样本数量)。

2.5 根据更新方式分为回合更新(Monte-Carlo update)与单步更新(Temporal-DIfference update)

  • 回合更新:游戏有开始和结束,回合更新只有等待一局游戏从开始到结束,然后才能更新行为准则
  • 单步更新:在游戏过程中,每一步都可以更新,不用等待游戏的结束,边玩边学习,学习效率更好

3.Rollout的含义

Rollouts通常指的是在执行策略梯度或其他基于模拟的强化学习方法时,智能体在环境中进行的一系列模拟交互步骤。这些步骤用于收集数据,以评估或改进当前的策略。
在强化学习中,rollout指的是在训练过程中,智能体根据当前的策略在环境中进行一系列的模拟交互步骤,模拟并收集样本数据的过程。 在每个rollout中,智能体从环境中观测当前状态,然后根据选择的策略采取一个动作。接下来,智能体与环境进行交互,执行该动作,并观察到下一个状态和获得的奖励。此后,智能体根据新的状态更新其策略,并在下一个步骤中选择下一个动作。这个过程会持续进行,直到满足某个停止条件,比如达到最大步数或达到终止状态。
Rollout的目的是通过与环境的交互来生成样本数据,用于策略优化和价值函数估计。这些样本数据将被用于更新策略参数或进行价值函数的拟合,以改善智能体的性能。通常,rollout会在训练过程中进行多次,以收集足够的样本数据来训练和优化智能体。
Rollout的长度可以根据具体任务进行调整,可以是固定长度,也可以是变长的。在一些连续控制任务中,rollout可能会持续进行数百或数千个时间步。然而,在一些离散决策任务中,rollout可能会在有限步数内完成。 总而言之,rollout是强化学习中一种通过与环境进行交互并收集样本数据的过程,用于训练智能体的策略和价值函数。

4.episode回合、transition转移、trajectory轨迹的概念

4.1 episode回合

  • 一个完整的任务执行过程被称为一个回合或一个episode,强调任务从开始到终止的全部过程 ;
  • 一个episode可以包含多个trajectory。在某些情况下,一个episode可以被视为一个完整的trajectory,而在其他情况下,一个trajectory可能只是episode中的一部分;
  • 在每个回合中,智能体从环境中接收状态(state),然后执行动作(action),环境根据智能体的动作和当前状态返回奖励(reward)和新的状态。这个过程一直持续,直到任务结束或达到某个终止条件。例如,在玩棋盘游戏时,一个回合可能是一整局游戏的过程,从游戏开始到游戏结束。
    在这里插入图片描述

4.2 transition转移

  • 在强化学习中,一个状态到另一个状态的变化被称为转移。
  • 转移通常由三元组表示:(state, action, next_state)。即在某个状态下,智能体执行了一个动作后,环境的响应将导致状态从当前状态转移到下一个状态。
  • 转移还可以包括奖励信号,可以表示为四元组:(state, action, next_state, reward)。
  • transition数据 ( s t , a t , r t , s t + 1 ) (s_t,a_t,r_t,s_{t+1}) (st,at,rt,st+1)
    在这里插入图片描述

4.3 trajectory(轨迹): 多条transition

  • 一个轨迹是智能体与环境之间相互作用的一个序列,通常包括一系列状态、动作和奖励。
  • 轨迹是一连串的状态-动作对,描述了智能体是如何在环境中移动并与环境互动的。
  • 轨迹可以由一系列转移组成,而一个回合中的所有转移组合在一起就形成了整个轨迹。
  • trajectory可以是从一个episode中抽取的,也可以是多个episode的组合
  • trajectory可以跨越多个episode,或者是一个episode中的一个子序列。
  • trajectory数据 ( s 0 , a 0 , r 0 , s 1 ) , ( s 1 , a 1 , r 1 , s 2 ) , . . . , ( s t , a t , r t , s t + 1 ) (s_0,a_0,r_0,s_1),(s_1,a_1,r_1,s_2),...,(s_t,a_t,r_t,s_{t+1}) (s0,a0,r0,s1),(s1,a1,r1,s2),...,(st,at,rt,st+1)
    在这里插入图片描述

4.4 回合、转移、轨迹三者的区别与联系

在这里插入图片描述

  • Episode(回合)通常由一系列Transition(转移)组成

  • episode是整个学习任务的执行过程,trajectory是一个序列,而transition是轨迹中的单一步骤

  • 个人理解:多个transition构成一个trajectory,一个或多个trajectory构成一个episode

  • 举个例子,考虑一个机器人学习走迷宫的任务。一个回合可以包含机器人从迷宫的入口走到出口的整个过程。在这个回合中,机器人可能经历了多个轨迹,每个轨迹对应于机器人在迷宫中的不同路径选择。每个轨迹可以被看作是一次特定的路径规划过程。

  • 35
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
一个适合强化学习的策略树算法是 Monte Carlo Tree Search (MCTS)。它是一种基于模拟的搜索算法,广泛应用于许多领域,包括游戏和机器人控制。 以下是一个简单的 Python 实现: ```python import math import random class Node: def __init__(self, state, parent=None): self.state = state self.parent = parent self.children = [] self.visits = 0 self.reward = 0.0 def add_child(self, child_state): child = Node(child_state, self) self.children.append(child) return child def update(self, reward): self.reward += reward self.visits += 1 def fully_expanded(self): return len(self.children) == len(self.state.get_actions()) def best_child(self, c=1.4): choices_weights = [(c.reward / c.visits) + c.visits * math.sqrt(2 * math.log(self.visits) / c.visits) for c in self.children] return self.children[choices_weights.index(max(choices_weights))] def rollout_policy(self): return random.choice(self.state.get_actions()) def rollout(self): current_rollout_state = self.state while not current_rollout_state.is_terminal(): current_rollout_state = current_rollout_state.apply_action(self.rollout_policy()) return current_rollout_state.reward() def backpropagate(self, reward): self.update(reward) if self.parent: self.parent.backpropagate(reward) def mcts(root, n): for i in range(n): node = root while not node.state.is_terminal(): if not node.fully_expanded(): new_node = node.add_child(random.choice([a for a in node.state.get_actions() if a not in [c.state for c in node.children]])) reward = new_node.rollout() new_node.backpropagate(reward) break else: node = node.best_child() else: continue break return max(root.children, key=lambda c: c.visits).state ``` 这里的 `Node` 类表示策略树的节点。它包含一个状态、一个父节点、一些子节点、访问计数和奖励总和。`mcts` 函数执行 MCTS 算法。它从根节点开始,重复以下步骤,直到遇到终止状态: 1. 如果当前节点未被完全扩展,则扩展一个新的子节点,并执行随机策略进行模拟,并将模拟结果反向传播到其父节点。 2. 否则,选择最佳子节点并移动到那里。 最后,函数返回访问次数最多的子节点的状态。 请注意,这只是一个简单的实现,可能需要根据具体应用场景进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

几度热忱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值