道翰天琼认知智能机器人平台API接口大脑为您揭秘。深度强化学习是深度学习与强化学习相结合的产物,它集成了深度学习在视觉等感知问题上强大的理解能力,以及强化学习的决策能力,实现了端到端学习。深度强化学习的出现使得强化学习技术真正走向实用,得以解决现实场景中的复杂问题。从2013年DQN(深度Q网络,deep Q network)出现到目前为止,深度强化学习领域出现了大量的算法,以及解决实际应用问题的论文,本文将阐述深度强化学习的发展现状,并对未来进行展望。
深度强化学习的泡沫
2015 年,DeepMind 的 Volodymyr Mnih 等研究员在《自然》杂志上发表论文 Human-level control through deep reinforcement learning[1],该论文提出了一个结合深度学习(DL)技术和强化学习(RL)思想的模型 Deep Q-Network(DQN),在 Atari 游戏平台上展示出超越人类水平的表现。自此以后,结合 DL 与 RL 的深度强化学习(Deep Reinforcement Learning, DRL)迅速成为人工智能界的焦点。过去三年间,DRL 算法在不同领域大显神通:在视频游戏 [1]、棋类游戏上打败人类顶尖高手 [2,3];控制复杂的机械进行操作 [4];调配网络资源 [5];为数据中心大幅节能 [6];甚至对机器学习算法自动调参 [7]。各大高校和企业纷纷参与其中,提出了眼花缭乱的 DRL 算法和应用。可以说,过去三年是 DRL 的爆红期。DeepMind 负责 AlphaGo 项目的研究员 David Silver 喊出“AI = RL + DL”,认为结合了 DL 的表示能力与 RL 的推理能力的 DRL 将会是人工智能的终极答案。1.1 DRL 的可复现性危机然而,研究人员在最近半年开始了对 DRL 的反思。由于发表的文献中往往不提供重要参数设置和工程解决方案的细节,很多算法都难以复现。2017 年 9 月,著名 RL 专家 Doina Precup 和 Joelle Pineau 所领导的的研究组发表了论文 Deep Reinforcement Learning that Matters[8],直指当前 DRL 领域论文数量多却水分大、实验难以复现等问题。该文在学术界和工业界引发热烈反响。很多人对此表示认同,并对 DRL 的实际能力产生强烈怀疑。其实,这并非 Precup& Pineau 研究组第一次对 DRL 发难。早在 2 个月前,该研究组就通过充足的实验对造成 DRL 算法难以复现的多个要素加以研究,并将研究成果撰写成文 Reproducibility of Benchmarked Deep Reinforcement Learning Tasks for Continuous Control[9]。同年 8 月,他们在 ICML 2017 上作了题为“Reproducibility of Policy Gradient Methods for Continuous Control”的报告 [10],通过实例详细展示了在复现多个基于策略梯度的算法的过程中,由于种种不确定性因素导致的复现困难。12 月,在万众瞩目的 NIPS 2017 DRL 专题研讨会上,Joelle Pineau 受邀作了题为“Reproducibility of DRL and Beyond”的报告 [11]。报告中,Pineau 先介绍了当前科研领域的“可复现性危机” :在《自然》杂志的一项调查中,90% 的被访者认为“可复现性”问题是科研领域存在的危机,其中,52% 的被访者认为这个问题很严重。在另一项调查中,不同领域的研究者几乎都有很高的比例无法复现他人甚至自己过去的实验。可见“可复现性危机”有多么严峻!Pineau 针对机器学习领域发起的一项调研显示,同样有 90% 的研究者认识到了这个危机。机器学习领域存在严重的“可复现性危机”[11]随后,针对 DRL 领域,Pineau 展示了该研究组对当前不同 DRL 算法的大量可复现性实验。实验结果表明,不同 DRL 算法在不同任务、不同超参数、不同随机种子下的效果大相径庭。在报告后半段,Pineau 呼吁学界关注“可复现性危机”这一问题,并根据她的调研结果,提出了 12 条检验算法“可复现性”的准则,宣布计划在 ICLR 2018 开始举办“可复现实验挑战赛”(“可复现危机”在其他机器学习领域也受到了关注,ICML 2017 已经举办了 Reproducibility in Machine Learning Workshop,并将在今年继续举办第二届),旨在鼓励研究者做出真正扎实的工作,抑制机器学习领域的泡沫。Pineau & Precup 研究组的这一系列研究获得了广泛关注。Pineau 基于大量调查提出的检验算法“可复现性”准则 [11]1.2 DRL 研究存在多少坑?同样在 12 月,Reddit 论坛上也开展了关于机器学习不正之风的热烈讨论 [12]。有人点名指出,某些 DRL 代表性算法之所以在模拟器中取得了优秀却难以复现的表现,是因为作者们涉嫌在实验中修改模拟器的物理模型,却在论文中对此避而不谈。对现有 DRL 算法的批判浪潮仍旧不断涌来。2018 年的情人节当天,曾经就读于伯克利人工智能研究实验室(Berkeley Artificial Intelligence Research Lab, BAIR)的 Alexirpan 通过一篇博文 Deep Reinforcement Learning Doesn't Work Yet[13] 给 DRL 圈送来了一份苦涩的礼物。他在文中通过多个例子,从实验角度总结了 DRL 算法存在的几大问题:
样本利用率非常低;最终表现不够好,经常比不过基于模型的方法;好的奖励函数难以设计;难以平衡“探索”和“利用”, 以致算法陷入局部极小;对环境的过拟合;灾难性的不稳定性…虽然作者在文章结尾试着提出 DRL 下一步应该解决的一系列问题,很多人还是把这篇文章看做 DRL 的“劝退文”。几天后,GIT 的博士生 Himanshu Sahni 发表博文 Reinforcement Learning never worked, and 'deep'> 另一位 DRL 研究者 Matthew Rahtz 则通过讲述自己试图复现一个 DRL 算法的坎坷历程来回应 Alexirpan,让大家深刻体会了复现 DRL 算法有多么难 [15]。半年前,Rahtz 出于研究兴趣,选择对 OpenAI 的论文 Deep Reinforcement Learning from Human Preferences 进行复现。在复现的过程中,几乎踩了 Alexirpan 总结的所有的坑。他认为复现 DRL 算法与其是一个工程问题,更不如说像一个数学问题。“它更像是你在解决一个谜题,没有规律可循,唯一的方法是不断尝试,直到灵感出现彻底搞明白。……很多看上去无关紧要的小细节成了唯一的线索……做好每次卡住好几周的准备。”Rahtz 在复现的过程中积累了很多宝贵的工程经验,但整个过程的难度还是让他花费了大量的金钱以及时间。他充分调动不同的计算资源,包括学校的机房资源、Google 云计算引擎和 FloydHub,总共花费高达 850 美元。可就算这样,原定于 3 个月完成的项目,最终用了 8 个月,其中大量时间用在调试上。
道翰天琼CiGril认知智能机器人API用户需要按步骤获取基本信息:
在平台注册账号登录平台,进入后台管理页面,创建应用,然后查看应用,查看应用相关信息。在应用信息页面,找到appid,appkey秘钥等信息,然后写接口代码接入机器人应用。请求地址:http://www.weilaitec.com/cigirlrobot.cgr
请求方式:post
请求参数:
参数
类型
默认值
描述
userid
String
无
平台注册账号
appid
String
无
平台创建的应用id
key
String
无
平台应用生成的秘钥
msg
String
""
用户端消息内容
ip
String
""
客户端ip要求唯一性,无ip等可以用QQ账号,微信账号,手机MAC地址等代替。
接口连接示例:http://www.weilaitec.com/cigirlrobot.cgr?key=UTNJK34THXK010T566ZI39VES50BLRBE8R66H5R3FOAO84J3BV&msg=你好&ip=119.25.36.48&userid=jackli&appid=52454214552 注意事项:参数名称都要小写,五个参数不能遗漏,参数名称都要写对,且各个参数的值不能为空字符串。否则无法请求成功。userid,appid,key三个参数要到平台注册登录创建应用之后,然后查看应用详情就可以看到。userid就是平台注册账号。
示例代码JAVA:
import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; public class apitest { /** * Get请求,获得返回数据 * @param urlStr * @return */ private static String opUrl(String urlStr) { URL url = null; HttpURLConnection conn = null; InputStream is = null; ByteArrayOutputStream baos = null; try { url = new URL(urlStr); conn = (HttpURLConnection) url.openConnection(); conn.setReadTimeout(5 * 10000); conn.setConnectTimeout(5 * 10000); conn.setRequestMethod("POST"); if (conn.getResponseCode() == 200) { is = conn.getInputStream(); baos = new ByteArrayOutputStream(); int len = -1; byte[] buf = new byte[128]; while ((len = is.read(buf)) != -1) { baos.write(buf, 0, len); } baos.flush(); String result = baos.toString(); return result; } else { throw new Exception("服务器连接错误!"); } } catch (Exception e) { e.printStackTrace(); } finally { try { if (is != null) is.close(); } catch (IOException e) { e.printStackTrace(); } try { if (baos != null) baos.close(); } catch (IOException e) { e.printStackTrace(); } conn.disconnect(); } return ""; } public static void main(String args []){ //msg参数就是传输过去的对话内容。 System.out.println(opUrl("http://www.weilaitec.com/cigirlrobot.cgr?key=UTNJK34THXK010T566ZI39VES50BLRBE8R66H5R3FOAO84J3BV&msg=你好&ip=119.25.36.48&userid=jackli&appid=52454214552")); } }