-
value-based,价值学习:DQN。构建一个神经网络,输入是state,有多个输出对应采取每个action到最后所能获得的累加奖励Q-value。一开始这个网络估计出来的Q-value很差,我们使用TD算法,让
\[target = r(a_t|s_t) + \lambda Q(s_{t+1},a_{t+1};w) \]\(\lambda\)是奖励折扣率,让网络在t时刻的输出尽可能与target相近,以此使用梯度下降更新参数。
- TD算法过程:
- 观察到环境状态\(s_t\);
- 将\(s_t\)输入到动作价值网络\(q(s,a;w_t)\)得到\(t\)时刻的动作价值\(Q(s_t,a_t;w_t)\)并抽样得到动作\(a_t\);
- agent使用动作\(a_t\)与环境进行交互得到时刻\(t\)的奖励\(r_t\)和新的环境状态\(s_{t+1}\),将\(s_{t+1}\)输入动作价值网络,得到下个时刻的动作价值\(Q(s_{t+1},a_{t+1};w_t)\);
- 计算得到目标函数:\(y_t = r_t + \lambda Q(s_{t+1},a_{t+1};w_t)\)与\(Q(s_t,a_t;w_t)\)的均方误差作为损失更新网络参数;
- TD算法过程:
-
policy-based,策略学习:学习一个policy,目标是使得状态价值函数的值最大化。构建一个神经网络,其输入是state,输出是所有action的概率。使用的算法是策略梯度上升。
-
state-value function:状态价值函数,从某个状态到结束所能累计的奖励的期望值。
\[V(s;\theta) = \sum_a \pi (a|s;\theta)Q_\pi (s,a) \] -
训练一个policy——\(\pi\),以获得最大化的状态价值为目标。policy gradient算法就是对于状态价值函数的梯度上升算法:
\[\begin{aligned} \frac{\partial V(s;\theta)}{\partial \theta} &= \sum_a \frac{\partial \pi(a|s;\theta)}{\partial\theta}Q_\pi(s,a) \\ &=\sum_a \pi(a|s;\theta)\frac{\partial log\pi(a|s;\theta)}{\partial \theta}Q(s,a) \\ &= \mathbb{E}_{A\sim \pi(a|s;\theta)} [\frac{\partial log \pi(A|s;\theta)}{\partial \theta}Q_\pi(s,A)] \end{aligned} \]这里的变形使得连加变成了求期望,如果动作是离散的,我们使用原始的求和形式;如果动作是连续的,我们使用变形后的求期望的形式,另外此时我们还没有定义动作价值函数的形式。
-
对于\(a\)是连续动作,我们的目标是求得给定policy下的\(\frac{\partial log\pi (A|s;\theta)}{\partial\theta}Q_\pi(s,A)\)的期望,也就是求\(\pi(A|s;\theta)\frac{\partial\pi(A|s;\theta)}{\partial\theta}Q_\pi(s,A)\)的积分,但是\(\pi(s,A)\)是一个神经网络,我们没办法直接求积分,只能采用蒙特卡洛近似。
- 蒙克卡罗近似:
- 从\(\pi(A|s;\theta)\)中随机抽出一个动作\(\hat a\);
- 计算\(g(\hat a,\theta) = \frac{\partial log\pi(\hat a|s;\theta)}{\partial \theta}Q_\pi(s,\hat a)\);(还不知道动作价值函数的定义)
- 使用\(g(\hat a,\theta)\)作为策略梯度\(\frac{\partial V(s;\theta)}{\partial \theta}\)的近似。
- 事实上蒙特卡洛也适用于动作是离散时的情况。
- 蒙克卡罗近似:
-
策略梯度算法过程:
- 观测到环境状态\(s_t\);
- 从policy策略\(\pi(A|s_t;\theta_t)\)(动作的概率密度函数)中随机抽样一个动作\(a_t\);
- 计算动作价值函数:\(q_t \approx Q_\pi(s_t,a_t)\);(还不知道动作价值函数的定义)
- 对策略网络求导数:\(d_{\theta,t} = \frac{\partial log\pi(a_t|s_t;\theta)}{\partial \theta}\);
- 计算近似策略梯度:\(g(a_t,\theta_t) = d_{\theta,t} \cdot q_t\);
- 更新策略网络的参数:\(\theta_{t + 1} = \theta_t + \lambda \cdot g(a_t,\theta_t)\)。
-
在上面的算法中还没有对于动作价值函数\(q_t \approx Q_\pi(s,a)\)的定义,下面介绍两种\(q_t\)的近似:
-
REINFORCE算法.
-
REINFORCE算法使用一个策略进行一个序列\(\tau\);
-
使用这个序列提供的信息计算时刻\(t\)往后的累计折扣奖励\(u_t = \sum_{k = t}^\tau \gamma ^{k - t}r_k\);
-
由于动作价值函数\(Q_\pi(s_t,a_t) = \mathbb{E}[U_t]\),是在时刻\(t\)采用动作\(a\)的累计折扣奖励的期望值,因此可以用\(u_t\)近似它;
-
令\(q_t = u_t\)。
- REINFORCE算法需要执行一次完整的序列才能更新一次策略网络的参数。
-
-
actor-critic算法:
- 这种算法使用额外的一个神经网络来近似动作价值函数\(Q_\pi(s,a)\),见下面。
-
-
-
actor-critic算法:上面的两种价值学习和策略学习分别学习一个价值网络和一个策略网络,如果将两种方法结合起来,就成为了actior-critic算法。
-
策略网络\(\pi(a|s;\theta)\)用来近似策略\(\pi(a|s)\);
-
动作价值网络\(q(s,a;w)\)用来近似动作价值函数\(Q_\pi(s,a)\);
- 输入:状态s和动作a。
- 输出:动作价值(标量)。
-
状态价值函数可以被策略网络和价值网络近似:\(V_\pi(s) = \sum_a\pi(a|s)\cdot Q(s,a) \approx \sum_a \pi(a|s;\theta)\cdot q(s,a;w)\)。
-
网络训练:
- 观察到环境状态\(s_t\);
- 将状态\(s_t\)输入到策略网络\(\pi(A|s_t;\theta_t)\)得到概率输出,再从输出中抽样出一个动作\(a_t\);
- agent执行动作\(a_t\)与环境交互得到奖励\(r_t\)和新的状态\(s_{t+1}\);
- 将状态\(s_{t+1}\)输入策略网络抽样得到动作\(\hat a_{t+1}\);(这个动作并不执行,只是给动作价值网络使用TD算法提供输入)
- 使用TD算法更新动作价值网络的参数(见上);
- 计算两个动作价值\(q_t = q(s_t,a_t;w_t)\)和\(q_{t+1} = q(s_{t+1},\hat a_{t+1};w_t)\);
- 计算TD误差:\(\delta_t = q_t - (r_t + \lambda(q_{t+1}))\);
- 对动作价值网络的参数求导;
- 使用梯度下降更新动作价值网络。
- 使用策略梯度算法更新策略网络的参数(见上)。
- 依据动作价值网络对动作的评分\(q_t\)和策略网络对参数的导数\(d_{\theta,t} = \frac{\partial log\pi(a_t|s_t;\theta)}{\partial \theta}\)计算得到\(g(a_t,\theta_t) = q_t \cdot d_{\theta,t}\);
- 对状态价值的近似\(g(a_g,\theta_t)\)以梯度上升更行策略网络参数:\(\theta_{t+1} = \theta_t + \gamma g(a_t,\theta_t)\)。
- 需要注意的是在第六步中\(g(a_t,\theta_t) = q_t\cdot d_{\theta,t}\)有的论文和书本中使用的是TD error\(\delta_t\)而不是\(q_t\)。使用\(q_t\)是标准的策略梯度算法,使用TD error称为policy gradient with baseline。
-
深度强化学习
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
上一篇:css3中的2D转换

提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
【强化学习】深度强化学习入门介绍
深度强化学习是一种机器学习,其中智能体(Agent,也翻译作代理)通过执行操作(Action)和查看结果(R
游戏 算法 python 机器学习 人工智能 -
深度强化学习智能交通 (I) :深度强化学习概述
一文了解强化学习,Q-learning,DQN,DDPG等。
强化学习 智能交通 神经网络 -
深度学习系列——6、深度强化学习
5
深度学习 强化学习 监督学习 数据 -
c#加权健public static Tuple<string, HttpResponseHeaders> HttpPost(string req
在VS.NET 中,我们可以很方便地使用属性窗口来对某个控件的属性进行设置,那么,我们有没有想过,如果在应用程序中,在对程序中的自定义的属性进行设置时,显示一个象属性窗口一样的窗体,能对其中的属性方便的设置呢?就象下图所示的一样。 答案是完全可以的。我们可以使用微软提供的property属性控件来实现该功能。首先,我们 新建一个c#的 windows应用程序,之后在 工具箱中,鼠标右键点选工具
c# string email components security