强化学习入门学习记录

xiaoxiao2021-02-28  61

最近学习了RL, 感觉RL属于机器学习中比较有意思的一个领域,监督学习、无监督学习都是扔一堆静止的数据去训练你的模型,而强化学习是让模型与环境的交互中进行学习,让人感觉更像一种有智慧的生物(然而并不是)。比如需要让机器学会玩一个游戏

有两种方法: 1. 有监督学习 (专家级玩家玩无数次,记录下结果作为有标记数据) 2. 强化学习

强化学习是在与环境的交互中不断得到反馈进行学习的,就像一个真实的生命,基本流程如下图所示。

上图中的Agent可以理解为我们的模型,在它与环境交互的过程中,不断感知环境的状态,从而做出决策,采取某个action,然后再从环境中得到reward,根据reward的大小来调整自己的策略。

强化学习在经典物理学的认知范畴内,认为时间可以切分成若干有严格先后顺序的时刻,因此可以形成

(s0,a0,r0,s1,a1,r1,...,st,at,rt)

这样的状态,动作和回报系列。

强化学习还有一个重要的确定性假设,也就是说,对于某个输入状态 s0 ,无论进行多少次试验,只要都采取某个动作 a0 ,输出的结果也是一样的,就像编程中的纯函数,没有side effects。这样才能让模型学习到如何根据不同的状态做出最优的决策。

有了时间和确定性的假设,就有了MDP(Markov Decision Process) 这个概念用于描述这个世界。

马尔科夫决策过程(MDP)

MDP的假设:未来只取决于当前。如果我们站在上帝视角下看,我们知道这个世界的每个物体的状态,那么未来的变化只跟当前的状态相关,和过去没有关系。用公式表示也就是

P(st+1|st)=P(st+1|st,st1,...,s1,s0)

即下一时刻的状态取决于当前的状态与动作。这里的状态指的是完全可观察的全部环境状态。

估值函数

使用强化学习的目标是为了让模型学习成为特定场景下的master,比如玩一个游戏,根据环境的变化采取相应的动作,取得尽量高的rewards。那么评价这个模型是否优秀,就看使用它能否取得尽量高的rewards。因此我们需要去量化rewards。

R=r1+r2+r3+···+rnRt=rt+rt+1+rt+2+···+rn

上述公式中 R 表示总的rewards, Rt 表示某一时刻总的rewards等于当前及时反馈的回报加上未来时刻直到终结的rewards。也就是等于对未来回报的期望。

实际中我们一般会使用一个小于1的值 γ 来降低未来回报的权重,也就是当下的反馈比较重要,时间越久影响越小。

Rt=rt+γrt+1+γ2rt+1+···γntrn=rt+γ(rt+1+γ(rt+1+···))=rt+γRt+1

因此一个好的模型,就是能够做出决策,使得 Rt 最大的模型。

估值函数用 V(x) 来表示,表示从状态 x 出发所得到的最大累积回报。

Value-Action 函数

定义Q(s,a)表示采取动作 a 时得到的最大累积回报。 Q(st,at)=maxRt 1

也称为Q-function : 代表在给定状态下采取动作a的Quality。

我们的模型也就是要学习到这么一个Q-function,使得输入给定的状态,能够返回每个action的Q值,然后选取Q值最大的action。

π(s)=argmaxQ(s,a)

Q-Learning

接下来的问题就是如何得到Q-function , 根据Bellman Equation

Q(s,a)=r+γmaxaQ(s,a)

最简单的情形,所有状态是离散的,可以列举出所有的状态与动作。那么就可以给出Q矩阵,这时候Q函数就是一个查表的过程,我们的目的就是要将矩阵中填上相应的值。迭代的过程如下:

使用任意值初始化Q[num_states, num_actions]获取初始状态s repeat 选取并执行一个动作a 获取reward r 以及新的状态s’ 更新 Q[s,a]=Q[s,a]+α(r+γmaxaQ[s,a]Q[s,a]) until 终止条件

现实场景中,这种求解Q函数的方案是不实用的,因为状态与动作必须全部列举出来,比如输入的状态是原始的图像,那Q矩阵就可能非常大.. 比如

拟合Q-Function

因为现实中存在无法穷举所有状态的情形,因此使用一个带有参数的函数来近似Q函数

Q(s,a;θ)Q(s,a)

可以使用神经网络来拟合Q函数,这个神经网络称为Q-Network。

如上图所示,神经网络接收输入状态,输出每个action的Q值。参数 θ 指的就是神经网络中的权值。

如何求解 θ 又回到有监督学习的范畴了,虽然说强化学习不属于有监督学习,但并不意味着学习的过程中不需要用到有监督学习,而是有监督学习的target不是人为标注的,是在与环境的互动中得到的。

因为我们的目标是估计Q值,Q值是连续的,因此是一个回归问题。那么目标函数可以选择MSE(最小均方差)。即

L=E[(r+γmaxaQ(s,a)Q(s,a))2] 因此梯度为 L(w)w=E[(r+γmaxaQ(s,a)Q(s,a))Q(s,a,w)w]

使用梯度下降优化迭代优化目标函数即可。

算法稳定性问题

有了Q-Network与训练样本,就可以开始训练模型了,但是Q-Network 有可能不稳定,导致不收敛。

因为神经网络有两个假设:

训练数据集符合i.i.d.(独立同分布)条件数据分布是固定的

而在强化学习中 1. 不同时刻的状态是高度相关的。 2. 数据分布有可能改变。

因为state影响action的选取,action又导致下一个state,如果将一把游戏的所有state,action,reward作为一个batch给神经网络训练,那么不同batch的数据集的数据分布是可能不一致的。

Google的文章 [Human-level control through deep reinforcement learning]中使用Experience Replay(经验回放)策略解决上述问题。

Experience Replay

这个策略其实就是创建一个replay memory D ,将训练过程中的样本(st,at,rt 1,st 1)都存入 D 中,在每次迭代更新的时候,从D中随机抽取一个mini-batch (s,a,r,s)

采用这个策略就可以消除样本间的相关性,并且使数据集的分布尽量保持不变。 实践中 D 通常保持一个固定的大小N,仅保存最近的的 N 个样本。

如何获取尽量全的样本

我们希望学习出一个模型,对于任意的状态,都能给出最优的action。在凑齐样本集的问题上就是,怎样获取尽量丰富的(s,a,r,s)。样本的获取都是通过与环境交互(玩游戏)来收集,也就是我们的算法需要决定使用什么action。Q-Network的权值是随机初始化的,在训练的开始阶段,并不是一个最优的神经网络。若将状态输入此时的网络,并使用它判断得出的action,则可能得出的数据是倾斜的,如都判断应该使用同一种action,使用这样的样本进行有监督学习,Q-Network必然趋向于这一种action。因此这样无法得出一个良好的模型。

所以在训练的开始阶段,应该增加样本的随机性,使用随机策略随机选取action。而在后期减少使用随机策略,使用训练出的Q-Network判断选取action。 即Exploration-Exploitation 策略。

Exploration-Exploitation

Exploration-Exploitation(探索-利用)策略即同时有两种选取action的方法,探索表示随机选取action,利用表示使用Q-Network判断得出的action。 实践中,使用 ϵgreedy 方法来决定使用探索还是利用。也就是在每一次需要选取action时, 有 ϵ 的概率选用探索策略,有 1ϵ 的概率选用利用策略。 ϵ 在训练的过程中逐渐减少(前期需要更多的探索,丰富样本空间,待样本空间探索完毕后,则尽量使用Q-Network)。

算法流程

转载请注明原文地址: https://www.6miu.com/read-57504.html

最新回复(0)