强化学习6大前沿算法复现 | 乘风破浪,热情不减-程序员宅基地

技术标签: 算法  机器学习  深度学习  人工智能  大数据  

点击左上方蓝字关注我们

学习成就梦想,AI遇见未来。作为国内AI行业的重要一员,百度不仅在人工智能的研究应用上做出了巨大贡献,还致力于培养和选拔最具核心竞争力的AI人才。

强化学习作为人工智能的热门研究领域之一,对发展人机交互、无人驾驶等技术具有重要意义,百度飞桨推出了强化学习的系列课程,帮助更多开发者进入强化学习领域。

强化学习,风声再起


自6月推出《深度学习7日打卡营-世界冠军带你从零实践强化学习》公开课后,同学们反响强烈,掀起了一波强化学习的热潮。

为帮助大家更深入的理解强化学习背后的算法理论,7月14日,课程推出了“你学习,我送书,一起来爬RL的大山”的共学活动。

此次活动提供了六大强化学习经典进阶算法资料:DQN_variant、A2C、PPO、SAC、TD3、MADDPG,同学们可以任选一个感兴趣的算法进行钻研,并输出自己对算法本身,以及基于PARL实现的代码细节的理解。

众人拾柴火焰高,此次我们也特地邀请到了共学活动的评审团成员,用最精炼的语言带大家速览强化学习六大前沿算法!

DQN_variant算法

——Tiny Tony、Kevin pang

要说DQN_variant就要从DQN说起

DQN可以理解为Q-Learning + Deep Learning, 然而实际如果简单合并这两个概念会让训练变得不稳定。因此DQN论文引入了卷积神经网络,并提出两大利器,用于解决DL和RL结合时遇到的问题:

1) 经验回放:主要解决样本关联性和利用效率的问题。使用一个经验池存储多条经验(s,a,r,s),再从中随机抽取一批数据送去训练。

2) 固定Q目标:主要解决算法训练不稳定的问题。复制一个和原来Q网络结构一样的目标Q网络,用于计算Q目标值。

更新:

算法:

比DQN更进一步的Double DQN

Double DQN是DQN的一种改进,旨在解决DQN训练过程中存在的过估计(Over Estimate)问题。在训练过程中,Double DQN首先使用预测网络(Predict Q Network)计算下一个State的对应各个Action的Q值,然后选取最大的那个Q值对应Action的索引,再使用目标网络(Target Q Network)计算该状态的对应各个状态的Q值,然后选取预测网络中给定Action索引对应的Q值,但是它可能不是最大的那个,从而一定程度上避免了过度估计,提高了训练DQN的稳定性和速度。

实验结果也证明,Double DQN有效地防止了过度估计。注意Double DQN利用了DQN的Target Q Network,所以其实并没有比DQN多使用一个网络。

更新:

结构上创新的Dueling DQN

Dueling DQN是一种网络结构上的创新,其将网络分成了两部分:值函数和优势函数。

在更新网络时,让模型更倾向于去更新V而不是更新A,这是一种比较有效率的做法。

通过此次学习和评审,我们发现,算法的更新与发展离不开对前人成果的分析和学习。因为,在对前人的成果学习的过程中,我们即加深了自己对此类算法的认识与理解,又锻炼了自己的算法复现能力。

因此,接下来,在学习了前人成果经验的基础上,若能将其熟练运用,必能对其优缺点有更为深刻的认识。进而,我们就能在此类算法的发展上、继续提出新的问题、解决问题。在这个不断完善的过程中,我们就有可能写出一个属于自己的算法,甚至有可能让自己的算法成为里程碑式的进步。

PPO算法

——super松、Agravity

Policy Gradient作为policy-based较为基础的算法,有其简单直观的特性,但同时它也有很多弊端,譬如样本利用率底以及使用梯度更新错误步长带来的模型塌陷的问题。在网络中参数的小改动都可能带来策略分布的巨大变化。

为了能够更多更好的利用已有的数据,利用重要性采样,使得用于更新的样本更贴近于新策略产生的样本。PPO论文中的两种提供了两种方法,一种是针对TRPO中约束项权重不好求解,使用一种动态的方式来调整新旧策略散度的权重;第二种则使用clip的方式,直接限制了更新的“步长”。

PPO解决了On-policy转Off-policy时p(x)分布与q(x)分布相差较大的问题.KL散度来计算p(x)分布与q(x)分布差异,并将KL加入PPO模型的似然函数,并采用合理适配β来惩罚KL。(摘自“如意_鸡蛋”的AIStudio项目)

PPO算法是利用了重要性采样的思想,在不知道策略路径的概率p情况下,通过模拟一个近似的q分布,只要p同q分布不差得太远,通过多轮迭代可以快速参数收敛。(摘自“tostq”的程序员宅基地)

aitrust同学在mujoco环境上训练了“猎豹跑步”,并制作了有趣的B站视频《强化学习算法PPO让猎豹学会奔跑!》,已一键三连。另外几位同学也都尝试了gym的其他环境。其实可以扩展思路去尝试更多的环境和游戏,解决更多实际的问题。

SAC算法

—— VividChloe、倪侃_eval()

Actor-Critic框架是一种经典的强化学习结构,评论家Critic通过Q网络评价状态s下动作a预期得到的回报r,表演者Actor遵循策略网络,根据所处状态s输出合适的动作a。

在上述AC框架中作各种改动,就形成了SAC、DDPG、PPO等具体的强化学习算法。

其中,SAC算法在策略目标中加入了熵项(entropy),以期在策略收益最大化的同时使其本身的熵最大,使策略网络具有良好的探索性,避免陷入局部最优。通过引入熵正则化项,传统ReinforcementLearning变为Maximum Entropy Reinforcement Learning(MERL)。相应地,Q函数、V函数也引入了熵项,形成SoftValue Function(SVF)。

在策略选择中,SAC采用了基于能量的模型(EnergyBased Policy,EBP),相比于传统强化学习中的确定性策略模型,EBP中,action值的概率分布贴合Q函数的分布,避免了传统RL中action过于单一的缺陷。传统RL及基于EBP的策略选择图示分别如下图所示:

a传统RL策略选择图示

b基于EBP的策略选择图示

在具体的算法实现中,SAC算法为了解决连续空间问题借鉴了SoftPolicy迭代思想,选择随机梯度优化两个网络进行更新。同时为了防止策略提升中产生的过估计现象,独立训练两个Q网络并选择其中较小的估计结果对actor网络进行更新。

本次共有三名同学提交SAC学习文章,分别以rlschool库中的四轴飞行器悬停任务或经典的倒立摆控制任务完成了SAC算法实践。通过采用百度强化学习工具库Parl,原本晦涩的SAC实现过程简化为范式化的几十行核心代码。

如意_鸡蛋同学通过SAC算法在经典的倒立摆实例中得分稳步提升,最终获得14766分的结果,体现出SAC算法探索性强,收敛性好等优点,很赞。

TD3算法

——七年期限、不再是pytorch那个少年

TD3(Twin Delayed Deep Deterministic Policy Gradient)是一种面向连续动作空间基于Actor-Critic架构的深度强化学习算法,在DDPG算法基础上,同时对policy网络和value网络进行改进,优化了Q-Value的过高估计问题。

1.使用与双Q学习(Double DQN)相似的思想:使用两个Critic(估值网络Q(s, a))对动作-值进行评估,训练的时候取

作为估计值,这个结构可以用很小的改动加入到其他算法中,

2.使用延迟学习:更新估值函数的频率大于策略函数

3.使用软更新:更新的时候不直接复制网络参数,而是 

4.使用梯度截取:将用于Actor(策略网络)参数更新的梯度截取到某个范围内

5.使用策略噪声:TD3不仅和其他算法一样,使用epsilon-Greedy 在探索的时候使用了探索噪声,而且还使用了策略噪声,在update参数的时候,用于平滑策略期望。

最终一共有五位同学参与了TD3算法活动,其中有几位同学用TD3算法挑战了《再战大作业,助你摆脱大作业难以收敛的恐惧》,是不是只看标题就让你想起了大作业不收敛的恐惧,现在它来了,蠢蠢欲动的你还不来试试吗!!!

大家也是非常认真,将TD3算法安装中遇到的问题、与DDPG算法的差别和代码的差别都为大家进行了标注,有不懂的同学欢迎观看各位大佬的文章,为他们打Call。

A2C算法

——Yao、木兰佳

A2C全称为优势动作评论算法(Advantage Actor Critic),也是属于Policy算法族的,是在Policy Gradient的基础上拆分出两个网络Critic和Actor。A2C使用优势函数代替Critic网络中的原始回报,优势函数可以作为衡量选取动作值和所有动作平均值好坏的指标。


优势函数

优势函数示意图

状态值函数:该状态下所有可能动作所对应的动作值函数乘以采取该动作的概率的和。

动作值函数:该状态下的a动作对应的值函数。

优势函数:动作值函数相比于当前状态值函数的优势。

如果优势函数大于零,则说明该动作比平均动作好,如果优势函数小于零,则说明当前动作还不如平均动作好。

A2C:Policy Gradient下属算法之一,此次作业中Brisingrsdsz同学在AI Studio上面做了相当详细的讲解:A2C的背景、REINFORCE、AC以及A2C和A3C间的优劣区别,从文章中看得出该同学对论文也是“情有独钟”,很是佩服,一位功底很深的研究僧,期待下次的RL文章。各位加油呀~~~,乌拉~~~

MADDPG算法

——孙顺????、Mr.郑先生_????

强化学习中很多场景中都涉及到多个智能体的交互,比如多个机器人的控制,多玩家游戏等等。

传统的PG(policy gradient)算法和 Q-Learning方法都不适应多智能体的环境,主要是因为每个智能体都有自己的策略,从任意一个智能体的角度上看,其他智能体的策略在不断的变化,这样的动态不确定环境对于单个智能体的策略学习是非常不稳定的。(摘自“AI在打野”的知乎作业)

对DQN算法来说,经验回放的方法变的不再适用,因为如果不知道其他智能体的状态,那么不同情况下自身的状态转移会不同。对PG算法来说,环境的不断变化导致了学习的方差进一步增大。(摘自“Mr.郑先生_”的程序员宅基地)

为了克服上述问题,有研究者提出了MADDPG(Multi-Agent Deep Deterministic Policy Gradient)方法【论文链接】https://arxiv.org/pdf/1706.02275.pdf。大家可以注意到MADDPG后面的4个字母是“DDPG”,其实MADDPG方法的确是使用DDPG作为基准模型。(摘自“AI在打野”的知乎作业)

上图是论文里面MADDPG的伪代码,可以看到MADDPG和DDPG是类似的,但最主要的不同在于:在DDPG算法中,Critic的输入是自身的观测-行动数据,而MADDPG中,每个Agent的Critic除了输入自身的observation、action信息外,还有其他agent的action、observation等信息,也就是说MADDPG的Critic可以从更宏观的视角给Actor“打分”。(摘自“AI在打野”的知乎作业)

换言之,MADDPG就是令每个Agent的Critic部分能够获取其余所有Agent的动作信息,进行中心化训练和非中心化执行,即在训练的时候,引入可以观察全局的Critic来指导Actor训练,而测试的时候只使用有局部观测的actor采取行动。多智能体学习示意图如下图所示(摘自“Mr.郑先生_”的程序员宅基地):


MADDPG算法的难点就在于多智能体与环境的交互上,多智能体之间又有合作与竞争,这在我们的生活中也是类似的,比如一场激动人心的篮球赛或是足球赛,我们既要学会和队友合作,又跟对手有竞争关系。假如我们融入其中(假设自己就是篮球场/足球场上的一位球员),你有没有想过,有哪些策略能让所在队伍的得分最高?

在学习算法的同时回归生活,往往会有新的发现!

百度AI Studio课程平台

看到这你是不是也心动了?可自己错过了课程怎么办!?

别担心,我们的强化学习课程现在还可以学习,扫码加入课程,即可观看完整课节内容,亲自动手实践,遇到作业问题还可以到讨论区寻找答案。

课程精华版也已经在B站发布,快来一起学习刷弹幕吧!

榜单公布:

学习送书活动获奖名单

秉持着公正、公开的原则,经过评审团日日夜夜的认真评议,共学活动的获奖名单终于出炉!想了解具体的代码实现,请移步课程讨论区查看项目链接。

DQN_variant

强化学习圣经:深渊上的坑、三岁、jy_503、秋水中的鱼、阿布军师

A2C

强化学习圣经:Brisingrsdsz、wjswmxb、jy_503、__y__、醉爱墨

PPO

强化学习圣经:aitrust、如意_鸡蛋、tos氏龙

SAC

强化学习圣经:YY应觉月光寒、如意_鸡蛋、liuleifeichuan

TD3

强化学习圣经:thunder95、AI在打野、nanting03、如意_鸡蛋

MADDPG

强化学习圣经:AI在打野、hujx、forrestneo、huangdihe、jsdbzcm、shipeng20041

恭喜以上获奖同学,礼品将会按照毕业信息的地址发出。欢迎大家参与更多的百度飞桨课程,超多惊喜好礼等着你!

特别鸣谢:百度官方帮帮团成员

此次活动特别感谢以下百度飞桨官方帮帮团成员,公平公正,制定评分标准,严格按照标准评审;以身作则,认真研读算法理论和代码,输出文章,参与并撰写了这篇稿件。同时,也特别感谢你机智过人的脑瓜子同学的编辑排版工作。

正因为你们的奉献和付出,百度飞桨的使用体验得以完美,开源互助机制得以完善。

开源精神,永不停歇。

 

Tiny Tony

 

Kevin Pang

 

Super松

 

Agravity

 

VividChloe

 

倪侃_eval()

 

七年期限

 

不再是pytorch那个少年

 

Yao

 

木兰佳

 

孙顺????

 

Mr.郑先生_????

 

你机智过人的脑瓜子

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_45449540/article/details/107888373

智能推荐

info级别日志与debug_debug中的计算是否在info级别也会跑-程序员宅基地

文章浏览阅读6.3k次。日志默认info级别debug日志不会打印,但是会执行日志填充的数据例如:logger.debug("日志输出",2*10); 1. 2*10会先执行出结果,然后继续往下走2. 在ch.qos.logback.classic.Logger#filterAndLog_1方法中判断是否符合级别要求是否需要输出3.如图:..._debug中的计算是否在info级别也会跑

Third calibration example - Calibration using Heikkil�'s data (planar and non-planar calibration rig-程序员宅基地

文章浏览阅读1.4k次。Similarly to the previous example, let us apply our calibration engine onto the data that comes with the originalcalibration toolbox of Heikkil� from the University of Oulu. Once again. do not bothe_non-planar calibration

物联网常用的网络协议:MQTT、AMQP、HTTP、CoAP、LwM2M_lmm2m和mqtt-程序员宅基地

文章浏览阅读1w次,点赞10次,收藏63次。物联网常用的网络协议:MQTT、AMQP、HTTP、CoAP、LwM2M物联网设备间沟通的语言,就是网络协议。设备间想相互交流,通信双方必须使用同一种“语言”。比如说你和中国人问好说’你好‘、日本人问好要说‘こんにちは’、和英国人问好要说‘hello’.说起网络协议,你可能马上就想到了 HTTP 协议。是的,在日常的 Web 开发中,我们总是需要跟它打交道,因为 HTTP 协议是互联网的主流网络协议。类似地,应用在互联网中的网络协议,还有收发电子邮件的 POP3 、SMTP 和 IMAP 协议,以及_lmm2m和mqtt

fortran使用MKL函数库中的geev计算一般矩阵的特征值与特征向量_fortran求矩阵特征值-程序员宅基地

文章浏览阅读7.4k次,点赞4次,收藏20次。这篇博文简要记录一下使用MKL函数库计算一般矩阵的特征值与特征向量对形如对称矩阵或是埃尔米特等特殊矩阵有其对应的子程序,在这里先不涉及。有需求的可以自行查阅MKL官方文档下面给出本次示例代码:代码使用f95接口。f77借口参数太多,笔者太懒<不过懒惰是创新的原动力^_^>program testGeev use lapack95 implicit..._fortran求矩阵特征值

Numpy, Scipy, Matplotlib基本用法_np.imresize-程序员宅基地

文章浏览阅读147次。学习内容来自:Numpy Tutorial文章目录Array SlicingArray IndexingMathematical ManipulationBroadcastingImage Processing基本的用法课程里面说的挺详细了。 特别记录一些需要关注的点。Array Slicing使用固定数字进行array寻址会导致数组降维。y = np.random.random((3,..._np.imresize

蓝桥杯 历届试题 回文数字 C++_c++蓝桥杯 回文数-程序员宅基地

文章浏览阅读355次。题目阅览 观察数字:12321,123321 都有一个共同的特征,无论从左到右读还是从右向左读,都是相同的。这样的数字叫做:回文数字。  本题要求你找到一些5位或6位的十进制数字。满足如下要求:  该数字的各个数位之和等于输入的整数。  输入格式  一个正整数 n (10<n<100), 表示要求满足的数位和。  输出格式若干行,每行包含一个满足要求的5位或6位整数。  数字按从小到大的顺序排列。  如果没有满足条件的,输出:-1样例输入144样例输出199899_c++蓝桥杯 回文数

随便推点

Java生成二维码,扫描并跳转到指定的网站_java扫二维码进入自己制作的网页-程序员宅基地

文章浏览阅读6.2k次,点赞3次,收藏13次。需要的pom文件 &lt;dependency&gt; &lt;groupId&gt;com.google.zxing&lt;/groupId&gt; &lt;artifactId&gt;core&lt;/artifactId&gt; &lt;version&gt;3.1.0&lt;/version&gt;_java扫二维码进入自己制作的网页

python:多波段遥感影像分离成单波段影像_一个多波段影像分解成多个单波段影像-程序员宅基地

文章浏览阅读650次。在遥感图像处理中,我们经常需要将多波段遥感影像拆分成多个单波段图像,以便进行各种分析和后续处理。本篇博客将介绍一个用Python编写的程序,该程序可以读取多波段遥感影像,将其拆分为单波段图像,并保存为单独的文件。本程序使用GDAL库来处理遥感影像数据,以及NumPy库来进行数组操作。结果如下图所示,选中的影像为输入的多波段影像,其他影像分别为拆分后的多波段影像。_一个多波段影像分解成多个单波段影像

移动硬盘突然在电脑上无法显示_电脑无法显示移动硬盘-程序员宅基地

文章浏览阅读5.1k次,点赞2次,收藏4次。0前言一直用的好好的移动硬盘突然不显示了,前段时间因为比较忙,一直没顾得上管它,趁这个假期,好好捅咕了一番,总算是弄好了,特此将解决的过程记录如下:1.问题描述 1.我的移动硬盘在其他人的电脑上能够正常显示和使用 2.其他移动硬盘在我电脑上能够正常的显示和使用 3.在我的电脑上,该移动硬盘,既不显示盘符,磁盘管理 又不显示该磁盘2.问题分析1.我的移动硬盘能够在其他人电脑上_电脑无法显示移动硬盘

Linux开机启动过程(16):start_kernel()->rest_init()启动成功_linux 标志着kernel启动完成-程序员宅基地

文章浏览阅读1k次。Kernel initialization. Part 10.在原文的基础上添加了5.10.13部分的源码解读。End of the linux kernel initialization processThis is tenth part of the chapter about linux kernel initialization process and in the previous part we saw the initialization of the RCU and stopped o_linux 标志着kernel启动完成

Scala安装和开发环境配置教程_scala安装及环境配置-程序员宅基地

文章浏览阅读5.3k次,点赞5次,收藏23次。Scala语言概述:Scala语言是一门以Java虚拟机为运行环境,支持面向对象和函数式编程的静态语言,java语言是面向对象的,所以代码写起来就会相对比较模块儿,而函数式编程语言相对比较简洁_scala安装及环境配置

深扒人脸识别60年技术发展史_人脸识别发展历史-程序员宅基地

文章浏览阅读2.4k次。“他来听我的演唱会,门票换了手铐一对”。最近歌神张学友变阿SIR,演唱会上频频抓到罪犯,将人脸识别技术又一次推到了大众的视线中。要说人脸识别技术的爆发,当属去年9月份苹果iPhone x的发布,不再需要指纹,只需要扫描面部就可以轻松解锁手机。任何技术一旦进入智能手机这个消费市场,尤其是被苹果这个标志性的品牌采用,就意味着它将成为一种趋势,一个智能设备的标配。在智能手机快速崛起的这几年,其密码锁..._人脸识别发展历史