强化学习入门

2022-05-30 16:47:43 浏览数 (1)

强化学习定义

强化学习(Reinforcement Learning, RL),又称再励学习、评价学习或增强学习,是机器学习的范式和方法论之一,用于描述和解决智能体(agent)在与环境的交互过程中通过学习策略以达成回报最大化或实现特定目标的问题。

强化学习相关资料

深度强化学习知识总结

深度强化学习落地方法论

EasyRL

Flood Sung:DQN从入门到放弃5 深度解读DQN算法

强化学习算法实现

强化学习相关知识

强化学习的基本概念

强化学习四要素:状态(state)、动作(action)、策略(policy)、奖励(reward)。

智能体(agent):学习器与决策者的角色。

环境(environment):智能体之外一切组成的、与之交互的事物。

状态(state):状态(state)是对世界的完整描述,不会隐藏世界的信息。观测(observation)是对状态的部分描述,可能会遗漏一些信息。在 deep RL 中,我们几乎总是用一个实值的向量、矩阵或者更高阶的张量来表示状态和观测。

策略(policy ):agent 会用这个函数来选取下一步的动作。 Policy 是 agent 的行为模型,它决定了这个 agent 的行为,它其实是一个函数,把输入的状态变成行为。这里有两种 policy:一种是 stochastic policy(随机性策略),当你输入一个状态 s的时候,输出是一个概率。这个概率就是你所有行为的一个概率,然后你可以进一步对这个概率分布进行采样,得到真实的你采取的行为。比如说这个概率可能是有 70% 的概率往左,30% 的概率往右,那么你通过采样就可以得到一个 action。一种是 deterministic policy(确定性策略),就是说你这里有可能只是采取它的极大化,采取最有可能的动作,即。 你现在这个概率就是事先决定好的。

动作(action):智能体的行为表征。不同的环境允许不同种类的动作。在给定的环境中,有效动作的集合经常被称为动作空间(action space)。像 Atari 和 Go 这样的环境有离散动作空间(discrete action spaces),在这个动作空间里,agent 的动作数量是有限的。在其他环境,比如在物理世界中控制一个 agent,在这个环境中就有连续动作空间(continuous action spaces)。在连续空间中,动作是实值的向量。

奖励(reward):奖励是由环境给的一个标量的反馈信号(scalar feedback signal),这个信号显示了 agent 在某一步采取了某个策略的表现如何。强化学习的目的就是为了最大化 agent 可以获得的奖励,agent 在这个环境里面存在的目的就是为了极大化它的期望的累积奖励(expected cumulative reward)。

Deep RL:现在我们有了深度学习,有了神经网络,那么大家也把这个过程改进成一个端到端训练(end-to-end training)的过程。你直接输入这个状态,我们不需要去手工地设计这个特征,就可以让它直接输出动作。那么就可以用一个神经网络来拟合我们这里的价值函数或策略网络,省去了特征工程(feature engineering)的过程。

价值函数(value function),我们用价值函数来对当前状态进行估价,它就是说你进入现在这个状态,可以对你后面的收益带来多大的影响。当这个价值函数大的时候,说明你进入这个状态越有利。

价值函数是未来奖励的一个预测,用来评估状态的好坏。

episode:agent根据某个策略执行一系列action到结束。

状态转移概率:智能体做出动作后进入下一状态的概率。

模型(model):模型表示了 agent 对这个环境的状态进行了理解,它决定了这个世界是如何进行的。第三个组成部分是模型,模型决定了下一个状态会是什么样的,就是说下一步的状态取决于你当前的状态以及你当前采取的行为。它由两个部分组成,

概率:这个转移状态之间是怎么转移的,如下式所示:

奖励函数:当你在当前状态采取了某一个行为,可以得到多大的奖励

根据 agent 学习的东西不同,我们可以把 agent 进行归类。

  • 基于价值的 agent(value-based agent)。这一类 agent 显式地学习的是价值函数,隐式地学习了它的策略。策略是从我们学到的价值函数里面推算出来的。
  • 基于策略的 agent(policy-based agent)。这一类 agent 直接去学习 policy,就是说你直接给它一个状态,它就会输出这个动作的概率。在基于策略的 agent 里面并没有去学习它的价值函数。

把 value-based 和 policy-based 结合起来就有了 Actor-Critic agent。这一类 agent 把它的策略函数和价值函数都学习了,然后通过两者的交互得到一个最佳的行为。

在基于策略迭代的强化学习方法中,智能体会制定一套动作策略(确定在给定状态下需要采取何种动作),并根据这个策略进行操作。强化学习算法直接对策略进行优化,使制定的策略能够获得最大的奖励。

而在基于价值迭代的强化学习方法中,智能体不需要制定显式的策略,它维护一个价值表格或价值函数,并通过这个价值表格或价值函数来选取价值最大的动作。基于价值迭代的方法只能应用在不连续的、离散的环境下(如围棋或某些游戏领域),对于行为集合规模庞大、动作连续的场景(如机器人控制领域),其很难学习到较好的结果(此时基于策略迭代的方法能够根据设定的策略来选择连续的动作)。

另外,我们是可以通过 agent 到底有没有学习这个环境模型来分类。

model-based(有模型) RL agent,它通过学习这个状态的转移来采取动作。

model-free(免模型) RL agent,它没有去直接估计这个状态的转移,也没有得到环境的具体转移变量。它通过学习价值函数和策略函数进行决策。Model-free 的模型里面没有一个环境转移的模型。

Exploration and Exploitation

在强化学习里面,探索 和利用 是两个很核心的问题。

探索是说我们怎么去探索这个环境,通过尝试不同的行为来得到一个最佳的策略,得到最大奖励的策略。

利用是说我们不去尝试新的东西,就采取已知的可以得到很大奖励的行为。

因为在刚开始的时候强化学习 agent 不知道它采取了某个行为会发生什么,所以它只能通过试错去探索。所以探索就是在试错来理解采取的这个行为到底可不可以得到好的奖励。利用是说我们直接采取已知的可以得到很好奖励的行为。所以这里就面临一个权衡,怎么通过牺牲一些短期的奖励来获得行为的理解,从而学习到更好的策略。

我们可以用马尔可夫决策过程来定义强化学习任务,并表示为四元组<S,A,P,R><S,A,P,R>,即状态集合、动作集合、状态转移函数和奖励函数。如果这四元组中所有元素均已知,且状态集合和动作集合在有限步数内是有限集,则机器可以对真实环境进行建模,构建一个虚拟世界来模拟真实环境的状态和交互反应。

马尔可夫决策过程(Markov Decision Process, MDP)

马尔可夫性

系统的下一个状态仅与当前状态有关,而与历史状态无关。

此处的状态是指完全可观察的全部的环境状态 回报(Return):为最大化长期累积奖赏,定义当前时刻后的累积奖赏为回报(Return),考虑折扣因子(避免时间过长时,总回报无穷大):

值函数(Value Function)

强化学习的目标是学习到一个策略来最大化期望,即希望智能体执行一系列的动作来获得尽可能多的平均回报。为评估一个策略的期望回报,需要定义值函数。

状态值函数:在状态S下获得的期望回报。

状态-动作值函数:在状态下执行动作a后获得的期望回报。

根据马尔可夫特性,二者有如下关系:

即状态值函数V是动作-状态值函数Q关于动作a的期望。

贝尔曼方程(Bellman equation) 其意义在于当前状态的值函数可以通过下一状态的值函数来计算。同理,状态-动作值函数也有类似关系。

计算状态值函数的目的是为了构建学习算法从数据中得到最优策略,每个策略对应着一个状态值函数,最优策略对应着最优状态值函数。

  • 贪婪策略 贪婪策略是一个确定性策略,即始终选取使值函数最大的策略。这是智能体对已知知识的利用(exploitation),不好更新出更好的值,但可以得到更好的测试效果用于判断算法是否有效。
  • ε-greedy策略: 选取不使值函数最大的动作表示智能体对未知知识的探索(exploration),探索未知的动作会产生的未知的效果,有利于更新值,有可能获得更好的策略,故ε-greedy策略平衡了探索和利用。

Q_learning算法

Q-Learning是发表于1989年的一种value-based,且model-free的特别经典的off-policy算法,近几年的DQN等算法均是在此基础上通过神经网络进行展开的。它将学习的序列数据存储在表格中,然后通过获取表中的数据,利用greedy策略进行最大化Q值函数的学习方法。

Q-Learning就是在某一个时刻的状态(state)下,采取动作a能够获得收益的期望,环境会根据agent的动作反馈相应的reward奖赏,核心就是将state和action构建成一张Q_table表来存储Q值,然后根据Q值来选取能够获得最大收益的动作,如表所示:

Q-learning的主要优势就是使用了时间差分法TD(融合了蒙特卡洛和动态规划)能够进行离线(off-policy)学习, 使用bellman方程可以对马尔科夫过程求解最优策略。算法伪代码

​其中Q(s,a)为s,a对应的值=估计 学习率*(现实-估计)现实为奖励 衰减*max(s状态对应的值)

衰减表示每次以衰减值的概率获取最优值。

从伪代码中可以看出,在每个episode中的更新方式采用了贪婪greedy(进行探索)进行最优动作的选取,并通过更新值(这里的操作是非常关键的一部分)来达到学习目的。代码的复现过程中也是严格按照伪代码的顺序进行完成。

DQN

DQN(Deep Q Network)可用于入门深度强化学习,使用一个Q Network来估计Q值,从而替换了 Q-table,完成从离散状态空间到连续状态空间的跨越。Q Network 会对每一个离散动作的Q值进行估计,执行的时候选择Q值最高的动作(greedy 策略)。并使用 epslion-greedy 策略进行探索(探索的时候,有很小的概率随机执行动作),来获得各种动作的训练数据。

DDPG

DDPG(Deep DPG ),可用于入门连续动作空间的DRL算法。DPG 确定策略梯度算法,直接让策略网络输出action,成功在连续动作空间任务上训练出能用的策略,但是它使用 OU-noise 这种有很多超参数的方法去探索环境,训练慢,且不稳定。

A3C

Asynchronous 指开启多个actor 在环境中探索,并异步更新。原本DDPG的Critic 是 Q(s, a),根据state-action pair 估计Q值,优势函数只使用 state 去估计Q值,这是很好的创新:降低了随机策略梯度算法估计Q值的难度然而优势函数有明显缺陷:不是任何时刻 action 都会影响 state的转移(详见 Dueling DQN),因此这个算法只适合入门学习「优势函数 advantage function」。如果你看到新论文还在使用A3C,那么你要怀疑其作者RL的水平。此外,A3C算法有离散动作版本,也有连续动作版本。A2C 指的是没有Asynchronous 的版本。

PPO

训练稳定,调参简单,robust(稳健、耐操)。PPO对TRPO的信任域计算过程进行简化,论文中用的词是 surrogate objective。PPO动作的噪声方差是一个可训练的矢量(与动作矢量相同形状),而不由网络输出,这样做增强了PPO的稳健性 robustness。

SAC

训练很快,探索能力好,但是很依赖Reward Function,不像PPO那样随便整一个Reward function 也能训练。PPO算法会计算新旧策略的差异(计算两个分布之间的距离),并让这个差异保持在信任域内,且不至于太小。SAC算法不是on-policy算法,不容易计算新旧策略的差异,所以它在优化时最大化策略的熵(动作的方差越大,策略的熵越高)。

SAC-Discrete(即离散版SAC)

TD3

擅长调参的人才建议用,因为它影响训练的敏感超参数很多。它从Double DQN那里继承了Twin Critic,用来降低高估误差;它用来和随机策略梯度很像的方法:计算用于更新TD-error的Q值时,给action加上了噪声,用于让Critic拟合更平滑的Q值估计函数。TD3建议 延迟更新目标网络,即多更新几次网络后,再使用 soft update 将网络更新到target network上,我认为这没有多大用,后来的其他算法也不用这个技巧。TD3还建议在计算Q值时,为动作添加一个噪声,用于平滑Critic函数,在确定策略中,TD3这么用很像“随机策略”。详见 曾伊言:强化学习算法TD3论文的翻译与解读

0 人点赞