记一次基于强化学习的有向图搜索
文章目录
- 一些闲话
- 关于项目
- 要解决的问题
- 环境建模
- 状态
- 动作
- 状态转移
- 奖励设置
- 不同版本的游戏规则
- 数据仿真大法
- 一些技巧和经验
- 动作选择
- 学习率
- 模型主体
- 经验回放
- 考虑结合集成学习
一些闲话
距离上一次更新已经过去三个月了。
记得大学养生通识课上说,春发,夏长,秋收,冬藏。果然,天一冷,精力没有春夏秋那么旺盛了,天一晚脑子就木,步也不怎么跑了,博客也不怎么更了,看书效率也低了。好在前面几个季度,减肥效果还是比较有成效的,冬天空气也不太好,暂且修养一段时间,等天暖和之后继续跑步和更新博客。
近期,某个项目用到了强化学习的思路,趁热打铁,把经验简单梳理总结一下,免得时间久了又忘了。
关于项目
大概一两个月之前,开始着手一个新项目。经过一番调研,还是强化学习的思路比较合适。然后试到今天。初见眉目。
最近回了趟学校,顺便交流了下,非常巧,发现实验室也有个非常像的项目,不过应用场景不一样。实验室在探索知识图谱的思路,因为有数据,开展的也很顺利。我们各种资源有限,只能另辟蹊径。
不过话又说回来,抛开应用场景和数据支持谈算法,都是假大空。。。具体用什么思路和算法,还是要以自己高效、好用、实用为准。
要解决的问题
简单描述一下问题模型,项目细节略过。
一个有向无环图,节点上有异常信号和其他信号,异常信号和相邻节点上的信号相关,异常信号定义成一个0~1的标量。
需要解决的问题或问题的目标是,从一个节点开始,沿有向图搜寻出一条链路,链路上的异常节点的比例尽量多,链路尽量长。
有点像贪吃蛇。
搞明白大概要做什么事情之后,先是一波调研。
搞了本图神经网络的书,花了大概一周,差不多刷了一遍;除了图卷机的一些公式推了一两天,其他地方相对比较水。
搞了本知识读谱的书,又花了两天时间,挑有用的读了两章。
整体感觉这两套思路都不太合适。主要还是数据的原因。
图神经网络,能得到每个节点的推荐概率,但需要监督数据。这个我们没有。即便有,最后输出也只是点的概率,不是一条链路,搞不好还要后处理什么的,可能更麻烦。这个思路先往后排;
知识图谱也是一样,需要监督数据。我们的数据没有标签,而且太杂太乱,感觉不适用。这个思路也先往后排;
比来比去,强化学习的思路会比较好。
- 人在解决这个问题的时候,也是根据节点信号和邻域节点信号,一步步决策、搜索、再决策的交互过程。
- 对数据的要求相对较低,节点上的异常信号,可以作为奖励的一个依据;
然后就是环境建模的问题。状态空间,动作空间、状态转移怎么定义。
环境建模
状态
对于图数据,一个难点就是它的结构信息很重要,但不好编码,不像图片和语音信号那么规整,因此难以编码成固定长度的信号,输入到学习模型里,比方说神经网络。这也是为什么专门有图神经网络,以及图信号处理。
在看图神经网络的时候。提到过一个随机游走编码的思路。本来是用来举反例的,说这样编码会破坏掉部分结构信息,而图神经网络可以很好地保留结构信息。
但在这个问题模型里,随机游走编码好像就比较合适了,一方面信息足够用,另一方面动作空间也比较好定义。
所以最后定义的状态,通过随机游走几条路径,得到一个规整的张量,或者说一个多通道的矩阵。
- 矩阵的行:对应一条路径;
- 矩阵的列: 对应随机游走的深度;
- 矩阵的通道:对应单个节点的不同信号。
动作
沿着第i条路径前进一步;
状态转移
沿着第i条路径前进一步,在新节点上继续随机游走,对状态编码;
奖励设置
最开始,这里想的太简单了。后来发现,智能体很容易找到规则的漏洞,投机取巧,钻空子。奖励的设置,还是要多考虑、多调整,和智能体斗志斗勇。
插一句,之前和还在做HR的cindy姐的一次聊天中,有感而发:还是和机器打交道比较轻松,和人打交道比较累,尤其是和一个team的人打交道,要考虑的太多,还容易费力不讨好。。。
现在想收回这句话了。。。
当机器有一定的智能之后,尤其是在机器组成的一个team里(后面提到的集成学习),总有那么一两个机器最先学会钻游戏规则的空子,然后教给其他的机器,最后整个team都学会了投机取巧。。。
和机器打交道也要斗智斗勇了。。。
不同版本的游戏规则
基本采取了 奖励= 移动方向奖励 + 移动效果奖励 的规则
- 移动效果奖励
- 移动后,节点的异常度,最大1,最小0
- 移动方向奖励
- 第1版
- 前进1,后退-1,不动0;
- 问题:智能体经常在节点之间来回走动,因为只要两个节点中有异常节点,奖励就会越来越多;
- 第2版
- 前进1,后退-2,不动-1;
- 智能体不在两个异常节点之间来回走动了,因为奖励会有消耗。
- 问题:智能体会倾向选择长的链路,即便链路上的节点不存在异常;
- 第3版
- 前进-1,后退-3,不动-2
- 吸取之前的教训,前进需要有负奖励,否则智能体容易不劳而获;
- 尝试中…
- 第1版
数据仿真大法
天下武功,唯快不破。快的奥义,在于厚积薄发,无用之用,慢中求快,快中求准 →_→
- 数据还没到位的时候,先建个数学模型,生成一波仿真数据;
- 基于仿真数据,把代码写好,相关模块设计好,参数调一下熟悉一下;
- 数据到位之后,数据接口模块需要重写一下,其他模块基本不用变;
- 根据真实数据,调参训练模型。好的情况下,参数不会变太多;
- 参数基本确定后,就是漫长的训练。人的工作基本结束,偶尔看下训练效果,调一调。
- 训练期间,可以着手做一些其他事,比方说写写总结文档,想想下一步计划。
一些技巧和经验
动作选择
ϵ \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′argmaxq(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′位置取得尽量准确的最大值;
记一次基于强化学习的有向图搜索相关推荐
- 华为诺亚ICLR 2020满分论文:基于强化学习的因果发现算法
2019-12-30 13:04:12 人工智能顶会 ICLR 2020 将于明年 4 月 26 日于埃塞俄比亚首都亚的斯亚贝巴举行,不久之前,大会官方公布论文接收结果:在最终提交的 2594 篇论文 ...
- 智能城市dqn算法交通信号灯调度_博客 | 滴滴 KDD 2018 论文详解:基于强化学习技术的智能派单模型...
原标题:博客 | 滴滴 KDD 2018 论文详解:基于强化学习技术的智能派单模型 国际数据挖掘领域的顶级会议 KDD 2018 在伦敦举行,今年 KDD 吸引了全球范围内共 1480 篇论文投递,共 ...
- 滴滴 KDD 2018 论文详解:基于强化学习技术的智能派单模型
国际数据挖掘领域的顶级会议 KDD 2018 在伦敦举行,今年 KDD 吸引了全球范围内共 1480 篇论文投递,共收录 293 篇,录取率不足 20%.其中滴滴共有四篇论文入选 KDD 2018,涵 ...
- 【强化学习与机器人控制论文 3】基于强化学习的五指灵巧手玩转魔方
这里写目录标题 1. 引言 2. 论文解读 2.1 背景 2.2 硬件平台和仿真平台的搭建 2.3 主要算法框架 2.4 自动域随机化ADR 2.5 实验结果 3. 总结 1. 引言 本文介绍一篇Op ...
- 基于强化学习的质量AI在淘系互动业务的实践之路
导读:AI人工智能的概念由来已久,因为alphago在围棋领域击败李世石掀起了全世界范围内的AI热潮,最近又随着DeepMind破解蛋白质折叠难题这一诺奖级成果再次让我们发现AI已经进化到了如此强大的 ...
- 基于强化学习的自动化剪枝模型
点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 来源丨AI科技评论 编辑丨极市平台 导读 GitHub上最新开源的一 ...
- 今晚8点:基于强化学习的关系抽取和文本分类 | PhD Talk #18
「PhD Talk」是 PaperWeekly 的学术直播间,旨在帮助更多的青年学者宣传其最新科研成果.我们一直认为,单向地输出知识并不是一个最好的方式,而有效地反馈和交流可能会让知识的传播更加有意义 ...
- 直播预告:基于强化学习的关系抽取和文本分类 | PhD Talk #18
「PhD Talk」是 PaperWeekly 的学术直播间,旨在帮助更多的青年学者宣传其最新科研成果.我们一直认为,单向地输出知识并不是一个最好的方式,而有效地反馈和交流可能会让知识的传播更加有意义 ...
- 王亚楠:基于强化学习的自动码率调节
本文来自 爱奇艺 技术产品中心 资深工程师 王亚楠在LiveVideoStackCon 2018热身分享,并由LiveVideoStack整理而成.在分享中,王亚楠分别介绍了自动码率调节的实现过程.现 ...
最新文章
- 简述 clearfix 的原理
- echarts 点亮中国插件研究
- ubuntu 16.04 编译 opencv_contrib 3.4, nonfree
- 病毒木马防御与分析实战
- 文字或者图片连续滚动
- 中原银行张本晨:中原银行数字化营销体系建设实践
- 运行java程序时找不到_基本Java运行时程序找不到python
- str()和repre()的区别
- Token Based Authentication using ASP.NET Web API 2, Owin, and Identity
- 福建地震局网站被******挂壮阳广告
- hasoffers API 研究
- LANC环链电动葫芦的结构设计与组成
- 联想V480(扬天) EI Capitan 完美驱动教程
- 【基础整理】Mapping representation 机器人所用地图种类及相关介绍
- 解析移动互联网四大App云加固平台市场和质量对比
- 冰河浅析 - 揭开***的神秘面纱(下)
- GPS手机射频的一些测试项目
- 难道这就是传说中的PR劫持吗?爱商网2ec.cn
- 严格反馈系统的反演控制的新框架
- scRNA-seq | 吐血整理的单细胞入门教程(ID转换)(六)