强化学习
强化学习
- 基本概念
- 智能体(agent)
- 环境(environment)
马尔可夫决策过程:智能体与环境交互进行学习最终实现目标的过程就是马尔可夫决策过程(Markov Decision Process,MDP):智能体与环境交互的过程:在t时刻,智能体在当前状态\(S_t\)采取动作 \(A_t\)。在下一时刻 \(t+1\),智能体接收到环境反馈的对于动作 \(A_t\)的奖励 \(R_{t+1}\),以及该时刻状态 \(S_{t+1}\)。从而,MDP和智能体共同给出一个轨迹: \[S_0, A_0, R_1, S_1, A_1, R_2, S_2, A_2, R_3, S_3, A_3, ...\] \(S_t\)是有限状态的集合,\(A_t\)是有限动作的集合,\(P\)是基于环境的状态转移矩阵:其中每一个项为智能体在某个状态下\(s\)下,采取动作 \(a\)后,与环境交互后转移到其它状态 \(s'\)的概率值,表示为 \(P(S_{t+1}=s'|s_t = s, a_t = a)\)。
R是奖励函数:智能体在某个状态\(s\)下,采取动作a后,与环境交互后所获得的奖励,表示为\(R(s_t = s, a_t = a)\)。 \(\gamma\)是折扣因子(discounted factor), 取值区间为[0,1]。
所以MDP过程可以表示为 \((S,A,P,R,\gamma)\),如果该过程中的状态转移矩阵\(P\)和奖励 \(R(s,a)\)对智能体都是可见的,称这样的Agent为Model-based Agent,否则称为Model-free Agent。
策略梯度定理:策略函数的参数化可表示为 \(\pi_{\theta}(s,a)\),其中\(\theta\)为一组参数,函数取值表示在状态 \(s\)下选择动作a的概率。为了优化策略函数,首先需要有一个对策略函数优劣进行衡量的标准。假设强化学习问题的初始状态为 \(s_0\),则希望达到最大化的目标为: \[J(\theta):=V_{\pi_\theta}(s_0)\] 其中, \(v_{\pi_theta}\)是在策略 \(\pi_{\theta}\)下的真实价值函数,这个价值函数代表衡量一个状态的价值,即一个状态采取所有行为后的一个价值的期望值。如果能求出梯度\(\nabla_{\theta}J(\theta)\),就可以用梯度上升法求解这个问题,即求解价值函数的最大值。
在这个函数中,\(J(\theta)\)既依赖于动作的选择,又依赖于动作选择时所处状态的分布。给定一个状态,策略参数对动作选择及收益的影响可以根据参数比较直观地计算出来,但因为状态分布和环境有关,所以策略参数对动作选择及收益的影响可以根据参数比较直观地计算出来,但因为状态分布和环境有关,所以策略对状态分布的影响一般很难确切知道。\(J(\theta)\)对模型参数的梯度却依赖于这种未知的影响,那么如何估计这个梯度呢。Sutton 等人在文献中给出了这个梯度的表达式: \[\nabla_\theta J(\theta)\propto\sum_s\mu_{\pi_\theta}(s)\sum_aq_{\pi_\theta}(s,a)\nabla_\theta\pi_\theta(s,a)\] 其中,\(\mu_{\pi_\theta}(s)\)称为策略 \(\pi_{theta}\) 的策略分布。在持续问题中,\(\mu_{\pi_\theta}(s)\)为算法 \(s_0\)出发经过无限多步后位于状态 \(s\)的概率。
蒙特卡洛策略梯度定理:更具策略梯度定理表达式计算策略梯度并不是一个简单的问题,其中对\(\mu_{\pi_\theta}\)和 \(q{\pi_\theta}\)的准确比较难。用蒙特卡洛法能用来估计这类问题的取值。
REINFORCE算法:REINFORCE(蒙特卡洛策略梯度)算法是一种策略参数学习方法,其中策略参数 \(\theta\) 的更新方法为梯度上升法,它的目标是为了最大化性能指标 \(J(\theta)\),其更新公式为:
\[\theta_{t+1}=\theta_t+\alpha\widehat{\nabla J(\theta_t)}\] 根据蒙特卡洛定理中对 \(\nabla_\theta J(\theta)\) 的计算,则有:
\[\nabla_\theta J(\theta)=\mathbb{E}_{s,a\sim\pi}[G_t\nabla_\theta\ln\pi_\theta(s,a)]\] 根据上述梯度更新公式,得到蒙特卡洛策略梯度更新公式:
\[\theta=\theta+\eta\gamma^{'}G\nabla_\theta\ln\pi_\theta(s_t,a_t)\] 其中, \(\Eta\)为学习率,\(\gamma'\)为衰减率,在REINFORCE算法中,暂不考虑衰减问题,设置\(\gamma'=1\)。
REINFOCE算法流程: 输入:马尔可夫决策过程\(MDP=(S,A,P,R,\gamma)\),即状态,智能体,决策,奖励和折现系数。输出:策略 \(\pi(a|s,\theta)\)。即在状态为\(s\),参数为\(\theta\)的条件下,选择动作a的概率,具体流程如下:
- 随机初始化;
- repeat
- 根据一个策略\(\pi_{\theta}\)采样一个片段(episode,即智能体由初始状态不断通过动作与环境交互,直至终止状态的过程),得到\(s_0,a_0,R_1,s_1,a_1,r_2,...,s_{T-1},a_{T-1},R_T\);
- for t \(\leftarrow\) 0 to \(T-1\) do \(G =\sum_{k=t}^{T-t}\gamma_{k-t}R_{t+k}\);G是对回报的计算,回报是奖励随时间步的积累,这里 \(\gamma=1\)。 \(\theta=\theta+\eta \gamma' G\nabla_\theta\ln\pi_\theta(s_t,a_t)\);其中\(\eta\)是学习率,策略梯度采用神经网络来拟合策略梯度函数,计算策略梯度用于优化策略网络。
- end for
- until 收敛;
SARSA(State-Action-Reward-State-Action)是一个学习马尔可夫决策过程策略的算法,通常用于机器学习和强化学习领域中。其学习更新函数依赖的5个值:**当前状态S1,当前状态选中的动作A1,获得的奖励Reward,S1状态下执行A1后取得的状态S2及S2状态下将会执行的动作A2。核心思想简化为: \[Q(S_t,A_t)=Q(S_t,A_t)+\alpha[R_{t+1}+\gamma Q(S_{t+1},A_{t+1})-Q(S_t,A_t)]\]
其中, \(Q(S_{t+1},A_{t+1})\) 是下一时刻的状态和实际采取的行动对应的Q值,\(Q(S_{t},A_{t})\)是当前时刻的状态和实际采取的行动对应的Q值,折扣因子\(\gamma\)的取值范围为[0,1],其本质是一个衰减值,如果gamma更接近0,agent趋向于只考虑瞬时奖励值;反之如果接近1,则agent为延迟奖励赋予更大的权重,侧重于延迟奖励;奖励值\(R_{t+1}\)为 t+1时刻得到的奖励值,\(\alpha\)是学习率。
Q-Learning:Q-Learning属于值函数近似算法中,蒙特卡洛方法和时间差分法结合的算法。Q-Learning假设可能出现的动作a和状态S是有限多 ,这时a和S的全部组合也是有限多个,并且引入价值量Q表示智能体认为做出某个a时所能够获得的利益。在这种假设下,智能体收到S,选择可以产生最大的Q的a。
- Q-learning的训练过程就是Q表的Q值逐渐调整的过程,其核心是根据已经知道的Q值,当前选择行动a作用于环境获得的回报R,和下一轮\(S_{t+1}\)对应可以获得的最大利益Q,总共3个量,进行加权求和算出新的Q值,来更新Q表: \[Q(S_t,A_t)=Q(S_t,A_t)+\alpha[R_{t+1}+\gamma max Q(S_{t+1},a)-Q(S_t,A_t)]\]
其中,\(Q(S_{t+1},a)\)是在\(t+1\)时刻的状态和采取的行动(并不是实际行动,所以公式采用了所有可能采取行动的Q的最大值)对应的Q值,\(Q(S_{t},a_t)\) 是当前时刻的状态和实际采取的行动对应的Q值,折扣因子 \(\gamma\)的取值范围为[0,1]。
Q-Learning的缺点是有限且离散的状态。
DQN:当状态比较多的时候,Q表格很难进行存储。为了解决这个问题,一种解决方案是将Q表格参数化,使用深度神经网络拟合动作价值函数\(q_{\pi}\)。参数化可以解决无限状态下的动作价值函数的存储问题,因为算法只需记住一组参数,动作价值函数的具体值可根据这一组参数算出。
但是,动作价值函数的参数化也会带来一些新的问题:因为相邻样本来自同一条轨迹,会导致样本间关联性过强,而集中优化关联性过强的样本会导致神经网络处理其他样本时无法取得较好的结果。有人提出了深度Q网络(Deep Q-Network,DQN),其本质是Q-learning算法,但使用深度学习网络拟合Q函数,解决了无线状态下的动作价值函数存储问题,同时采用经验重现(Experience Replay)和固定Q目标(Fixed-Q-Target)两个创新点来解决上述问题。
- 经验重现(Experience Replay):使用一个经验池存储多条经验\(s,a,r,s'\),再从中随机抽取一批用于训练,很好地解决了样本关联性的问题,同时,因为经验池里的经验可以得到重复利用,也提升了效率。
- 固定Q目标(Fixed-Q-target):复制一个和原来Q网络结构一样的Target Q网络,用于计算Q目标值,这样在原来的Q网络中,target Q就是一个固定的数值,不会再产生优化目标不明确的问题。
流程:再DQN算法中,智能体会在与所处环境中\(environment\)进行交互后,获得一个环境提供的状态 \(s_t\)。接受状态后,智能体会根据深度学习网络预测出在该状态下不同行动\(action\)对应的Q值,并给出一个行动\(a_t\),当行动反馈给环境后,环境会给出对应的奖励\(r_t\)、新的状态\(s_{t+1}\),以及是否触发终止条件\(done\),每一次交互完成后,DQN算法都会将 \(s_t, a_t, r_t, s_{t+1}, done\)作为一条经验存储在经验池中,每次会从经验池中抽取一定量的经验作为输入数据训练神经网络。
具体流程:
- 初始化经验池,随机初始化Q网络;
- for episode=1,M do:
- 重置环境,获得第一个状态;
- for t=1, T do:
用 \(\epsilon- greedy\)策略生成一个action;其中有 \(\epsilon\) 的概率会随机选择一个action,即为探索模式;其它情况下,则 \(a_t = max_a Q(s_t,a;\theta)\),选择在 \(s_t\)状态下使得Q最大的action,即为经验模式;
根据动作与环境的交互,获得反馈的reward \(r_t\)、下一个状态 \(s_{t+1}\)和是否触发终止条件done。
将经验 \(s_t, a_t, r_t, s_{t+1},done\) 存入经验池;
从经验池中随机获取一个minibatch的经验;
\(\left.Qtarget_t=\left\{\begin{array}{c}r_t,\quad if done\\r_t+\gamma max_{a^{\prime}}Qtarget(s_{t+1},a^{'};\theta),\quad if not done\end{array}\right.\right.\)
根据\(Qpred_t\)和 \(Qtarget_t\)求loss,梯度下降法更新Q网络。
- end for
- 每隔固定个episode,更新Qtarget网络
- end for
Actor-Critic:在REINFORCE算法中,每次需要根据一个策略采集一条完整的轨迹,并计算这条轨迹上的回报,这种采样的方式的方差比较大,学习效率比较低。可以借鉴时序差分学习的思路,使用动态规划来提高采样的效率,即从状态s开始的总回报可以通过当前动作的即时奖励\(r(s,a,s')\)和下一个状态\(s'\)的值函数来近似估计。 演员-评论家算法(Actor-Critic)是一种结合策略梯度和时序差分学习的强化学习算法,包括:演员(Actor)和评价者(Critic),跟生成对抗网络(GAN)的流程类似:
- 演员(Actor)是指策略函数 \(\pi_{\theta}(a|s)\),即学习一个策略来得到尽量高的回报,用于生成动作(Action)并和环境交互。
- 评论家(Critic)是指值函数\(V^{\pi}(s)\),对当前策略的值函数进行估计,即评估演员的好坏。用于评估Actor的表现,并指导Actor下一阶段的动作。
借助于值函数,演员-评论家算法可以进行单步更新参数,不需要等到回合结束才进行更新。 在Actor-Critic算法里,最知名的方法就是A3C(Asynchronous Advantage Actor-Critic)。
- 如果去掉Asynchronous,只有Advantage Actor-Critic,就叫做A2C。
- 如果加上了Asynchronous,变成Asynchronous Advantage Actor-Critic,就变成A3C。
Actor-Critic是Q-learning和Policy Gradient的结合,为了导出Actor-Critic算法,必须先了解Policy Gradient算法是如何一步步优化策略的。
参考链接
https://paddlepedia.readthedocs.io/en/latest/tutorials/reinforcement_learning/index.html
, PaddlePaddle 强化学习