文章目录

  • 一些闲话
  • 关于项目
  • 要解决的问题
  • 环境建模
    • 状态
    • 动作
    • 状态转移
  • 奖励设置
    • 不同版本的游戏规则
  • 数据仿真大法
  • 一些技巧和经验
    • 动作选择
    • 学习率
    • 模型主体
    • 经验回放
    • 考虑结合集成学习

一些闲话

距离上一次更新已经过去三个月了。

记得大学养生通识课上说,春发,夏长,秋收,冬藏。果然,天一冷,精力没有春夏秋那么旺盛了,天一晚脑子就木,步也不怎么跑了,博客也不怎么更了,看书效率也低了。好在前面几个季度,减肥效果还是比较有成效的,冬天空气也不太好,暂且修养一段时间,等天暖和之后继续跑步和更新博客。

近期,某个项目用到了强化学习的思路,趁热打铁,把经验简单梳理总结一下,免得时间久了又忘了。

关于项目

大概一两个月之前,开始着手一个新项目。经过一番调研,还是强化学习的思路比较合适。然后试到今天。初见眉目。

最近回了趟学校,顺便交流了下,非常巧,发现实验室也有个非常像的项目,不过应用场景不一样。实验室在探索知识图谱的思路,因为有数据,开展的也很顺利。我们各种资源有限,只能另辟蹊径。

不过话又说回来,抛开应用场景和数据支持谈算法,都是假大空。。。具体用什么思路和算法,还是要以自己高效、好用、实用为准。

要解决的问题

简单描述一下问题模型,项目细节略过。

一个有向无环图,节点上有异常信号和其他信号,异常信号和相邻节点上的信号相关,异常信号定义成一个0~1的标量。
需要解决的问题或问题的目标是,从一个节点开始,沿有向图搜寻出一条链路,链路上的异常节点的比例尽量多,链路尽量长。
有点像贪吃蛇。

搞明白大概要做什么事情之后,先是一波调研

  • 搞了本图神经网络的书,花了大概一周,差不多刷了一遍;除了图卷机的一些公式推了一两天,其他地方相对比较水。

  • 搞了本知识读谱的书,又花了两天时间,挑有用的读了两章。

整体感觉这两套思路都不太合适。主要还是数据的原因

  • 图神经网络,能得到每个节点的推荐概率,但需要监督数据。这个我们没有。即便有,最后输出也只是点的概率,不是一条链路,搞不好还要后处理什么的,可能更麻烦。这个思路先往后排;

  • 知识图谱也是一样,需要监督数据。我们的数据没有标签,而且太杂太乱,感觉不适用。这个思路也先往后排;

比来比去,强化学习的思路会比较好。

  • 人在解决这个问题的时候,也是根据节点信号和邻域节点信号,一步步决策、搜索、再决策的交互过程。
  • 对数据的要求相对较低,节点上的异常信号,可以作为奖励的一个依据;

然后就是环境建模的问题。状态空间,动作空间、状态转移怎么定义。

环境建模

状态

对于图数据,一个难点就是它的结构信息很重要,但不好编码,不像图片和语音信号那么规整,因此难以编码成固定长度的信号,输入到学习模型里,比方说神经网络。这也是为什么专门有图神经网络,以及图信号处理。

在看图神经网络的时候。提到过一个随机游走编码的思路。本来是用来举反例的,说这样编码会破坏掉部分结构信息,而图神经网络可以很好地保留结构信息。

但在这个问题模型里,随机游走编码好像就比较合适了,一方面信息足够用,另一方面动作空间也比较好定义。

所以最后定义的状态,通过随机游走几条路径,得到一个规整的张量,或者说一个多通道的矩阵

  • 矩阵的:对应一条路径
  • 矩阵的: 对应随机游走的深度
  • 矩阵的通道:对应单个节点的不同信号

动作

沿着第i条路径前进一步;

状态转移

沿着第i条路径前进一步,在新节点上继续随机游走,对状态编码;

奖励设置

最开始,这里想的太简单了。后来发现,智能体很容易找到规则的漏洞,投机取巧,钻空子。奖励的设置,还是要多考虑、多调整,和智能体斗志斗勇。

插一句,之前和还在做HR的cindy姐的一次聊天中,有感而发:还是和机器打交道比较轻松,和人打交道比较累,尤其是和一个team的人打交道,要考虑的太多,还容易费力不讨好。。。

现在想收回这句话了。。。

当机器有一定的智能之后,尤其是在机器组成的一个team里(后面提到的集成学习),总有那么一两个机器最先学会钻游戏规则的空子,然后教给其他的机器,最后整个team都学会了投机取巧。。。

和机器打交道也要斗智斗勇了。。。

不同版本的游戏规则

基本采取了 奖励= 移动方向奖励 + 移动效果奖励 的规则

  • 移动效果奖励

    • 移动后,节点的异常度,最大1,最小0
  • 移动方向奖励
    • 第1版

      • 前进1,后退-1,不动0;
      • 问题:智能体经常在节点之间来回走动,因为只要两个节点中有异常节点,奖励就会越来越多;
    • 第2版
      • 前进1,后退-2,不动-1;
      • 智能体不在两个异常节点之间来回走动了,因为奖励会有消耗。
      • 问题:智能体会倾向选择长的链路,即便链路上的节点不存在异常;
    • 第3版
      • 前进-1,后退-3,不动-2
      • 吸取之前的教训,前进需要有负奖励,否则智能体容易不劳而获;
      • 尝试中…

数据仿真大法

天下武功,唯快不破。快的奥义,在于厚积薄发,无用之用,慢中求快,快中求准 →_→

  1. 数据还没到位的时候,先建个数学模型,生成一波仿真数据;
  2. 基于仿真数据,把代码写好,相关模块设计好,参数调一下熟悉一下;
  3. 数据到位之后,数据接口模块需要重写一下,其他模块基本不用变;
  4. 根据真实数据,调参训练模型。好的情况下,参数不会变太多;
  5. 参数基本确定后,就是漫长的训练。人的工作基本结束,偶尔看下训练效果,调一调。
  6. 训练期间,可以着手做一些其他事,比方说写写总结文档,想想下一步计划。

一些技巧和经验

动作选择

ϵ \epsilon ϵ-贪婪 + 规则启发

  • ϵ \epsilon ϵ-贪婪:用来平衡探索-开发问题
  • 规则启发:可以有重点地探索,训练效果明显提速

学习率

  • 模拟退火比较好用, c o s ( 2 π t T ) ⋅ e − t cos(2\pi\frac {t} {T}) ·e^{-t} cos(2πTt​)⋅e−t,再缩放到指定范围
  • 一个batch的数据要多训练几个epoch,充分学习,否则会太仓促,智能体来不及学会,就换学习下一个batch了;

模型主体

对于强化学习,模型不能太复杂,神经网络层数不能太多,够用就行,太复杂的难收敛;

经验回放

  • 循环队列实现经验的储存
  • 经验容量不能太少,避免抽样时一个batch里样本的相关性;
  • 经验容量不能太多,尤其在奖励设置还有可能修改的时候;
  • 经验容量可以参考 容量=每个episode的动作次数平均值 × batch_size × 某个常数

考虑结合集成学习

一些好处

  • 多个智能体并行训练,经验回放使用同一个经验库,这样可以快速得到很多经验
  • 多个智能体之间可以相互学习,尤其在某个智能体训练发散或过拟合之后,通过其他智能体得到纠正
  • 单一模型复杂度可以适当降低

但是不能违背集成学习的 “好而不同” 原则;

  • 共性:单一模型的能力都不能太低,有一定下限,至少要>50%正确率;
  • 个性:智能体之间的相关学习,不能太频繁,还是要保持各自的 “个性”,否则容易太像;

另外:

  • 多个智能体相互学习,需要它们有相同的神经网络结构;
  • 可以使用不同算法训练智能体,比如SARSA,Q-learning, Double Q-learning,效果不好的智能体投票权重低;

综合比较:

  • SARSA稳定但收敛慢,
  • Q-learning相对不稳定,但学习速度很快;
  • Double Q-learning暂时感觉相对折中;

考虑可能的原因

  • 两者都是通过“自举”的思想,估计动作价值函数。

  • 两者的差异在于,

    • SARSA属于同策,直接把后一状态的价值估计 q ( s ′ , a ′ ) q(s', a') q(s′,a′)拿来用,里面有更多的 ϵ − \epsilon- ϵ−贪婪的因素,导致更新目标相对真实值较远:
      q ( s , a ) ← r + γ ⋅ q ( s ′ , a ′ ) q(s, a)\leftarrow r + \gamma·q(s', a') q(s,a)←r+γ⋅q(s′,a′)

    • Q-learning属于异策,对 q ( s ′ , a ′ ) q(s', a') q(s′,a′)取了最大值,导致更新目标过度乐观,但距离真实值更近
      q ( s , a ) ← r + γ ⋅ arg max ⁡ a ′ q ( s ′ , a ′ ) q(s, a)\leftarrow r + \gamma·\argmax_{a'}q(s', a') q(s,a)←r+γ⋅a′argmax​q(s′,a′)

    • 在训练好之前, q ( s ′ , a ′ ) q(s', a') q(s′,a′)毕竟还是有很多误差的,但 Q-learning对误差的容忍度更低,只要 q ( s ′ , a ′ ) q(s', a') q(s′,a′)的最大值尽量准可以;但SARSA还要求 q ( s ′ , a ′ ) q(s', a') q(s′,a′)必须在正确的 a ′ a' a′位置取得尽量准确的最大值;

记一次基于强化学习的有向图搜索相关推荐

  1. 华为诺亚ICLR 2020满分论文:基于强化学习的因果发现算法

    2019-12-30 13:04:12 人工智能顶会 ICLR 2020 将于明年 4 月 26 日于埃塞俄比亚首都亚的斯亚贝巴举行,不久之前,大会官方公布论文接收结果:在最终提交的 2594 篇论文 ...

  2. 智能城市dqn算法交通信号灯调度_博客 | 滴滴 KDD 2018 论文详解:基于强化学习技术的智能派单模型...

    原标题:博客 | 滴滴 KDD 2018 论文详解:基于强化学习技术的智能派单模型 国际数据挖掘领域的顶级会议 KDD 2018 在伦敦举行,今年 KDD 吸引了全球范围内共 1480 篇论文投递,共 ...

  3. 滴滴 KDD 2018 论文详解:基于强化学习技术的智能派单模型

    国际数据挖掘领域的顶级会议 KDD 2018 在伦敦举行,今年 KDD 吸引了全球范围内共 1480 篇论文投递,共收录 293 篇,录取率不足 20%.其中滴滴共有四篇论文入选 KDD 2018,涵 ...

  4. 【强化学习与机器人控制论文 3】基于强化学习的五指灵巧手玩转魔方

    这里写目录标题 1. 引言 2. 论文解读 2.1 背景 2.2 硬件平台和仿真平台的搭建 2.3 主要算法框架 2.4 自动域随机化ADR 2.5 实验结果 3. 总结 1. 引言 本文介绍一篇Op ...

  5. 基于强化学习的质量AI在淘系互动业务的实践之路

    导读:AI人工智能的概念由来已久,因为alphago在围棋领域击败李世石掀起了全世界范围内的AI热潮,最近又随着DeepMind破解蛋白质折叠难题这一诺奖级成果再次让我们发现AI已经进化到了如此强大的 ...

  6. 基于强化学习的自动化剪枝模型

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 来源丨AI科技评论 编辑丨极市平台 导读 GitHub上最新开源的一 ...

  7. 今晚8点:基于强化学习的关系抽取和文本分类 | PhD Talk #18

    「PhD Talk」是 PaperWeekly 的学术直播间,旨在帮助更多的青年学者宣传其最新科研成果.我们一直认为,单向地输出知识并不是一个最好的方式,而有效地反馈和交流可能会让知识的传播更加有意义 ...

  8. 直播预告:基于强化学习的关系抽取和文本分类 | PhD Talk #18

    「PhD Talk」是 PaperWeekly 的学术直播间,旨在帮助更多的青年学者宣传其最新科研成果.我们一直认为,单向地输出知识并不是一个最好的方式,而有效地反馈和交流可能会让知识的传播更加有意义 ...

  9. 王亚楠:基于强化学习的自动码率调节

    本文来自 爱奇艺 技术产品中心 资深工程师 王亚楠在LiveVideoStackCon 2018热身分享,并由LiveVideoStack整理而成.在分享中,王亚楠分别介绍了自动码率调节的实现过程.现 ...

最新文章

  1. 简述 clearfix 的原理
  2. echarts 点亮中国插件研究
  3. ubuntu 16.04 编译 opencv_contrib 3.4, nonfree
  4. 病毒木马防御与分析实战
  5. 文字或者图片连续滚动
  6. 中原银行张本晨:中原银行数字化营销体系建设实践
  7. 运行java程序时找不到_基本Java运行时程序找不到python
  8. str()和repre()的区别
  9. Token Based Authentication using ASP.NET Web API 2, Owin, and Identity
  10. 福建地震局网站被******挂壮阳广告
  11. hasoffers API 研究
  12. LANC环链电动葫芦的结构设计与组成
  13. 联想V480(扬天) EI Capitan 完美驱动教程
  14. 【基础整理】Mapping representation 机器人所用地图种类及相关介绍
  15. 解析移动互联网四大App云加固平台市场和质量对比
  16. 冰河浅析 - 揭开***的神秘面纱(下)
  17. GPS手机射频的一些测试项目
  18. 难道这就是传说中的PR劫持吗?爱商网2ec.cn
  19. 严格反馈系统的反演控制的新框架
  20. scRNA-seq | 吐血整理的单细胞入门教程(ID转换)(六)

热门文章

  1. opencv转HSV再找红色圆——霍夫圆检测
  2. 服务器远程桌面 蓝屏,远程桌面连接windows server 2003蓝屏
  3. 原码、补码以及定点数运算
  4. geetestlib.php 用法,geetest极限验证
  5. 树莓成长记4:docker基本操作
  6. 拨打电话通过蓝牙接通
  7. 用户复购行为,该如何分析
  8. kafka的使用场景
  9. SparkSQL InternalRow
  10. Java IO流(详解)