近年来,全球大数据进入加速发展时期,数据量呈现指数级爆发式增长,而这些大量数据中不同个体间交互产生的数据以图的形式表现,如何高效地处理这些图数据成为了业界及其关心的问题。很过用普通关系数据无法跑出来的结果,用图数据进行关联分析会显得异常高效。
提到处理图数据,我们首先想到NetworkX,这是网络计算上常用的Python包,可提供灵活的图构建、分析功能。但是我们使用NetworkX跑大规模图数据时,不仅经常碰到内存不足的问题,而且分析速度很慢,究其原因,是NetworkX只支持单机运行。通过网上搜索,新发现了一个名为GraphScope的系统不仅号称兼容NetworkX的API,而且支持分布式部署运行,性能更优。针对GraphScope和NetworkX的处理能力,我们参考图计算中常用的测试框架LDBC,通过一组实验来对比下二者的性能。
一、实验介绍
为了比较两者的计算效率,先用阿里云拉起了配置为8核CPU,32GB内存的四台ECS,设计了三组比较实验,分别是NetworkX单机下的计算性能,GraphScope单机多worker的计算性能以及GraphScope分布式多机多worer的计算性能。
数据上,我们选取了SNAP开源的图数据集twitter,来自 LDBC数据集的datagen-7_5-fb,datagen-7_7-zf和datagen-8_0-fb作为实验数据,以下是数据集的基本信息:
· Twitter: 81,307个顶点,1,768,135条边
· Datagen-7_5-fb: 633,432个顶点,34,185,747条边,稠密图
· Datagen-7_7-zf: 13,180,508个顶点,32,791,267条边,稀疏图
· Datagen-8_0-fb: 1,706,561个顶点,107,507,376条边,这个数据集主要测试两个系统可处理的图规模能力
实验设计上我选择常用的SSSP、BFS、PageRank、WCC算法,以及较高复杂度的All Pair shortest Path length算法,以载图时间,内存占用和计算时间这三个指标为依据,对两个系统进行计算性能的比较。
NetworkX是一个单机系统,在实验中只考虑NetworkX在单机环境下的运行时间;GraphScope支持分布式运行,故进行两个配置,一个是单机4worker,另外一个配置是4台机器,每台机器4个worker。
二、实验结果
首先,GraphScope的载图速度比NetworkX显著提升。
在前三个图数据集中,无论是GraphScope的单机多worker模式,还是GraphScope的分布式模式,载图速度都比NetworkX快:
GraphScope单机模式载图速度平均比NetworkX快5倍,最高纪录——在datagen-7_5-fb上比NetworkX快了6倍。
分布式模式下GraphScope的载图时间比NetworkX平均快了27倍,最高纪录——在datagen-7_7-zf数据集上比NetworkX快了63倍。
在datagen-8_0-fb数据集上,NetworkX因内存溢出无法载图,GraphScope单机多worker和GraphScope分布式载图时间分别为142秒和136秒。
表一:载图时间对比
载图时间
NetworkX
GraphScope单机
GraphScope分布式
112
31
18
datagen-7_5-fb
256
456
366
datagen-7_7-zf
316
713
50
datagen-8_0-fb
OOM
142
136
其次,GraphScope的内存使用效率比NetworkX显著提升。
在datagen-8_0-fb数据集上,NetworkX在32G的内存上无法载完图,而GraphScope仅需要24G的内存即可载入在datagen-8_0-fb数据集。
表二:内存占用对比
内存占用
NetworkX
GraphScope
datagen-7_5-fb
14G
6G
datagen-7_7-zf
28G
18G
datagen-8_0-fb
OOM
24G
再次,GraphScope的计算速度比NetworkX显著提升。
SSSP算法上,GraphScope单机多worker模式平均要比NetworkX快22倍,最快在datagen-7_7-zf数据集上快了32倍。GraphScope分布式模式下平均要比NetworkX快103倍,最快datagen-7_5-fb数据集上快了182倍。
表三: SSSP计算时间对比(单位:秒)
SSSP
NetworkX
GraphScope单机
GraphScope分布式
245
132
028
datagen-7_5-fb
379
121
031
datagen-7_7-zf
584
018
003
datagen-8_0-fb
OOM
276
082
BFS算法上,GraphScope单机多worker模式平均要比NetworkX快13倍,最快datagen-7_5-fb数据集上快了22倍。GraphScope分布式模式下平均要比NetworkX快16倍,最快在datagen-7_5-fb数据集上快了28倍。
表四: BFS计算时间对比(单位:秒)
BFS
NetworkX
GraphScope单机
GraphScope分布式
153
016
017
datagen-7_5-fb
4468
252
156
datagen-7_7-zf
798
075
072
datagen-8_0-fb
OOM
1102
573
PageRank算法上,GraphScope单机多worker模式平均要比NetworkX快62倍,最快twitter数据集上快了80倍。GraphScope分布式模式下平均要比NetworkX快65倍,最快在twitter数据集上快了71倍。
另外,PageRank计算过程中,NetworkX在datagen-7_7-zf上内存溢出,没有完成计算,GraphScope单机多worker模式和分布式模式计算时间分别为25秒和22秒;
表五:PageRank计算时间对比(单位:秒)
PageRank
NetworkX
GraphScope单机
GraphScope分布式
2401
037
033
datagen-7_5-fb
300
673
517
datagen-7_7-zf
OOM
1931
779
datagen-8_0-fb
OOM
2496
2188
WCC算法上,GraphScope单机多worker模式平均要比NetworkX快44倍,最快在datagen-7_7-zf数据集上快了104倍。GraphScope分布式模式下平均要比NetworkX快76倍,最快datagen-7_5-fb数据集上快了194倍。
表六: WCC计算时间对比(单位:秒)
WCC
NetworkX
GraphScope单机
GraphScope分布式
06392
00296
00233
datagen-7_5-fb
2603
025
013
datagen-7_7-zf
8319
1457
1298
datagen-8_0-fb
OOM
034
04991
在复杂度极高的All pair shortest path length算法上,NetworkX在twitter图上即内存溢出,无法计算。GraphScope在分布式模式下完成了twitter图的All pair shortest path length计算,耗时76分钟。
表七: All Pair Shortest Path Length(单位:秒)
APSP
NetworkX
GraphScope单机
GraphScope分布式
OOM
OOM
457587
三、总结
从实验结果可以看到,在同等条件下,无论在载图时间、内存占用和计算时间上,GraphScope都要大大优于NetworkX,性能优化可以达到几十倍甚至上百倍。
6979阿强
关注
0
0
0
@网络算法工具 networkX igraph 的性能问题
alston_ethannical的博客
24
@网络算法工具 networkX igraph 的性能问题 问题的提出 当我用 50万数据去跑 networkX 开发出来的算法时,遇到了一个计算性能的问题,这个问题时很慢。 寻找答案 发现 networkX再性能方面比较差。当节点上万,边上十万的时候,新能慢的问题就会显现出来 为了解决图算法问题,该怎么办呢 遇到问题,首先定义问题的边界。也就是 先找到限制问题的条件。然后缩小问题范围。我要解决的问题是:在解决图算法相关的问题时,如何能够快速计算出结果。但是目前的算法时用networks实现的。问题的根源是
开源!一文了解阿里一站式图计算平台GraphScope
阿里云开发者
2767
简介:随着大数据的爆发,图数据的应用规模不断增长,现有的图计算系统仍然存在一定的局限。阿里巴巴拥有全球最大的商品知识图谱,在丰富的图场景和真实应用的驱动下,阿里巴巴达摩院智能计算实验室研发并开源了全球首个一站式超大规模分布式图计算平台GraphScope,并入选中国科学技术协会“科创中国”平台。本文详解图计算的原理和应用及GraphScope的架构设计。一 什么是图计算图数据对一组对象(顶点)及其关系(边)进行建模,可以直观、自然地表示现实世界中各种实体对象以及它们之间的关系。在大数据场景下,社交网络、交
一文了解阿里一站式图计算平台GraphScope_阿里云云栖号
10-2
GraphScope 提供了各类常用的分析算法,包括连通性计算类、社区发现类和 PageRank、中心度等数值计算类的算法,后续会不断扩展算法包,在超大规模图上提供与 NetworkX 算法库兼容的分析能力。此外也提供了丰富的图学习算法包,内置支持 Graph
5大典型模型测试单机训练速度超对标框架,飞桨如何做到
10-28
导读:飞桨(PaddlePaddle)致力于让深度学习技术的创新与应用更简单。在单机训练速度方面,通过高并行、低开销的异步执行策略和高效率的核心算子,优化静态图训练性能,在Paddle Fluid v150的基准测试中,在7个典型模型上进行了测试(图像领域
强化学习经典算法笔记(六):深度Q值网络 Deep Q Network
hhy_csdn的博客
9093
前期回顾 强化学习经典算法笔记(零):贝尔曼方程的推导 强化学习经典算法笔记(一):价值迭代算法Value Iteration 强化学习经典算法笔记(二):策略迭代算法Policy Iteration 强化学习经典算法笔记(三):蒙特卡罗方法Monte Calo Method 强化学习经典算法笔记(四):时间差分算法Temporal Difference(Q-Learning算法) 强化学习经典算
GraphX和GraphFrame connectedComponent计算性能对比
高臭臭的博客
3046
测试文件:用Graph rmatGraph 1000000 2000000 去重后 494587个点,1997743个边 运行环境:三台服务器,246 GB,core 71 测试三个运行例子1:Graph connectedComponents 2:GraphFrame connectedComponents 3:GraphFrame connectedComponents setAlgor
network、伪代码、算法理解、代码实现、tensorboard
11-3
定义一个q_network函数来构建Q network,输入游戏状态Q network并得到对所有动作的Q值。 网络构成给为三个带有池化的卷积层和一个全连接层。 tfreset_default_graph()defq_network(X,name_scope):# Initialize layersinitializer=tf
读书笔记机器学习实战第十一章:训练深度神经网络
MJ_Lee的博客
612
阅读书籍为《Hands-On Machine Learning with Scikit-Learn & TensorFlow》王静源等翻译的中文译版《机器学习实战,基于 Scikit-Learn 和 TensorFlow》,本文中所有均来自于书籍相关部分截图。 本章介绍了DNN训练过程中三个常见问题,并依次给出解决方案。 章节的最后还给出当不知道如何DNN训练时一些属性可以选的比较好的
Networkx 计算网络效率
tengqingyong的博客
5860
本人在计算网络效率的时候遇到了一个问题 networkx 提供了最短路径函数shortest_path及shorest_path_length 我在计算网络效率构造了一个无向图,但是我在计算点与点之间的最短路径长度时总是提示我说点不存在图中, 我在上面使用nxaverage_shortest_path_length(UG)的时候可以得到网络平均最短路径长度;这个说明我的点都
Pandas/networkx图分析简单入门
weixin_34306676的博客
516
对于图论而言,大家或多或少有些了解,数学专业或计算机相关专业的读者可能对其更加清楚。图论中的图像是由若干给定的点及连接两点的线所构成的图形,这样的图像通常用来描述某些事物之间的某种特定关系,用点代表事物,用两点之间的连接线表示二者具有的某种关系,在互联网与通信行业中应用广泛。图论分析(Graph analysis)并不是数据科学领域中的新分
networkx--四种网络模型
weixin_30764883的博客
380
NetworkX提供了4种常见网络的建模方法,分别是:规则图,ER随机图,WS小世界网络和BA无标度网络。 一 规则图 规则图差不多是最没有复杂性的一类图,random_graphsrandom_regular_graph(d, n)方法可以生成一个含有n个节点,每个节点有d个邻居节点的规则图。 下面一段示例代码,生成了包含20个节点、每个节点有3个邻居的规则
igraph/networkx学习笔记之…
nuoline的专栏
1万+
原文地址:—— 数据结构">igraph/networkx学习笔记之一 —— 数据结构作者:zhengw789 首先,基本上所有的graph library都有其局限性,不同的数据结构有优点的同时必然有缺点,图算法对数据结构的依赖性构成另一个原因。所以如果是想用一个工具包解决所有的问题显然是一种奢望,很多时候甚至必须要从头写自己的代码。但是阅读igraph和networkx这样成型了的函数库对熟悉
python下的复杂网络编程包networkx的使用(摘抄)
weixin_30631587的博客
2335
原文:http://blogsciencenetcn/homephpmod=space&uid=404069&do=blog&classid=141080&view=me&from=space 复杂网络分析库NetworkX学习笔记(1):入门 NetworkX是一个用Python语言开发的图论与复杂网络建模工具,内置了常用的图与复杂网
更快更简单|飞桨PaddlePaddle单机训练速度优化最佳实践
PaddlePaddle
1672
导读:飞桨(PaddlePaddle)致力于让深度学习技术的创新与应用更简单。在单机训练速度方面,通过高并行、低开销的异步执行策略和高效率的核心算子,优化静态图训练性能,
GraphX与GraphLab、Pregel的对比
yang灬仔
588
分布式批同步BSP Pregel、GraphLab、GraphX都是基于BSP(Bulk Synchronous Parallel)模式,即整体同步并行。一次计算过程由一系列全局超步组成,每一个超步由并发计算、通信和同步三个步骤组成。从垂直上看,一个程序由一系列串行的超步组成。从水平上看,在一个超步中,所有的进程并行执行局部计算。BSP最大的好处是编程简单,但在某些情况下BSP运算的性能非常差,
TensorFlow学习记录:VGGNet卷积神经网络模型
weixin_41137655的博客
308
1VGGNet模型结构简介 VGGNet是由牛津大学计算机视觉几何组(Visual Geomety Group,VGG)和Google Deepmind公司的研究员合作研发的深度卷积神经网络,VGG的成员Karen Simonyan和Andrew Zisserman在2014年撰写的论文《Very Deep Convolutional Networks for Large-Scale Image
11月编程语言排行冠军揭晓,稳
热门推荐
IT教育任姐姐的博客
4万+
大家好 今天任姐姐要跟小伙伴们分享 2021年11月最新TIOBE指数 11月编程排行榜 Python继续榜首 本月的幸运儿只有一个,那就是Python! 继上个月我们见证了Python夺冠这一历史性的画面之后,这个月Python仍旧稳坐榜首,看来Python这股大风还在继续刮。 随后分别是 C、Java、C++、C#,这些也都是我们的老朋友了。 PHP即将跌出前十 自20多年前TIOBE 指数开始发布以来,PHP 一直常驻在榜单前十,然而最近,该语言已经开始在前十
python能做什么软件?Python到底能干嘛,一文看懂
小分享
6573
Python培训有哪些内容很多零基础学员不知道Python软件是干什么用的Python软件是Python工程师编写代码时所需要的编辑工具,现在比较常用的Python软件有Visu 那么在选择Python培训机构时学生尤为关注的就是培训内容,从现在几家大的机构可以看出,Python培训主要学习第一阶段Python核心编程(Pyth 一文读懂Python内置变量,函数,模块在这里解释下什么是解释性语言什么是编译性语言: 编译性语言:如c++,c等,写好的代码要通过编译器编译成 *** 作系统直接可
Django中超级用户的创建和删除 *** 作
最新发布
Protinx的博客
91
创建超级用户 这就很easy了,毕竟这是所有初学者都会的, *** 作如下: 打开Terminal,输入: python managepy createsuperuser 然后按照提示输入相应的用户名、邮箱和密码就可以啦,如下: 创建超级用户 可以看到上面我的密码输入了三次,还有不成功的提示,Django本身对于超级用户的密码要求还是很多的,大家定义密码要注意啊,或者如果只是自己学习的话,也可在‘Bypass password validation and create user an
上海python培训中心
weixin_63757190的博客
166
前几天,有个读者在后台留言,说: “最近被论文折磨得快崩溃了,我现在是恨不得克隆十个自己,一个呆在科室值班,一个去写月底要送审的稿子,一个去上百个网站翻数据 还有另外七个“我”,这边六七篇论文还没搞定。那边又有新论文要开题了,加上最后一个“本我”,刚刚够用,我可真是个数学天才! 可现实是只有一个我,只能天天熬夜。 好家伙,整得我都开始反问自己,是不是只有我的科研生活这么兵荒马乱?” 其实他不是个例,成千上万的科研人都要面对无尽的实验分析、反复修改的论文。 难道就只有被虐的份吗?
python装饰器
Live&Learn的博客
1208
学习目标:一口气把装饰器描述清楚 弄清楚装饰器前要理解三个东西: 函数对象、函数嵌套、函数构成闭包。 学习内容: 函数对象好说,python编程语言属于动态语言,python中一切皆对象,所以函数也是对象。 函数对象用函数名称表示(仅名称,没有括号,也没有参数)。 例如,定义了一个求和函数add,那么此处的add就是个函数对象。 def add(username, a, b): print(f"{a}+{b}={a + b}") return a + b 函数嵌套或者嵌套函数,就是定
©️2021 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页
关于我们
招贤纳士
广告服务
开发助手
400-660-0108
kefu@csdnnet
在线客服
工作时间 8:30-22:00
公安备案号11010502030143
京ICP备19004658号
京网文〔2020〕1039-165号
经营性网站备案信息
北京互联网违法和不良信息举报中心
网络110报警服务
中国互联网举报中心
家长监护
Chrome商店下载
©1999-2021北京创新乐知网络技术有限公司
版权与免责声明
版权申诉
出版物许可证
营业执照
6979阿强
码龄0年
暂无认证
11
原创
13万+
周排名
12万+
总排名
579
访问
等级
132
积分
1
粉丝
1
获赞
0
评论
1
收藏
私信
关注
热门文章
GraphScope、Neo4j与TigerGraph单机环境下性能对比 146
NetworkX与GraphScope的性能对比 88
GraphScope、Gemini与GraphX的性能对比 60
分布式图计算引擎 46
国足历届世界杯对战图关系 45
最新评论
图分析入门
大家一起学编程(python): 感谢博主的分享!
您愿意向朋友推荐“博客详情页”吗?
强烈不推荐
不推荐
一般般
推荐
强烈推荐
最新文章
2021-10-11
图数据库在社交方向上的应用
国足历届世界杯对战图关系
2021年11篇
你的浏览器目前处于缩放状态,页面可能会出现错位现象,建议100%大小显示。
举报
————————————————
版权声明:本文为CSDN博主「6979阿强」的原创文章,遵循CC 40 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blogcsdnnet/tanekf6979/article/details/120067176
战争系统是典型的复杂系统,传统的建模方法已经不能很好地刻画和描述。而基于主体技术的建模仿真方法体现了一种“活”的建模思想,是最具活力、最有影响的方法之一。
主体建模仿真渗入信息化战争
战争系统是典型的复杂系统。随着以信息技术为核心的高新技术在军事领域的深入应用,信息化战争越来越呈现出超高维、不确定、非线性、动态性等复杂性特征。而建立在牛顿科学体系下的传统战争理论和方法,仍然习惯于从还原论的思想出发,以局部、静态为主的方式来研究战争问题,将战争视为简单系统,视为“机器”的战争,忽视了人、指挥控制、信息交互等因素在战争中至关重要的作用,越来越不适应于现代信息化战争。而基于主体技术的建模方法则是研究信息化战争的重要手段之一。
近年来,基于主体技术的建模仿真方法已在战争系统中得到了深入研究和广泛应用。本文重点介绍战争系统中基于主体的计算机生成兵力(Computer Generated Forces,CGF)、第三方虚拟决策实体,以及群体行为涌现等典型方面的研究应用情况。
计算机生成兵力
计算机生成兵力是指在分布式仿真战场环境中由计算机生成和控制的仿真实体。通过对人类作战行为的建模,这些实体能自主地对仿真战场环境中的事件和状态做出反应。CGF系统可以用来模拟敌方或友方的战斗实体,具有自主性、智能性等特征,并具备感知、通信以及协调的能力,在军事训练、武器研制和人员培训等领域有着广泛的应用。
由于CGF实体行为的最显著特征是模拟人的智能性,一个自然的想法是将人工智能领域相关的理论和研究成果应用到CGF建模领域。近年来,基于主体建模仿真理论和方法,为分布式作战仿真系统的CGF建模提供了一种有效的解决方案,已经成为军事仿真领域重要的研究方向。
基于主体的CGF建模方法是利用主体自然的描述能力,根据仿真应用对分辨率和逼真度等方面的需求,将作战想定中的各种指挥和作战实体(或者是它们的聚合体)映射为仿真系统中的主体,通过这些主体扮演相应的角色,模拟其物理特性和行为过程。并从组织的角度描述作战各方的兵力组织结构和组织关系,并且通过主体之间的交互模拟,综合战场环境中兵力实体的指挥控制、通信、侦查、机动、射击、协同等复杂的作战行为。基于主体的CGF建模框架如图1所示。
如图1所示,该框架包含三个阶段: 感知部分,用来感知和接受外界的战场信息; 认知处理部分,包括形势评估、决策制定、规划、学习等,这部分就是CGF行为建模,是其核心; 行为输出部分,输出行为并对战场环境加以影响。在认知处理部分,还需要与工作存储器(存放CGF对象获取的当前战场信息)、长期存储器(存放CGF对象已有的知识或任务等)进行交互。
第三方虚拟决策实体
所谓第三方虚拟决策实体,是指在多方战略对抗演习中,不需要人员扮演或人员简单参与,由计算机模拟的虚拟决策方。我们以多主体建模理论为指导,遵循“由顶向下”的设计思路,将人工智能技术与基于主体建模思想相结合,模拟单个战略决策者的个体、群体和组织决策行为,构建了反映第三方国家决策组织机构的虚拟决策实体。实际上它是一个MAS(多主体)系统,在系统内部,多个主体自动协商、自主协作,共同做出战略决策,实现对国家战略决策的模拟。
由图2可知,第三方虚拟决策实体分为四层,即决策资源层、主体服务层、职能主体层和群决策主体层。决策资源层为各主体决策提供多种可能手段,由数据库、模型库和知识库构成最底层的基本资源,它们由相应的管理主体进行管理和使用。主体服务器层既是职能主体层和系统资源层之间的中介,负责系统资源的分配工作; 同时又是职能主体层多个职能主体之间的协调人,处理多个主体之间的协作关系。职能主体层主要是由外交部和国防部多主体组织决策模型组成的。外交部和国防部多主体组织决策模型分为总部、职能部门和地区三级结构。在群决策主体层,国家最高决策委员会(其每一成员是一个主体)根据具体职能部门提供的初步方案,采用群体一致性算法,确定最终方案。
群体行为涌现
群体行为涌现就是通过研究战争系统中“活的”智能实体的属性、行为、复杂交互,来探讨战争系统底层实体间相互作用如何涌现出高层战争行为,观察战争系统整体演变进化过程,为战争系统存在的诸多复杂性问题的研究和解决提供新的思路和启迪。目前,我们基于演化和进化的思想,以复杂适应系统(Complex Adaptive System,CAS)理论为指导,采用自底向上的“活的”主体的建模方法,在多领域中对战争系统进行探索性实践。先后建立了作战演化、特定民意、经济演化、舆论传播、国际政治生态等模型。
作战演化模型
作战演化模型旨在对未来信息化战争条件下的作战思想、作战样式、武器装备发展论证等重大概念进行演示和实验。其包含5大类主体: 作战主体、指挥控制主体、感知主体、通信主体、环境主体。作战主体是一个通用实体类,只需设定不同的参数即可生成陆军作战主体、海军作战主体、空军作战主体和防空兵主体等实例。指挥控制主体是分层的,不同层次指挥控制主体关注的战场态势是不同的,高层指挥控制主体关注全局的战场军事态势,忽略局部细节; 而底层指挥控制主体关注局部战场态势。感知主体是对战场信息感知实体的属性与行为的抽象,如雷达实体,侦察卫星等。通信主体抽象战场中的通信网络,模拟各主体间通过通信系统进行信息和命令的传输。环境主体是对战场地理空间环境的抽象,具有对战场地形的分析与推理、战场态势的评估模型等功能。
特定民意模型
建立热点地区特定民意模型的目的旨在通过仿真,分析某些因素对特定民意的影响以及预测民意走势,总体思路为: 借鉴民意调查的某些思想,在建立该热点地区虚拟社会(环境主体)和公民(个体主体)子模型的基础上,通过环境对微观个体的不断刺激、个体自身演化以及个体间的相互作用,使系统涌现出宏观行为――特定民意(公民某种政治倾向性)走势。
经济演化模型
信息化战争与经济系统的相互作用越来越成为影响战争进程不可忽视的重要因素。无论是战争的发起、进行还是结束,经济的影响都不可忽视,甚至是决定性的。经济系统不但是战争的对象,而且也成为达成战争目的的重要手段。为此,我们针对热点地区的经济实际情况,结合战争危机对经济的影响,抽象并构建了该热点地区在战争危机条件下的经济演化模型。
经济演化模型设计了如下微观经济实体: 家庭主体、企业主体、股市主体、战略储备主体、电力企业主体、外贸市场主体、商业银行主体、央行主体、政府主体以及债券市场主体等。我们针对热点地区可能发生的危机情况进行了相关实验。通过仿真实验,得到了在特定危机情况下的热点地区经济动态演化情况,如资金外逃、股票指数大幅下跌、宏观经济景气指标逐步下滑、能源储备量急剧下降等等。
舆论传播模型
信息化战争条件下,夺取战争中的制舆论权,对于赢得战争主动权、争取民心、鼓舞士气,进而影响战争各方决策和行动具有重要战略意义。舆论战已由过去的战役战术层次上升到战略层面,这在伊拉克战争中已经表现得非常充分。因此,深入研究信息化战争背景下的舆论传播与控制的特点、规律,是战争系统人工社会研究所必须面临的问题。为此,我们针对某地区的特点,在复杂网络理论指导下,构建了舆论传播模型。
舆论模型主要包括媒体主体和个体主体。其中,媒体主体包括报刊、广播、电视和互联网这4种主要媒体。个体主体代表某地区的民众,该民众在各种媒体影响以及相互作用下,对某一危机事件的态度(如赞成、反对和中立)将随时间演化。
国际政治生态模型
国际政治生态模型是现实国际世界映射到虚拟仿真世界的人工生态系统,描述在危机形势下国家(或地区)行为的演化,在战略层面刻画宏观国际态势。国际政治生态模型强调个体的适应性和系统的演化性,其研究目的不是对危机发展做出精确的预测,而是研究危机事件的演化过程与规律,着重探索国家间的交互对于最终国际态势的影响。
主体建模的发展与挑战
主体建模方法体现了一种“活”的建模思想,它通过对目标系统成员的行为和属性进行描述和刻画,从而在虚拟空间中建立虚拟的个体主体模型,通过模拟个体间“活”的相互作用和影响,涌现出目标系统的宏观属性。而基于解析公式的传统方法是一种“死”的建模思路。更应该看到的是,主体建模思想改变了我们思考问题的角度,是人类认识世界方法论方面的一个进步,是现代系统科学和其他相关学科发展的产物。
目前,战争系统中基于主体建立的模型已经很多,但绝大多数都是停留在框架研究层次,即使用主体建模思想对目标系统进行了描述。实际上,主体建模的核心问题是怎样对“人”或对有“人”参与单元的行为以及它们之间交互进行描述和刻画。这些描述和刻画的深入准确程度直接影响着建立的多主体模型质量。而这种描述刻画能力既受制于建模水平,也受制于人工智能发展的水平。这一点上,我们在第三方虚拟决策实体、群体行为涌现系列模型的研制过程中深有体会,不是对领域问题认识不清楚,就是对认识清楚的问题难以抽象描述。这个问题将长期困扰主体建模在战争系统中的研究和应用,这正是体现了“人”的介入导致系统的复杂性。这也是战争系统基于主体建模方法当前和今后研究的重点。
RNN是Recurrent Neural Networks的缩写,即循环神经网络,它常用于解决序列问题。RNN有记忆功能,除了当前输入,还把上下文环境作为预测的依据。它常用于语音识别、翻译等场景之中。
RNN是序列模型的基础,尽管能够直接调用现成的RNN算法,但后续的复杂网络很多构建在RNN网络的基础之上,如Attention方法需要使用RNN的隐藏层数据。RNN的原理并不复杂,但由于其中包括循环,很难用语言或者画图来描述,最好的方法是自己手动编写一个RNN网络。本篇将介绍RNN网络的原理及具体实现。
在学习循环神经网络之前,先看看什么是序列。序列sequence简称seq,是有先后顺序的一组数据。自然语言处理是最为典型的序列问题,比如将一句话翻译成另一句话时,其中某个词汇的含义不仅取决于它本身,还与它前后的多个单词相关。类似的,如果想预测**的情节发展,不仅与当前的画面有关,还与当前的一系列前情有关。在使用序列模型预测的过程中,输入是序列,而输出是一个或多个预测值。
在使用深度学习模型解决序列问题时, 最容易混淆的是,序列与序列中的元素 。在不同的场景中,定义序列的方式不同,当分析单词的感情色彩时,一个单词是一个序列seq;当分析句子感情色彩时,一个句子是一个seq,其中的每个单词是序列中的元素;当分析文章感情色彩时,一篇文章是一个seq。简单地说,seq是最终使用模型时的输入数据,由一系列元素组成。
当分析句子的感情色彩时,以句为seq,而句中包含的各个单词的含义,以及单词间的关系是具体分析的对象,此时,单词是序列中的元素,每一个单词又可有多维特征。从单词中提取特征的方法将在后面的自然语言处理中介绍。
RNN有很多种形式,单个输入单个输入;多个输入多个输出,单个输入多个输出等等。
举个最简单的例子:用模型预测一个四字短语的感情色彩,它的输入为四个元素X={x1,x2,x3,x4},它的输出为单个值Y={y1}。字的排列顺序至关重要,比如“从好变坏”和“从坏变好”,表达的意思完全相反。之所以输入输出的个数不需要一一对应,是因为中间的隐藏层,变向存储中间信息。
如果把模型设想成黑盒,如下图所示:
如果模型使用全连接网络,在每次迭代时,模型将计算各个元素x1,x2中各个特征f1,f2代入网络,求它们对结果y的贡献度。
RNN网络则要复杂一些,在模型内部,它不是将序列中所有元素的特征一次性输入模型,而是每一次将序列中单个元素的特征输入模型,下图描述了RNN的数据处理过程,左图为分步展示,右图将所有时序步骤抽象成单一模块。
第一步:将第一个元素x1的特征f1,f2输入模型,模型根据输入计算出隐藏层h。
第二步:将第二个元素x2的特征输入模型,模型根据输入和上一步产生的h再计算隐藏层h,其它元素以此类推。
第三步:将最后一个元素xn的特征输入模型,模型根据输入和上一步产生的h计算隐藏层h和预测值y。
隐藏层h可视为将序列中前面元素的特征和位置通过编码向前传递,从而对输出y发生作用,隐藏层的大小决定了模型携带信息量的多少。隐藏层也可以作为模型的输入从外部传入,以及作为模型的输出返回给外部调用。
本例仍使用上篇中的航空乘客序列数据,分别用两种方法实现RNN:自己编写程序实现RNN模型,以及调用Pytorch提供的RNN模型。前一种方法主要用于剖析原理,后一种用于展示常用的调用方法。
首先导入头文件,读取乘客数据,做归一化处理,并将数据切分为测试集和训练集,与之前不同的是加入了create_dataset函数,用于生成序列数据,序列的输入部分,每个元素中包括两个特征:前一个月的乘客量prev和月份值mon,这里的月份值并不是关键特征,主要用于在例程中展示如何使用多个特征。
第一步:实现模型类,此例中的RNN模型除了全连接层,还生成了一个隐藏层,并在下一次前向传播时将隐藏层输出的数据与输入数据组合后再代入模型运算。
第二步,训练模型,使用全部数据训练500次,在每次训练时,内部for循环将序列中的每个元素代入模型,并将模型输出的隐藏层和下一个元素一起送入下一次迭代。
第三步:预测和作图,预测的过程与训练一样,把全部数据拆分成元素代入模型,并将每一次预测结果存储在数组中,并作图显示。
需要注意的是,在训练和预测过程中,每一次开始输入新序列之前,都重置了隐藏层,这是由于隐藏层的内容只与当前序列相关,序列之间并无连续性。
程序输出结果如下图所示:
经过500次迭代,使用RNN的效果明显优于上一篇中使用全连接网络的拟合效果,还可以通过调整超参数以及选择不同特征,进一步优化。
使用Pytorch提供的RNN模型,torchnnRNN类可直接使用,是循环网络最常用的解决方案。RNN,LSTM,GRU等循环网络都实现在同一源码文件torch/nn/modules/rnnpy中。
第一步:创建模型,模型包含两部分,第一部分是Pytorch提供的RNN层,第二部分是一个全连接层,用于将RNN的输出转换成输出目标的维度。
Pytorch的RNN前向传播允许将隐藏层数据h作为参数传入模型,并将模型产生的h和y作为函数返回值。形如: pred, h_state = model(x, h_state)
什么情况下需要接收隐藏层的状态h_state,并转入下一次迭代呢?当处理单个seq时,h在内部前向传递;当序列与序列之间也存在前后依赖关系时,可以接收h_state并传入下一步迭代。另外,当模型比较复杂如LSTM模型包含众多参数,传递会增加模型的复杂度,使训练过程变慢。本例未将隐藏层转到模型外部,这是由于模型内部实现了对整个序列的处理,而非处理单个元素,而每次代入的序列之间又没有连续性。
第二步:训练模型,与上例中把序列中的元素逐个代入模型不同,本例一次性把整个序列代入了模型,因此,只有一个for循环。
Pythorch支持批量处理,前向传递时输入数据格式是[seq_len, batch_size, input_dim),本例中输入数据的维度是[100, 1, 2],input_dim是每个元素的特征数,batch_size是训练的序列个数,seq_len是序列的长度,这里使用70%作为训练数据,seq_len为100。如果数据维度的顺序与要求不一致,一般使用transpose转换。
第三步:预测和作图,将全部数据作为序列代入模型,并用预测值作图。
程序输出结果如下图所示:
可以看到,经过500次迭代,在前100个元素的训练集上拟合得很好,但在测试集效果较差,可能存在过拟合。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)