#强化学习14——TD3算法详解与tensorflow2.0实现上篇文章强化学习13——DDPG算

这就就不可避免的降低了估值函数的准确度,由于估值方法的计算依据贝尔曼方程,即使用后续状态对估值进行更新,这种性质又加剧了精确度的下降。在每一次更新策略时,使用一个不准确的估计值将会导致错误被累加。这些被累加的错误会导致某一个不好的状态被高估,最终导致策略无法被优化到最优,并使算法无法收敛。

在DQN算法中针对Q值过估计的问题采用的是利用双网络分别实现动作的选择和评估,也就是DDQN算法。在TD3算法中,我们也使用两个Critic网络来评估Q值,然后选取较小的那个网络的Q值来更新,这样就可以缓解Q值高估现象。这样或许会导致些许低估,低估会导致训练缓慢,但是总比高估要好得多。

注意:这里我们使用了两个Critic网络,每个Critic网络都有相应的Target网络,可以理解为这是两套独立的Critic网络,都在对输入的动作进行评估,然后通过min()函数求出较小值作为更新目标。所以TD3算法一共用到6个网络。

代码实现:

self.q_net1=QNetwork(state_dim,action_dim,hidden_dim)self.q_net2=QNetwork(state_dim,action_dim,hidden_dim)self.target_q_net1=QNetwork(state_dim,action_dim,hidden_dim)self.target_q_net2=QNetwork(state_dim,action_dim,hidden_dim)self.policy_net=PolicyNetwork(state_dim,action_dim,hidden_dim,action_range)self.target_policy_net=PolicyNetwork(state_dim,action_dim,hidden_dim,action_range)如上所示,包含两套Q网络,用来估计Q值,一套策略网络。具体的网络更新部分和DDPG是流程是一样的,唯一不同的是两个Critic网络算出Q值后,选取最小值去计算目标值:

target_q_min=tf.minimum(self.target_q_net1(target_q_input), self.target_q_net2(target_q_input))target_q_value=reward+(1-done)*gamma*target_q_min然后就是分别对Critic网络和policy网络进行更新。

TD3中使用的第二个技巧就是对Policy进行延时更新。在双网络中,我们让target网络与当前网络更新不同步,当前网络更新d次之后在对target网络进行更新(复制参数)。这样就可以减少积累误差,从而降低方差。同样的我们也可以policy网络进行延时更新,因为actor-critic方法中参数更新缓慢,进行延时更新一方面可以减少不必要的重复更新,另一方面也可以减少在多次更新中累积的误差。在降低更新频率的同时,还应使用软更新:

关于policy网络延时更新的实现也很简单,只需要一个if语句就可以实现

ifself.update_cnt%self.policy_target_update_interval==0其中update_cnt是更新的次数,policy_target_update_interval是policy网络更新的周期,每当critic更新了一定次数后,再更新policy网络。

误差的根源是值函数估计产生的偏差。知道了原因我们就可以去解决它,在机器学习中消除估计的偏差的常用方法就是对参数更新进行正则化,同样的,我们也可以将这种方法引入强化学习中来:

在强化学习中一个很自然的想法就是:对于相似的action,他们应该有着相似的value。

这里的噪声可以看作是一种正则化方式,这使得值函数更新更加平滑。

defevaluate(self,state,eval_noise_scale):state=state.astype(np.float32)action=self.forward(state)action=self.action_range*action#addnoisenormal=Normal(0,1)noise=normal.sample(action.shape)*eval_noise_scaleeval_noise_clip=2*eval_noise_scalenoise=tf.clip_by_value(noise,-eval_noise_clip,eval_noise_clip)action=action+noisereturnaction如代码所示,给动作加上噪音这部分在策略策略网络评估部分实现,evaluate()函数有两个参数,state是输入的状态,参数eval_noise_scale用于调节噪声的大小。可以看到,首先经过前向计算得到输出的动作action。下面详细说下如何给动作加上噪音:首先我们构造一个正太分布,然后根据动作的形状进行取样normal.sample(action.shape),然后乘以参数eval_noise_scale实现对噪音进行缩放,为了防止抽出的噪音很大或者很小的情况,我们对噪音进行剪切,范围相当于两倍的eval_noise_scale。最后把噪音加到action上并输出。

THE END
1.算法学习必备网站,不定时更新,建议先收藏。labuladong刷题网站算法学习必备网站,不定时更新,建议先收藏。 目录 一、labuladong 的算法笔记 二、Hello 算法 三、代码随想录 四、力扣 leetcode 五、牛客网nowcoder 一、labuladong 的算法笔记 labuladong 的算法笔记 | labuladong 的算法笔记labuladong 的算法笔记,致力于把算法讲清楚,打造最丝滑的刷题体验。https://blog.csdn.net/zhangchb/article/details/143163269
2.基于商品的推荐算法java代码python商品推荐算法基于商品的推荐算法java代码 python商品推荐算法 这一节主要涉及到的数据挖掘算法是关联规则及Apriori算法。 由此展开电商网站数据分析模型的构建和电商网站商品自动推荐的实现,并扩展到协同过滤算法。 关联规则最有名的故事就是啤酒与尿布的故事,非常有效地说明了关联规则在知识发现和数据挖掘中起的作用和意义。https://blog.51cto.com/u_16213668/11631942
3.机器学习从零实现来理解机器学习算法腾讯云开发者社区如果它是一本书、GitHub库、代码下载或者类似的,如果代码不工作,一个好的常规策略是寻找相关的勘误表。有时这些问题已经在书上或作者的网站上修正了。一些简单的谷歌搜索就能找到它们。 2) 代码不规范描述 当从零开始实现算法时,我认为第二个糟糕的绊脚石是提供的代码描述很糟糕。 https://cloud.tencent.com/developer/article/1044510
4.分享Matlab代码教程和数学建模知识的专业平台Matlab源码网是一个专注于分享Matlab代码、教程和数学建模相关知识的专业平台。我们提供丰富的Matlab学习资源,包括实用的源码、详细的教程以及数学建模方面的知识,旨在帮助用户快速学习和应用Matlab,提升数学建模能力。无论您是初学者还是专业人士,Matlab源码网都是您学https://www.matlabcode.cn/
5.Horace/代码随想录电脑端还看不到留言,大家可以在公众号「代码随想录」,左下角有「算法汇总」,这是手机版刷题攻略,看完就会发现有很多录友(代码随想录的朋友们)在文章下留言打卡,这份刷题顺序和题解已经陪伴了上万录友了,同时也说明文章的质量是经过上万人的考验! https://gitee.com/Time_Charmer/leetcode-master
6.GitHublabuladong/fucking我的算法网站、所有配套插件都集成了一个算法可视化工具,可以对数据结构和递归过程进行可视化,大幅降低理解算法的难度。几乎每道题目的解法代码都有对应的可视化面板,具体参见下方介绍。 二、学习网站 内容当然是我的系列算法教程中最核心的部分,我的算法教程都发布在网站labuladong.online上,相信你会未来会在这里花费大https://github.com/labuladong/fucking-algorithm
7.ModelArts使用自定义镜像创建算法ModelArts用户指南训练过程中,基于预置框架的算法需要从OBS桶或者数据集中获取数据进行模型训练,训练产生的输出结果也需要存储至OBS桶中。用户的算法代码中需解析输入输出参数实现ModelArts后台与OBS的数据交互,用户可以参考开发自定义脚本完成适配ModelArts训练的代码开发。 创建基于预置框架的算法时,用户需要配置算法代码中定义的输入输出参数https://ecloud.10086.cn/op-help-center/doc/article/78090
8.解开算法“黑箱”≠披露源代码应提升人工智能透明度解开算法“黑箱”≠披露源代码 应提升人工智能透明度 最近聊天机器人很火,这类人工智能产品能够理解人类语言与互动者进行对话,还能根据聊天上下文进行互动等,其中佼佼者甚至能回答人类提出的各种远超以往难度的复杂问题,因此聊天机器人备受追捧,但也有评论对看上去特别智能的聊天机器人提出了担忧:当前基于大数据学习和给定https://wxb.xzdw.gov.cn/xxh/xxhgzdt/202302/t20230225_321489.html
9.马斯克拟开放推特算法源代码,会改变社交平台游戏规则吗自由谈Musk宣称有意开放Twitter算法的原始代码,并指出“开放算法原始码能够增加互信”,不但可以让人们知道哪里出了问题,也能让歧视或仇恨言论的制造者曝光。不搞暗箱操作,不搞算法操控,一切公开透明,如果真能做到,确是新的玩法。 本文首发于南方周末 未经授权 不得转载 https://static.nfapp.southcn.com/content/202205/18/c6506946.html
10.谷歌大脑提出AutoML安装好Bazel后,将代码下载到本地,运行其中的demo程序: git clone https://github.com/google-research/google-research.git cd google-research/automl_zero ./run_demo.sh 这个脚本在10个线性任务上运行进化搜索。每次实验后,它都会评估在100个新的线性任务中发现的最佳算法。一旦算法的适应度大于0.9999,就选择该https://m.thepaper.cn/wap/resource/v3/jsp/newsDetail_forward_6453837