强化学习(三):时序差分学习(Temporal-Difference Learning, TD)

2024-02-01 21:32

本文主要是介绍强化学习(三):时序差分学习(Temporal-Difference Learning, TD),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • 1. TD预测
    • 1.1. TD(0)算法
  • 2. 同轨TD控制:Sarsa
  • 3. 离轨TD控制:Q学习
    • 3.1. 基本思想
    • 3.2. 算法流程
    • 参考资料
  • X. 动态规划法DP、蒙特卡洛法MC 和 时序差分法TD的比较
    • X.1. 核心思想
    • X.2. 算法特点

1. TD预测

TD是另一种对最优策略的学习方法,本节讲述TD预测,即使用TD求解策略 π \pi π的值函数 v π ( s ) v_{\pi}(s) vπ(s)

TD预测被称为 DP 和 MC 的结合体,DP是 期望更新+自举bootstrap,MC是 采样更新 + 样本估计。而TD则是采样更新 + 自举,即值函数 V ( S t ) V(S_t) V(St)更新基于采样得到的 V ( S t + i ) V(S_{t+i}) V(St+i)的结果

如果 i = 1 i=1 i=1,就为TD(0)单步TD算法,否则就为多步TD

当然动态特性 p ( s ′ , a ∣ s , a ) p(s',a|s,a) p(s,as,a)对于TD也是未知的。

1.1. TD(0)算法

根据采样更新与自举的思想,TD(0)的状态值函数预测式为

V ( S t ) = V ( S t ) + α [ R t + 1 + γ V ( S t + 1 ) − V ( S t ) ] (1) V(S_t) = V(S_t) + \alpha[R_{t+1} + \gamma V(S_{t+1}) - V(S_t)] \tag{1} V(St)=V(St)+α[Rt+1+γV(St+1)V(St)](1)

先给出一些定义:
TD目标:指 R t + 1 + γ V ( S t + 1 ) R_{t+1} + \gamma V(S_{t+1}) Rt+1+γV(St+1)
TD误差:指 R t + 1 + γ V ( S t + 1 ) − V ( S t ) R_{t+1} + \gamma V(S_{t+1}) - V(S_t) Rt+1+γV(St+1)V(St)
步长\学习率:指 α \alpha α

如何理解上述定义呢?

结合图一看就明白了。对于状态 s s s,所有包含 s s s的episode均会使值函数的估计值 V ( s ) V(s) V(s)朝着TD目标走长度为 α \alpha α倍TD误差 的一步,而获得新的 V ( s ) V(s) V(s)。就是经过这样不断地走,最终会接近 v π ( s ) v_{\pi}(s) vπ(s)
在这里插入图片描述

有没有想到梯度下降中的步长的概念?意思其实是一样的,同样的可以使用非恒定学习率,例如 1 s 的 更 新 次 数 \frac{1}{s的更新次数} s1,即越接近 v π ( s ) v_{\pi}(s) vπ(s)学习率越小,这样 V ( s ) V(s) V(s)就变成了采样取平均的方法。取平均的确会收敛概率为1,但这样收敛较慢,且对于非平稳问题则不太合适。

由此特征可以看到DP和MC的影子,深刻理解TD算法的思想:

  1. 采样更新:可以看到 ( 1 ) (1) (1)中更新的状态是与 t t t有关的,即 V ( S t ) V(S_t) V(St)的更新是基于样本采样得出的单个后继节点的值函数,即 S t + 1 S_{t+1} St+1
    只不过MC中用的是当前样本算得的 G t G_t Gt,TD中直接用的估计结果V。
  2. 自举:式子中状态的值函数 V ( S t ) V(S_t) V(St)需要用到 已存在的 其他状态的值函数 V ( S t + 1 ) V(S_{t+1}) V(St+1)

所以式子 ( 1 ) (1) (1)中的 R t + 1 + γ V ( S t + 1 ) R_{t+1} + \gamma V(S_{t+1}) Rt+1+γV(St+1)到底叫不叫样本? 叫吧,可这个值涉及到多次迭代的估计值。不叫吧,可这又是采样得来的,而且 V ( S t ) V(S_t) V(St)的更新只看样本给出的下一个状态 V ( S t + 1 ) V(S_{t+1}) V(St+1)
\quad
因此TD的核心思想是对于状态 s s s,步步采样,用估计值函数 V ( s ′ ) V(s') V(s)更新(而非样本回报 G t G_t Gt

上代码

V TDEvaluation(S,A,R,policy,alpha,gamma,maxEpisodeNum)
{V(S) = 0;episode = 1;for episode = 1:maxEpisodeNum{s = random(S);while(s != terminalState){a = policy(s);s' = updateState(s,a);r = reward(s,a,s');V(s) = V(s) + alpha*( r + gamma*V(s') - V(s) );s = s'; }}return V(S);
}	

2. 同轨TD控制:Sarsa

这里讨论经典的同轨的TD控制方法Sarsa。既然是同轨法,即行动策略 和 目标策略 相同,就必须考虑最优策略是确定性策略,即选择行动状态函数最大的动作时,这样的行动策略会带来的样本探索受限的问题(动态规划与蒙特卡洛方法中如是说)

2.1. ϵ \epsilon ϵ-软性策略 ( ϵ \epsilon ϵ-greedy)

思路是将确定性策略改成近似确定性,即以较大概率 1 − ϵ 1-\epsilon 1ϵ选择 max ⁡ a q π ( s , a ) \max_aq_{\pi}(s,a) maxaqπ(s,a),以较小概率 ϵ \epsilon ϵ选择其他行为。因此要满足 1 − ϵ > > ϵ 1-\epsilon >> \epsilon 1ϵ>>ϵ

该策略如下:

Action policy(state,Q,epsilon)
{if( rand(0,1) < epsilon )return randomActions(state);elsereturn argmax(Action,Q(state,:));
}

这样的软性策略,实际上对于新样本的采集(行动策略)会以很小的概率 ϵ \epsilon ϵ进行,因此Sarsa算法的特点就是点的探索会比较保守。

2.2. 算法流程

与公式 ( 1 ) (1) (1)类似,得到 Q ( s , a ) Q(s,a) Q(s,a)的更新公式:

Q ( s , a ) = Q ( s , a ) + α [ R ( s , a ) + γ Q ( s ′ , a ′ ) − Q ( s , a ) ] Q(s, a) = Q(s, a) + \alpha [ R(s,a) + \gamma Q(s',a') -Q(s,a)] Q(s,a)=Q(s,a)+α[R(s,a)+γQ(s,a)Q(s,a)]

注意到公式中出现了新状态的新动作 a ′ a' a,该新动作也是通过 ϵ \epsilon ϵ-软性策略得到的。

整体代码如下,由于policy()是选取动作值函数Q(s,:)最大的动作,因此更新Q(s,a)就是控制。

policy Sarsa(S,A,R,epsilon,alpha,gamma,maxEpisodeNum)
{Q(S,A) = 0;episode = 1;for episode = 1:maxEpisodeNum{s = random(S);a = policy(s);while(s != terminalState){s' = updateState(s,a);a' = policy(s',Q,epsilon);r = reward(s,a,s');Q(s,a) = Q(s,a) + alpha*( r + gamma*Q(s',a') - Q(s,a) );s = s'; a = a';}}return policy(S,Q,epsilon);
}	

3. 离轨TD控制:Q学习

3.1. 基本思想

Q-Learning算法是一种强化学习算法,通过智能体在环境中不断地训练进而得出一种模型,在该模型下实现智能体的决策。

Q-Learning 的思想 是将智能体划分为多个可能的状态,每个状态之间通过某种行为相互转换(类似于状态机,也类似于离散系统控制中的系统状态x(k)和控制信号u(k)),在某种状态下采取不同的行为会得到不同的收益reward

智能体的行为选择 是基于获得的期望总体收益q最大进行的,即在状态 s s s下采取策略 a a a是因为这样才能使未来期望的总收益达到最大

因此需要记录 所有状态的所有行为的期望总体收益,即 Q ( s , a ) Q(s,a) Q(s,a)

(注意策略 a a a是基于未来所有收益的期望值,而非眼下的收益reward,一种动态规划思想)

Q-learning算法是一种 针对特定场景下边决策边训练的强化学习算法。主要变量如下
状态 s s s行为 a a a收益 r e w a r d ( s , a ) reward(s,a) reward(s,a)动作值函数Q-table Q ( s , a ) Q(s,a) Q(s,a)

且系统状态 s s s会在 a a a的作用下发生转移,即 s j = a i j ( s i ) s_j = a_{ij}(s_i) sj=aij(si)

(注意reward和Q-table的输入是两个:状态 和 行为,而不只是状态。即使转移到相同的状态s,也可能有不同的收益, r e w a r d ( s i , a i j ) ≠ r e w a r d ( s k , a k j ) reward(s_i ,a_{ij}) ≠ reward(s_k ,a_{kj}) reward(si,aij)=reward(sk,akj)

在这里插入图片描述

Q-learning的训练的过程只是 不断重复两步思维决策、Q-table更新

1.1.节中智能体的行为选择 是基于获得的期望总体收益q最大进行的,这里的期望总体收益指的就是Q-table的值。

因此智能体的选择很简单,取Q最大值对应的 a a a即可,如果当前状态为 s s s则选择的行为 a a a应当满足

a = a m a = a_m a=am,
where a m a_m am s.t. Q ( s , a m ) = m a x { Q ( s , a 1 ) , Q ( s , a 2 ) , . . . , Q ( s , a n ) } Q(s, a_m) = max\{Q(s,a_1),Q(s,a_2),...,Q(s,a_n) \} Q(s,am)=max{Q(s,a1),Q(s,a2),...,Q(s,an)}

在这里插入图片描述

Q-table中 Q ( s , a ) Q(s,a) Q(s,a)表示状态 s s s下采取 a a a的得到的期望总体收益。

总体收益的含义是指,从状态 s s s采取动作 a a a s ′ s' s开始到算法结束的所有收益之和。但是从 s ′ s' s到算法终止策略有很多,因此这样的收益有很多,但有一个期望值。

期望的总体收益则是指从状态为 s s s,采取动作 a a a转移至 s ′ s' s,如果接下来都采取最佳策略的总体收益。

最佳策略则是如1.2.1所讲,期望总体收益q最大的那个选择策略。

因此根据动态规划思想, Q ( s , a ) Q(s,a) Q(s,a)就应该包含:状态 s s s采取动作 a a a的收益 和 s ′ s' s的期望总体收益。

Q ( s , a ) = r e w a r d ( s , a ) + γ E [ Q ( s ′ ) ] Q(s, a) = reward(s,a) + \gamma E[Q(s')] Q(s,a)=reward(s,a)+γE[Q(s)]
= r e w a r d ( s , a ) + γ m a x a { Q ( s ′ , a ) } \quad\quad\quad= reward(s,a) + \gamma max_{a}\{Q(s',a)\} =reward(s,a)+γmaxa{Q(s,a)}

其中 s ′ = a ( s ) s' = a(s) s=a(s) E [ Q ( s ′ ) ] E[Q(s')] E[Q(s)]表示 s ′ s' s状态的总体收益的期望值, γ \gamma γ表示折扣因子,用于确定延迟回报与当前回报的相对比例, 越大表明延迟回报的重要程度越高。

在这里插入图片描述

迭代过程中 Q ( s , a ) Q(s, a) Q(s,a)是不断修正地过程,因此将 Q ( s , a ) Q(s, a) Q(s,a)变为过去的估计值 和 当前的现实值得加权和(Kalman滤波器既视感

Q ( s , a ) = Q ( s , a ) + ϵ ( R ( s , a ) + γ m a x a { Q ( s ′ , a ) } ) Q(s, a) = Q(s, a) + \epsilon ( R(s,a) + \gamma max_{a}\{Q(s',a)\} ) Q(s,a)=Q(s,a)+ϵ(R(s,a)+γmaxa{Q(s,a)})

其中 ϵ \epsilon ϵ表示学习率。

3.2. 算法流程

对Q-learning算法进行一个流程总结,可能直接看伪代码更加清晰。

QLearning(initialState,endState,reward,N)
{episode = 1;s = initialState;while(episode < N){a = chooseAction(s,Qfun);sNew = updateState(s,a);Qfun = updateQ(Qfun,reward,s,a,sNew);s = sNew;if(sNew == endState){s = initialState;episode++;}}
}

动作选择、状态更新 和 Qtable更新细节如下

action chooseAction(currentState,Qfun,prob)
{if(rand(0,1) > prob)return rand(all Actions within currentState);bestAction = first Action;for each Action in currentState:if(Qfun(currentState,Action) > Qfun(currentState,bestAction))bestAction = Action;return bestAction;
}newState updateState(currentState,action)	//与系统动力学有关Qfun updateQ(Qfun,reward,currentState,currentAction,newState,gamma,epsilon)
{s = currentState;a = currentAction;sNew = newState;Qfun(s,a) += epsilon * (reward(s,a) +gamma * max(Qfun(sNew,:)) );return Qfun(s,a);
}

参考资料

  1. https://www.bilibili.com/video/BV13W411Y75P?p=5
  2. https://blog.csdn.net/itplus/article/details/9361915
  3. https://baijiahao.baidu.com/s?id=1597978859962737001&wfr=spider&for=pc
  4. https://blog.csdn.net/wlm_py/article/details/101301986

X. 动态规划法DP、蒙特卡洛法MC 和 时序差分法TD的比较

X.1. 核心思想

X.2. 算法特点

这篇关于强化学习(三):时序差分学习(Temporal-Difference Learning, TD)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/668524

相关文章

51单片机学习记录———定时器

文章目录 前言一、定时器介绍二、STC89C52定时器资源三、定时器框图四、定时器模式五、定时器相关寄存器六、定时器练习 前言 一个学习嵌入式的小白~ 有问题评论区或私信指出~ 提示:以下是本篇文章正文内容,下面案例可供参考 一、定时器介绍 定时器介绍:51单片机的定时器属于单片机的内部资源,其电路的连接和运转均在单片机内部完成。 定时器作用: 1.用于计数系统,可

问题:第一次世界大战的起止时间是 #其他#学习方法#微信

问题:第一次世界大战的起止时间是 A.1913 ~1918 年 B.1913 ~1918 年 C.1914 ~1918 年 D.1914 ~1919 年 参考答案如图所示

[word] word设置上标快捷键 #学习方法#其他#媒体

word设置上标快捷键 办公中,少不了使用word,这个是大家必备的软件,今天给大家分享word设置上标快捷键,希望在办公中能帮到您! 1、添加上标 在录入一些公式,或者是化学产品时,需要添加上标内容,按下快捷键Ctrl+shift++就能将需要的内容设置为上标符号。 word设置上标快捷键的方法就是以上内容了,需要的小伙伴都可以试一试呢!

AssetBundle学习笔记

AssetBundle是unity自定义的资源格式,通过调用引擎的资源打包接口对资源进行打包成.assetbundle格式的资源包。本文介绍了AssetBundle的生成,使用,加载,卸载以及Unity资源更新的一个基本步骤。 目录 1.定义: 2.AssetBundle的生成: 1)设置AssetBundle包的属性——通过编辑器界面 补充:分组策略 2)调用引擎接口API

Javascript高级程序设计(第四版)--学习记录之变量、内存

原始值与引用值 原始值:简单的数据即基础数据类型,按值访问。 引用值:由多个值构成的对象即复杂数据类型,按引用访问。 动态属性 对于引用值而言,可以随时添加、修改和删除其属性和方法。 let person = new Object();person.name = 'Jason';person.age = 42;console.log(person.name,person.age);//'J

大学湖北中医药大学法医学试题及答案,分享几个实用搜题和学习工具 #微信#学习方法#职场发展

今天分享拥有拍照搜题、文字搜题、语音搜题、多重搜题等搜题模式,可以快速查找问题解析,加深对题目答案的理解。 1.快练题 这是一个网站 找题的网站海量题库,在线搜题,快速刷题~为您提供百万优质题库,直接搜索题库名称,支持多种刷题模式:顺序练习、语音听题、本地搜题、顺序阅读、模拟考试、组卷考试、赶快下载吧! 2.彩虹搜题 这是个老公众号了 支持手写输入,截图搜题,详细步骤,解题必备

《offer来了》第二章学习笔记

1.集合 Java四种集合:List、Queue、Set和Map 1.1.List:可重复 有序的Collection ArrayList: 基于数组实现,增删慢,查询快,线程不安全 Vector: 基于数组实现,增删慢,查询快,线程安全 LinkedList: 基于双向链实现,增删快,查询慢,线程不安全 1.2.Queue:队列 ArrayBlockingQueue:

22.手绘Spring DI运行时序图

1.依赖注入发生的时间 当Spring loC容器完成了 Bean定义资源的定位、载入和解析注册以后,loC容器中已经管理类Bean 定义的相关数据,但是此时loC容器还没有对所管理的Bean进行依赖注入,依赖注入在以下两种情况 发生: 、用户第一次调用getBean()方法时,loC容器触发依赖注入。 、当用户在配置文件中将<bean>元素配置了 lazy-init二false属性,即让

21.手绘Spring IOC运行时序图

1.再谈IOC与 DI IOC(lnversion of Control)控制反转:所谓控制反转,就是把原先我们代码里面需要实现的对象创 建、依赖的代码,反转给容器来帮忙实现。那么必然的我们需要创建一个容器,同时需要一种描述来让 容器知道需要创建的对象与对象的关系。这个描述最具体表现就是我们所看到的配置文件。 DI(Dependency Injection)依赖注入:就是指对象是被动接受依赖类

时序预测 | MATLAB实现LSTM时间序列未来多步预测-递归预测

时序预测 | MATLAB实现LSTM时间序列未来多步预测-递归预测 目录 时序预测 | MATLAB实现LSTM时间序列未来多步预测-递归预测基本介绍程序设计参考资料 基本介绍 MATLAB实现LSTM时间序列未来多步预测-递归预测。LSTM是一种含有LSTM区块(blocks)或其他的一种类神经网络,文献或其他资料中LSTM区块可能被描述成智能网络单元,因为