强化学习笔记-0910 On-policy Method with Approximation

news/2024/5/18 23:06:15 标签: 笔记, 强化学习, Sarsa, TD learning, Q-learning

前几章我们所讨论的强化学习方法都是将价值函数v(s)建模为一个table形式,通过状态s来查询具体状态的价值。但是当状态-动作空间极大,且多数状态-动作并没有太大意义时,这种table查询效率是极低的。

因此本节是将价值函数建模为一个参数模型v(s|w),其中w是该价值预估模型的参数,而状态s是价值预估模型的输出,通过模型来输出该状态的价值预估。

1. supervised learning

那么如何来学习这个模型,该模型主要在于拟合状态的价值,该价值可以表示为最优动作决策下的最优收益G_\pi(s)。为了拟合这个函数,采用来监督学习的方式,定义如下学习损失The Prediction Objective (VE):

\bar{VE}(w)=\sum_s \mu (s)[G_\pi (s)-v(s|w)]^2

上式中的\mu(s)表示状态s的出现概率,满足\sum_s \mu(s)=1,假设\eta(s)表示单个episode中状态s的平均出现次数,h(s)表示状态s出现在单个episode的初始状态的概率。

\eta(s)=h(s)+\sum_{​{s}'}\eta (s')\sum_a \pi(a|s')p(s,r|s',a)

\mu(s)=\frac{\eta (s)}{\sum_{s'}\eta(s')}

2. Stochastic-gradient and Semi-gradient Methods

求解模型参数采用SGD的进行优化:

w_{t+1}=w_t - \frac{1}{2}\alpha \partial_w[G_\pi(s)-v(s|w)]^2=w_t + \alpha[G_\pi(s)-v(s|w)]\partial_w v(s|w)

上式中的G_\pi(s)表示在决策函数\pi下的状态价值,我们可以通过MC方法通过采样获得累积奖励来计算。

另一种方法是通过TD或者DP算法类似的bootstrapping方法,通过一个预估值U(s)来取代真实采样的累积收益G_\pi(s)。这种方式称为Semi-gradient Methods。

  • 动态规划:U_t(s) = \sum_{s'} [r + \gamma v(s'|w)] \sum_a \pi(a|s')p(s, r|s',a)
  • TD(0):U_t(s)=r_{t+1} + \gamma v(s_{t+1}|w)
  • TD(n):U_t(s)=\sum_{i=0}^{n-1}\gamma^{i} r_{t+i+1} + \gamma^{n} v(s_{t+n}|w)

3. Episodic Semi-gradient Control

前面讨论了如何通过模型来估计价值函数,接下来我们很容易结合GPI策略,构造value estimate、policy improve的两步强化学习过程TD(0) on-policy sarsa:

同时TD(n) on-policy sarsa可以表示为如下,可以看出其主要是将原来的table方法中的Q(s,a)值更新替换为价值预估模型中参数更新。

4. Average Reward: Continuing Tasks 

 之前在求解累积收益G_t时,引入了一个折扣因子\gamma,其主要有两部分原因:一是为了避免累积收益值不收敛,另一个是考虑到近期收益影响更大。然而当面临一个连续动作场景(没有开始状态以及最终状态)时,后者假设就是有问题的,特别是处于某种均衡的摇摆状态时,添加折扣将会丢失未来的状态信息。因此存在另一式Average Reward的方式,其也可以避免累积收益值不收敛。

首先定义决策\pi下的平均收益:

r(\pi)=\sum_s \mu_{\pi}(s)\sum_a\pi(a|s)\sum_{s'}p(s,r|s',a)r

此外定义了差分累积收益G_t

G_t=r_{t+1}-r(\pi)+r_{t+2}-r(\pi)+... = \sum_{i=1} (r_{t+i}-r(\pi))

TD(n)形式下可以定义为:

G_t=\sum_{i=1}^n(r_{t+i}-r(\pi))+v(s_{t+n}|w)

\delta_t(s_t)=G_t(s)-v(s|w)=\sum_{i=1}^n(r_{t+i}-r(\pi))+v(s_{t+n}|w)-v(s_t|w)

平均收益可以如下方式进行迭代:

r_{t+1}(\pi)=\frac{1}{t+1}\sum_i^{t+1} r_i =r_{t}(\pi) + \frac{1}{t+1}(r_t-r_{t}(\pi))\\ =r_{t}(\pi) + \beta (\sum_{i}^n[r_t - r_{t}(\pi)]+v(s_{t+n}|w)-v(s_t|w))

此时基于TD(n)的on-policy Sarsa的算法描述如下:


http://www.niftyadmin.cn/n/430071.html

相关文章

sublime

—– BEGIN LICENSE —– TwitterInc 200 User License EA7E-890007 1D77F72E 390CDD93 4DCBA022 FAF60790 61AA12C0 A37081C5 D0316412 4584D136 94D7F7D4 95BC8C1C 527DA828 560BB037 D1EDDD8C AE7B379F 50C9D69D B35179EF 2FE898C4 8E4277A8 555CE714 E1FB0E43 D5D52613 C3D…

网络安全(黑客)工具

1.Nmap 它是网络管理员 必用的软件之一,以及用以评估网络系统安全。正如大多数被用于网络安全的工具,nmap 也是不少黑客及骇客(又称脚本小子 )爱用的工具 。系统管理员可以利用nmap来探测工作环境中未经批准使用的服务器&#xff…

工具应用问题处理

目录 eclipseIdea eclipse 更改eclipse字体: window - Preferences - General --> Appearance --> Colors and Fonts - Java–>Java Editors Text Font(set to default:Text Font) 在弹出的窗口选择要更改的字体样式 点击确定,最后apply即可 …

C语言---认识动态内存管理并实现一个动态通讯录:静态通讯录别来沾边

文章目录 前言🌟一、为什么存在动态内存分配🌟二、动态内存函数的介绍🌏2.1.malloc函数free函数🌏2.2.calloc函数free函数🌏2.3.realloc函数 🌟三、常见的动态内存错误🌏3.1.对NULL指针的解引用…

力扣 1483. 树节点的第 K 个祖先

力扣 1483. 树节点的第 K 个祖先 题目地址:https://leetcode.cn/problems/kth-ancestor-of-a-tree-node/ 暴力查找(超时)哈希查找(超空间)树上倍增 预处理 ancestor 数组记录了第 i 个 node 的倍增祖先&#xff0c…

深入理解asmdef

在Unity项目的开发过程中,我们经常需要使用各种第三方库,而这些库常常在构建时会导致无法正常编译。为了避免这种问题,Unity引入了asmdef,来解决依赖管理问题。本文将从多个方面来深入阐述asmdef的使用。 一、asmdef的概念 asmd…

Java学习笔记(视频:韩顺平老师)4.0

如果你喜欢这篇文章的话,请给作者点赞哟,你的支持是我不断前进的动力。 因为作者能力水平有限,欢迎各位大佬指导。 目录 如果你喜欢这篇文章的话,请给作者点赞哟,你的支持是我不断前进的动力。 控制结构 顺序 分…

轻松掌握mybatis扩展点

MyBatis提供4个扩展点: 1、Executor执行器接口扩展点 用于执行一系列的SQL操作,底层是使用StatementHandler接口进行原子的SQL操作,Executor在StatementHandler之上进行了一层包装,比如ReuseExecutor执行器,在上层包…