首页 > 其他分享 >强化学习 6 ——价值函数逼近 (VFA)

强化学习 6 ——价值函数逼近 (VFA)

时间:2023-02-06 14:01:26浏览次数:68  
标签:Target 逼近 VFA 学习 Sarsa Learning TD 函数


上篇文章​​强化学习——时序差分 (TD) 控制算法 Sarsa 和 Q-Learning​​我们主要介绍了 Sarsa 和 Q-Learning 两种时序差分控制算法,在这两种算法内部都要维护一张 Q 表格,对于小型的强化学习问题是非常灵活高效的。但是在状态和可选动作非常多的问题中,这张Q表格就变得异常巨大,甚至超出内存,而且查找效率极其低下,从而限制了时序差分的应用场景。近些年来,随着神经网络的兴起,基于深度学习的强化学习称为了主流,也就是深度强化学习(DRL)。

一、函数逼近介绍

我们知道限制 Sarsa 和 Q-Learning 的应用场景原因是需要维护一张巨大的 Q 表格,那么我们能不能用其他的方式来代替 Q表格呢?很自然的,就想到了函数。
强化学习 6 ——价值函数逼近 (VFA)_神经网络
也就是说我们可以用一个函数来代替 Q 表格,不断更新 强化学习 6 ——价值函数逼近 (VFA)_强化学习_02


强化学习 6 ——价值函数逼近 (VFA)_强化学习_03

下面是几种不同的拟合方式:

第一种函数接受当前的 状态 S 作为输入,输出拟合后的价值函数

第二种函数同时接受 状态 S 和 动作 a 作为输入,输出拟合后的动作价值函数

第三种函数接受状态 S,输出每个动作对应的动作价值函数 q

常见逼近函数有线性特征组合方式、神经网络、决策树、最近邻等,在这里我们只讨论可微分的拟合函数:线性特征组合和神经网络两种方式。

1、知道真实 V 的函数逼近

对于给定的一个状态 S 我们假定我们知道真实的 强化学习 6 ——价值函数逼近 (VFA)_机器学习_04 ,然后我们经过拟合得到 强化学习 6 ——价值函数逼近 (VFA)_算法_05 ,于是我们就可以使用均方差来计算损失
强化学习 6 ——价值函数逼近 (VFA)_强化学习_06
利用梯度下降去找到局部最小值:
强化学习 6 ——价值函数逼近 (VFA)_算法_07
我们可以提取一些特征向量来表示当前的 状态 S,比如对于 gym 的 CartPole 环境,我们可提取的特征有推车的位置、推车的速度、木杆的角度、木杆的角速度等


强化学习 6 ——价值函数逼近 (VFA)_算法_08

$$ x(s) = (x_1(s), x_2(s), \cdots,x_n(s))^T $$

此时价值函数 就可以用线性特征组合表示:

强化学习 6 ——价值函数逼近 (VFA)_拟合_09

此时的损失函数为:
强化学习 6 ——价值函数逼近 (VFA)_机器学习_10
因此更新规则为:
强化学习 6 ——价值函数逼近 (VFA)_神经网络_11

二、预测过程中的价值函数逼近

因为我们函数逼近的就是 真实的状态价值,所以在实际的强化学习问题中是没有 强化学习 6 ——价值函数逼近 (VFA)_机器学习_04 的,只有奖励。所以在函数逼近过程的监督数据为:
强化学习 6 ——价值函数逼近 (VFA)_算法_13
所以对于蒙特卡洛我们有:
强化学习 6 ——价值函数逼近 (VFA)_强化学习_14
其中奖励 强化学习 6 ——价值函数逼近 (VFA)_神经网络_15 是无偏(unbiased)的:强化学习 6 ——价值函数逼近 (VFA)_强化学习_16

对于TD算法,我们使用 强化学习 6 ——价值函数逼近 (VFA)_拟合_17 来代替 TD Target。所以我们在价值函数逼近(VFA)使用的训练数据如下所示:
强化学习 6 ——价值函数逼近 (VFA)_神经网络_18
于是对于 TD(0) 在预测过程的函数逼近有:
强化学习 6 ——价值函数逼近 (VFA)_机器学习_19
因为TD中的 Target 中包含了预测的 强化学习 6 ——价值函数逼近 (VFA)_算法_20 ,所以它对于真实的 强化学习 6 ——价值函数逼近 (VFA)_机器学习_21 是有偏(biased)的,因为我们的监督数据是我们估计出来的,而不是真实的数据。也就是 强化学习 6 ——价值函数逼近 (VFA)_神经网络_22

三、控制过程中的价值函数逼近

类比于MC 和 TD 在使用 Q 表格时的更新公式,对于策略控制过程我们可以得到如下公式。和上面预测过程一样,我们没有真实的 强化学习 6 ——价值函数逼近 (VFA)_机器学习_23

  • 对于 MC,Target 是 强化学习 6 ——价值函数逼近 (VFA)_机器学习_24

强化学习 6 ——价值函数逼近 (VFA)_机器学习_25

  • 对于 Sarsa,TD Target 是 强化学习 6 ——价值函数逼近 (VFA)_神经网络_26

强化学习 6 ——价值函数逼近 (VFA)_机器学习_27

  • 对于 Q-Learning,TD Target 是 强化学习 6 ——价值函数逼近 (VFA)_神经网络_28

强化学习 6 ——价值函数逼近 (VFA)_强化学习_29

四、关于收敛的问题

强化学习 6 ——价值函数逼近 (VFA)_拟合_30

在上图中,对于使用 Q 表格的问题,不管是MC还是 Sarsa 和 Q-Learning 都能找到最优状态价值。如果是一个大规模的环境,我们采用线性特征拟合,其中MC 和 Sarsa 是可以找到一个近似最优解的。当使用非线性拟合(如神经网络),这三种算法都很难保证能找到一个最优解。

其实对于off-policy 的TD Learning强化学习过程收敛是很困难的,主要有以下原因:

  • 使用函数估计:对于 Sarsa 和 Q-Learning 中价值函数的的近似,其监督数据 Target 是不等于真实值的,因为TD Target 中包含了需要优化的 参数 w,也叫作 半梯度TD,其中会存在误差。
  • Bootstrapping:在更新式子中,上面红色字体过程中有 贝尔曼近似过程,也就是使用之前的估计来估计当前的函数,这个过程中也引入了不确定因素。(在这个过程中MC回比TD好一点,因为MC中代替 Target 的 强化学习 6 ——价值函数逼近 (VFA)_机器学习_24
  • Off-policy 训练:对于 off-policy 策略控制过程中,我们使用 behavior policy 来采集数据,在优化的时候使用另外的 target policy 策略来优化,两种不同的策略会导致价值函数的估计变的很不准确。

上面三个因素就导致了强化学习训练的死亡三角,也是强化学习相对于监督学习训练更加困难的原因。

下一篇就来介绍本系列的第一个深度强化学习算法 Deep Q-Learning(DQN)

参考资料:


标签:Target,逼近,VFA,学习,Sarsa,Learning,TD,函数
From: https://blog.51cto.com/u_11194105/6039063

相关文章

  • web之命令执行常见函数------2023.2.6
     system()函数作用:将字符串作为OS命令执行,自带输出功能。格式:stringsystem(string$command[,int&$return_var])//$command为执行的命令,&return_var可选,用来......
  • 一次项目中Thinkphp绕过禁用函数的实战记录
    目录前言file_put_contentspcntl_execLD_PRELOAD劫持总结 前言在一次渗透测试中,手工找了许久没发现什么东西,抱着尝试的心情打开了xray果然xray还是挺给力的,一......
  • Hive窗口函数中range和rows的区别
    说明聊到hive,就少不了灵活的开窗函数,今天介绍下开窗函数中over子句内部经常会用到的rows和range的用法;数据准备createtabletemp_id_0116(idint)stor......
  • 六、python——函数
    pizza.pydefmake_pizzas(size,*toppings):"""概述要制作的比萨"""print('size:'+size)print(toppings)deftest_one():print('one')deft......
  • 莫比乌斯函数
    唯一分解定理\[n=\prod^{s}_{i=1}p_{i}^{a_i}=p_{1}^{a_1}p_{2}^{a_2}···p_{s}^{a_s}\]莫比乌斯函数的定义\[\mu(n)=\left\{\begin{aligned}&1&&n......
  • 前缀函数与 KMP
    前缀函数概述前缀函数\(\pi_i\)为\(s_{1\dotsi}\)的真前后缀最大相同长度。这里的所有\(s\)下标从\(1\)开始,长度为\(n\)。实现原理首先肯定能想到......
  • python中的lambda函数用法
    python中的lambda函数用法 例1:传入多个参数的lambda函数defsum(x,y):returnx+y用lambda来实现: p=lambdax,y:x+yprint(p(4,6))例2:传入一个参......
  • .Net7运行模型之托管Main函数的调用
    前言:.Net7的CLR最具特色的一个地方,就是运行模型。因为它主宰了整个CLR的运行过程。又因为其庞大的代码量,有的几十万行甚至百万行。所以理解起来非常不容易。本篇拆分来看......
  • 虚函数(涉及汇编原理)
    虚函数1.多态​ 对象的多态性需要通过虚表和虚表指针来完成2.虚表指针1)位置​ 定义在对象首地址的前4字节处(32位)或前8个字节(64位)处2)定义​ 一个二维指针,一个存储......
  • Shell函数
    Shell函数一、Shell函数函数的作用就是把程序里需要多次使用的部分代码列出来,然后为这部分代码起个名字,其它所有的重复调用这部分代码都只用调用这个名字就可以(类似于别......