本文共 6846 字,大约阅读时间需要 22 分钟。
探索 VS 利用,这是强化学习中至关重要的话题。我们希望强化学习中的智能体尽快找到最佳策略。然而,在没有充分探索的情况下就盲目地选择某个策略会带来一定的问题,因为这会导致模型陷入局部最优甚至完全不收敛。目前的强化学习算法朝着回报值最大化的方向优化,而探索仍然更像是一个开放性话题。本文讨论几种常见的深度强化学习探索策略。由于这个话题非常庞大,本文并不能涵盖所有的内容。
1经典探索策略首先介绍几种经典的探索算法,这些算法在多臂老虎机问题或简单的表格型强化学习中颇具成效。
-贪婪:智能体以较小的概率 进行随机探索,在大多数情况以概率 选择当前的最优动作。
置信区间上界(UCB):智能体选择当前最优的动作来最大化置信区间上界 ,其中 是到时间 t 为止与动作 a 有关的平均奖励函数, 是与已执行动作 a 的次数成反比的函数。
玻尔兹曼探索策略:智能体根据学习到的由温度参数 调节的Q值,从玻尔兹曼分布(softmax函数)中选择动作。
汤普森采样:智能体将追踪记录的最优动作概率作为先验分布,然后从这些分布中采样。当神经网络用于函数逼近时,以下策略可以在深度强化训练中使智能体更好地探索:熵损失正则项:在损失函数中加入熵正则项 ,鼓励智能体选择包含多元化动作的策略。基于噪声的探索:在观察、动作甚至在参数空间中添加噪声。
当环境提供奖励的能力非常有限或者环境有干扰噪声时,模型探索的难度会增大。
“硬探索”问题是指在奖励非常稀少甚至具有欺骗性的环境中进行探索。在这种情况下进行随机探索基本无法找到成功的状态或获得有意义的反馈。蒙特祖玛复仇游戏是硬探索问题的一个具体实例。深度强化学习仍然需要解决雅达利游戏中的一些挑战性难题。许多论文都应用蒙特祖玛复仇游戏的环境对自己的模型进行评估。
“电视加噪”问题源于2018年论文《Exploration by Random Network Distillation》中的一项实验。实验限定智能体通过观察新颖的画面就能获得奖励,如果播放的电视节目中加入了不可控和不可预测的随机噪声,就能够一直吸引智能体的注意。 该智能体会持续地从含有噪声的电视节目中获得新的奖励,但未能取得任何有意义的进步。图1:实验中,一个智能体因观察新颖的画面而获得奖励。如果迷宫中播放了加噪TC版影片,则会吸引智能体的注意力,使其停止在迷宫中移动(图片来源:OpenAI博客:“基于奖励的强化学习预测研究”)
3内在奖励作为额外的探索奖励对于解决硬探索问题,一种常用的探索方法是用附加的奖励信号来增加环境奖励,鼓励智能体进行持续的探索。因此,策略的训练由两项组成, ,其中 是调整探索与利用之间平衡的超参数。论文《How can we define intrinsic motivation?》中提到,这种内在奖励在某种程度上受到心理学的内在动机的启发。好奇心驱使的探索可能是儿童成长和学习的重要方式。换句话说,探索活动在人的潜意识中应该有内在的奖励。内在奖励可能与好奇心、惊喜、熟悉程度以及其他许多因素有关。同样的思想也可以应用到强化学习算法中。在下面的章节中,基于附加奖励的探索奖励方法大致分为两类:一是发现全新的状态,二是提高智能体对环境的认知。1、基于计数的探索策略如果将状态的新颖程度作为内在奖励的条件,那就需要寻找一种方法来衡量当前状态是新颖的还是经常出现的。一种直观的方法是统计一个状态出现的次数,并相应地分配附加奖励。与经常出现的状态相比,附加奖励会引导智能体选择那些很少受访问的状态,这被称为基于计数的探索方法。引入经验计算函数 ,该函数可以不断记录序列 中状态 s 的实际被访问次数。但是不能将其直接用在探索过程中,因为大多数状态的经验计算函数值为0,并且整个状态空间通常是连续或者高维的。我们首先需要对大多数状态进行非零计数。(1)基于密度模型的计数方法2016年论文《Unifying Count-Based Exploration and Intrinsic Motivation》利用密度模型估计状态的访问频率,并利用一种新算法从该密度模型中推导出伪计数。首先在状态空间中定义一个条件概 ,表示在前 n 个状态是 的情况下,第 n+1 个状态是 s 的概率。为了从经验上衡量这一点,我们可以简单使用 。给出状态 s 的重编码概 定义:当观察到s的新状态出现,密度模型分配给状态 s 的概率。为了更好地调整密度模型,本文引入了两个概念:伪计数函数 和伪计数总量 。它们被用来模拟经验计数函数,因此有如下计算公式: 和 之间的关系要求密度模型正向学习,即所有的 和 ,要求 。换言之,在观察到 s 的一个实例后,密度模型对该 s 的预测概率也要相应地增加。除了需要正向学习外,密度模型还要利用非随机化的经验状态数据,进行在线训练,由此可以得到 。 求解上述线性系统后,可由 和 计算伪计数:或者通过预测增益估计PG):基于计数的内在附加奖励的常见选择是 (如MBIE-EB;2008年论文《An analysis of model-based Interval Estimation for Markov DecisionProcesses》)。基于伪计数的探索附加奖励的形式类似于 。2016年论文《Unifying Count-Based Exploration and Intrinsic Motivation》中的实验采用简单的上下文树切换(CTS)密度模型来估计伪计数。CTS模型将二维图像作为输入,并根据位置相关的 L 形滤波器的乘积为其分配一个概率,其中每个滤波器的预测是由在之前图像上训练的CTS算法给出。CTS模型虽然简单,但在表达能力、可扩展性和数据效率方面有一定的限制。在后续的论文中,2017年论文《Count-Based Exploration with Neural Density Models》将训练的像素级卷积神经网络(2016年论文《Conditional Image Generation with PixelCNN Decoders》)作为密度模型改进了该方法。如2018年论文《Curiosity-Driven Experience Prioritization via Density Estimation》中所述,密度模型也可以是高斯混合模型(GMM)。他们使用变分GMM估计轨迹密度(例如一系列连贯的状态序列)及其预测概率,来指导离线策略环境中经验回放中的样本优先级。(2)哈希编码后再计数另一种对高维状态计数的方法是将状态映射到哈希码中,使状态的出现具备可追踪性(2017年论文《Exploration: A Study of Count-Based Exploration for Deep Reinforcement Learning》)。状态空间用哈希函数 离散化。将探索附加奖励 添加到奖励函数中,定义为 ,其中 N(ϕ(s)) 是 ϕ(s) 出现的经验计数。 论文《Exploration: A Study of Count-Based Exploration for Deep Reinforcement Learning》中建议使用局部敏感哈希(LSH)算法将连续的高维数据转换为离散的哈希码。LSH是一类流行的哈希函数,其根据某种相似性度量方法来查询最邻近的点。如果哈希映射x↦h(x)保留了数据点之间的距离信息,封闭向量就会获得相似的哈希值,而散列向量获得不同的哈希值,那这个映射方案就是局部敏感的。(请参阅 LSH 如何用于改进Transformer模型。)SimHash是一种计算效率很高的LSH算法
道翰天琼CiGril认知智能机器人API用户需要按步骤获取基本信息:
请求地址: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")); } }
转载地址:http://scwn.baihongyu.com/