强化学习算法介绍
强化学习讨论的问题是一个智能体(agent) 怎么在一个复杂不确定的环境(environment)里面去极大化它能获得的奖励。
强化学习和监督学习
- 强化学习有这个试错探索(trial-and-error exploration),它需要通过探索环境来获取对环境的理解。强化学习 agent 会从环境里面获得延迟的奖励。
- 在强化学习的训练过程中,时间非常重要。因为你得到的数据都是有时间关联的(sequential data),而不是独立同分布的。在机器学习中,如果观测数据有非常强的关联,其实会使得这个训练非常不稳定。这也是为什么在监督学习中,我们希望数据尽量是独立同分布,这样就可以消除数据之间的相关性。
- Agent 的行为会影响它随后得到的数据,这一点是非常重要的。在我们训练 agent 的过程中,很多时候我们也是通过正在学习的这个 agent 去跟环境交互来得到数据。所以如果在训练过程中,这个 agent 的模型很快死掉了,那会使得我们采集到的数据是非常糟糕的,这样整个训练过程就失败了。所以在强化学习里面一个非常重要的问题就是怎么让这个 agent 的行为一直稳定地提升。
- 为什么我们关注强化学习,其中非常重要的一点就是强化学习得到的模型可以有超人类的表现。
监督学习获取的这些监督数据,其实是让人来标注的。比如说 ImageNet 的图片都是人类标注的。那么我们就可以确定这个算法的上限(upper bound)就是人类的表现,人类的这个标注结果决定了它永远不可能超越人类。但是对于强化学习,它在环境里面自己探索,有非常大的潜力,它可以获得超越人的能力的这个表现,比如谷歌 DeepMind 的 AlphaGo 这样一个强化学习的算法可以把人类最强的棋手都打败。
这里给大家举一些在现实生活中强化学习的例子。
在自然界中,羚羊其实也是在做一个强化学习,它刚刚出生的时候,可能都不知道怎么站立,然后它通过试错的一个尝试,三十分钟过后,它就可以跑到每小时 36 公里,很快地适应了这个环境。
你也可以把股票交易看成一个强化学习的问题,就怎么去买卖来使你的收益极大化。
玩雅达利游戏或者一些电脑游戏,也是一个强化学习的过程。
Reward
奖励是由环境给的一个标量的反馈信号(scalar feedback signal),这个信号显示了 agent 在某一步采取了某个策略的表现如何。
强化学习的目的就是为了最大化 agent 可以获得的奖励,agent 在这个环境里面存在的目的就是为了极大化它的期望的累积奖励(expected cumulative reward)。
不同的环境,奖励也是不同的。这里给大家举一些奖励的例子。
比如说一个下象棋的选手,他的目的其实就为了赢棋。奖励是说在最后棋局结束的时候,他知道会得到一个正奖励或者负奖励。
羚羊站立也是一个强化学习过程,它得到的奖励就是它是否可以最后跟它妈妈一块离开或者它被吃掉。
在股票管理里面,奖励定义由你的股票获取的收益跟损失决定。
在玩雅达利游戏的时候,奖励就是你有没有在增加游戏的分数,奖励本身的稀疏程度决定了这个游戏的难度。
Value Function
价值函数是末来奖励的一个预测,用来评估状态的好坏。 100 块钱,因为你可以把这 100 块钱存在银行里面,你就会有一些利息。所以我们就通过把这个折扣因子放到价值函数的定义里面,价值函数的定义其实是一个期望,如下式所示:
v π ( s ) ≐ E π [ G t ∣ S t = s ] = E π [ ∑ k = 0 ∞ γ k R t + k + 1 ∣ S t = s ] , for all s ∈ S \mathrm{v}{\pi}(\mathrm{s}) \doteq \mathbb{E}{\pi}\left[\mathrm{G}{\mathrm{t}} \mid \mathrm{S}{\mathrm{t}}=\mathrm{s}\right]=\mathbb{E}{\pi}\left[\sum{\mathrm{k}=0}^{\infty} \gamma^{\mathrm{k}} \mathrm{R}{\mathrm{t}+\mathrm{k}+1} \mid \mathrm{S}{\mathrm{t}}=\mathrm{s}\right] \text {, for all } \mathrm{s} \in \mathcal{S} vπ(s)≐Eπ[Gt∣St=s]=Eπ[k=0∑∞γkRt+k+1∣St=s], for all s∈S
这里有一个期望 E π \mathbb{E}_{\pi} Eπ ,这里有个小角标是 π \pi π 函数,这个 π \pi π 函数就是说在我们已知某一个策略函数的时候,到底可以得到多少的奖励。
我们还有一种价值函数: Q Q Q 函数。 Q Q Q 函数里面包含两个变量: 状态和动作,其定义如下式所示:
q π ( s , a ) ≐ E π [ G t ∣ S t = s , A t = a ] = E π [ ∑ k = 0 ∞ γ k k R t + k + 1 ∣ S t = s , A t = a ] \mathrm{q}{\pi}(\mathrm{s}, \mathrm{a}) \doteq \mathbb{E}{\pi}\left[\mathrm{G}{\mathrm{t}} \mid \mathrm{S}{\mathrm{t}}=\mathrm{s}, \mathrm{A}{\mathrm{t}}=\mathrm{a}\right]=\mathbb{E}{\pi}\left[\sum_{\mathrm{k}=0}^{\infty} \gamma^{\mathrm{k}^{\mathrm{k}}} \mathrm{R}{\mathrm{t}+\mathrm{k}+1} \mid \mathrm{S}{\mathrm{t}}=\mathrm{s}, \mathrm{A}_{\mathrm{t}}=\mathrm{a}\right] qπ(s,a)≐Eπ[Gt∣St=s,At=a]=Eπ[k=0∑∞γkkRt+k+1∣St=s,At=a]
末来可以获得多少的奖励,它的这个期望取决于你当前的状态和当前的行为。这个 Q Q Q 函数是强化学习算法里面要学习的一个函数。因为当我们得到这个 Q Q Q 函数后,进入某一种状态,它最优的行 为就可以通过这个 Q Q Q 函数来得到。
基于策略迭代和基于价值迭代的强化学习方法有什么区别?
-
基于策略迭代的强化学习方法,agent会制定一套动作策略(确定在给定状态下需要采取何种动作),并根据这个策略进行操作。强化学习算法直接对策略进行优化,使制定的策略能够获得最大的奖励;基于价值迭代的强化学习方法,agent不需要制定显式的策略,它维护一个价值表格或价值函数,并通过这个价值表格或价值函数来选取价值最大的动作。
-
基于价值迭代的方法只能应用在不连续的、离散的环境下(如围棋或某些游戏领域),对于行为集合规模庞大、动作连续的场景(如机器人控制领域),其很难学习到较好的结果(此时基于策略迭代的方法能够根据设定的策略来选择连续的动作);
基于价值迭代的强化学习算法有 Q-learning、 Sarsa 等,而基于策略迭代的强化学习算法有策略梯度算法等。
-
Actor-Critic 算法同时使用策略和价值评估来做出决策,其中,智能体会根据策略做出动作,而价值函数会对做出的动作给出价值,这样可以在原有的策略梯度算法的基础上加速学习过程,取得更好的效果。
有模型(model-based)学习和免模型(model-free)学习有什么区别?
-
针对是否需要对真实环境建模,强化学习可以分为有模型学习和免模型学习。
有模型学习是指根据环境中的经验,构建一个虚拟世界,同时在真实环境和虚拟世界中学习;
-
免模型学习是指不对环境进行建模,直接与真实环境进行交互来学习到最优策略。总的来说,有模型学习相比于免模型学习仅仅多出一个步骤,即对真实环境进行建模。强化学习是一种机器学习范式,主要关注在一个智能体与环境的交互中,通过尝试和错误的方式来学习如何采取行动以获得最大的奖励。在强化学习中,智能体根据当前的状态选择动作,然后与环境交互,观察环境的反馈(奖励或惩罚),并调整其策略,以最大化长期累积奖励。强化学习通常涉及建立一个值函数或策略函数来指导智能体如何做出决策。
-
免模型学习通常属于数据驱动型方法,需要大量的采样来估计状态、动作及奖励函数,从而优化动作策略。免模型学习的泛化性要优于有模型学习,原因是有模型学习算需要对真实环境进行建模,并且虚拟世界与真实环境之间可能还有差异,这限制了有模型学习算法的泛化性。免模型学习是强化学习的一种方法,其特点是使用来自环境的无模型信息进行学习。在免模型学习中,智能体不需要明确地知道环境的转换动力学,即不需要了解状态转移和奖励函数。相反,智能体仅仅通过与环境的交互来学习如何在不同的状态下选择动作,以最大化奖励。免模型学习可以通过基于值函数的方法(如Q-learning)或基于策略的方法(如策略梯度方法)来实现。
因此,强化学习是一个更广泛的概念,而免模型学习是强化学习的一种具体方法。在强化学习中,可以使用模型学习或免模型学习的方法,具体选择取决于任务的特性和要求。
Q-learning
Q-learning是一种基于值函数的强化学习算法。在Q-learning中,我们考虑到环境和智能体之间的交互关系,智能体根据环境给出的奖励信号进行学习和决策。在Q-learning中,我们使用一个值函数Q(s, a),来估计在状态s下采取动作a所获得的累积回报。
Q-learning的目标是学习一个最优的策略,使得智能体在不同的状态下能够选择具有最大累积回报的动作。为了实现这个目标,Q-learning使用了贝尔曼方程来更新值函数估计值。具体来说,Q-learning的更新规则如下:
Q ( s , a ) = Q ( s , a ) + α ( r + γ m a x ( Q ( s ′ , a ′ ) ) − Q ( s , a ) ) Q(s, a) = Q(s, a) + α (r + γ max(Q(s', a')) - Q(s, a)) Q(s,a)=Q(s,a)+α(r+γmax(Q(s′,a′))−Q(s,a))
在每个时间步,智能体通过观察当前状态和采取的动作,接收到一个立即奖励 r r r,并观察到新的状态 s ′ s' s′。然后,根据贝尔曼方程,用这个奖励更新值函数的估计值。其中, α α α是学习率, γ γ γ是折扣因子,用来平衡当前奖励和未来奖励的重要性。
通过不断地与环境交互和更新值函数,Q-learning学习到每个状态下采取不同动作的最优估计值。最终,通过选择具有最大估计值的动作,智能体能够根据当前状态做出最优的决策。
因此,Q-learning是一种基于值函数的强化学习方法,通过对值函数的学习和更新来实现智能体的决策和行为优化。