发明名称 基于GPU加速的网络社区检测方法
摘要 本发明公开了一种基于GPU加速的网络社区检测方法,主要解决传统NMF网络社区检测方法的运行时间过长,占用空间过多的问题。其实现过程为:(1)构造网络的邻接矩阵;(2)检查网络类型是否满足要求并对邻接矩阵进行预处理;(3)对预处理之后的邻接矩阵进行稀疏表示;(4)对GPU设备进行初始化;(5)将稀疏表示的邻接矩阵传入到GPU设备中;(6)在GPU中进行网络社区检测;(7)将得到的检测结果从GPU设备传到内存中进行归一化处理,得到网络的重叠划分;(8)由重叠划分得到网络的硬化分。本发明利用GPU对NMF社区检测方法进行并行加速,大幅降低了社区检测的运行时间及存储空间,并可处理更大规模的网络数据。
申请公布号 CN103853835A 申请公布日期 2014.06.11
申请号 CN201410093389.9 申请日期 2014.03.14
申请人 西安电子科技大学 发明人 公茂果;马文萍;黄宝林;马晶晶;陈晓伟;马里佳;侯彪
分类号 G06F17/30(2006.01)I 主分类号 G06F17/30(2006.01)I
代理机构 陕西电子工业专利中心 61205 代理人 王品华;朱红星
主权项 1.一种基于GPU加速的网络社区检测方法,包括如下步骤:(1)构造大小为n×n的网络邻接矩阵A,n为网络中节点的数目;(2)检查网络是否满足无方向无权重的条件特征,若满足该条件,则去除网络中的孤立节点,即网络中与其他任何节点都没有联系的节点,否则该网络无法处理,退出程序;(3)对邻接矩阵A采用行格式存储法CSR进行稀疏表示,得到列坐标向量Aj和行首位置向量Ap,同时采用列格式存储法CSC进行稀疏表示,得到行坐标向量Bj和列首位置向量Bp;(4)利用OpenCL编程框架对GPU设备进行初始化:选择OpenCL平台,得到OpenCL设备,创建命令队列,创建内存对象,创建OpenCL程序对象,创建核函数对象;(5)利用0-1之间的随机数分别构造大小为n×k的左分解矩阵W、大小为k×n的右分解矩阵H、大小为1×k的中间向量β,其中k为预设的社区数目,将所述W、H、β、Ap、Aj、Bp和Bj传输到GPU全局内存中;(6)在GPU中进行网络社区结构检测:6a)根据上面得到的W、H矩阵以及β向量,计算第一临时变量:T1=W/(1<sub>n×n</sub>H<sup>T</sup>+Wdiag(β)),其中1<sub>n×n</sub>代表大小为n×n的单位矩阵,H<sup>T</sup>代表H矩阵的转置,diag(β)代表β向量的对角矩阵,/代表矩阵间的点除操作;6b)根据步骤(2)得到的A<sub>p</sub>和A<sub>j</sub>,计算第二临时变量:T2=A/(WH),其中A为网络的邻接矩阵;6c)根据第二临时变量T2,计算第三临时变量:T3=T2*H<sup>T</sup>;6d)根据第一临时变量T1和第三临时变量T3对左分解矩阵W进行更新,即<maths num="0001"><![CDATA[<math><mrow><mi>W</mi><mo>&LeftArrow;</mo><mi>T</mi><mn>1</mn><mo>&CenterDot;</mo><mi>T</mi><mn>3</mn><mo>=</mo><mfrac><mi>W</mi><mrow><msub><mn>1</mn><mrow><mi>n</mi><mo>&times;</mo><mi>n</mi></mrow></msub><msup><mi>H</mi><mi>T</mi></msup><mo>+</mo><mi>Wdiag</mi><mrow><mo>(</mo><mi>&beta;</mi><mo>)</mo></mrow></mrow></mfrac><mo>&CenterDot;</mo><mo>[</mo><mrow><mo>(</mo><mfrac><mi>A</mi><mi>WH</mi></mfrac><mo>)</mo></mrow><msup><mi>H</mi><mi>T</mi></msup><mo>]</mo><mo>,</mo></mrow></math>]]></maths>其中·代表两个矩阵的点乘操作,←表示用计算结果替换掉原W矩阵;6e)计算第四临时变量:T4=(H·H)1<sub>n×1</sub>,其中1<sub>n×1</sub>代表大小为n×1的单位向量;6f)根据步骤6d)得到的左邻接矩阵W,计算第五临时变量:T5=1<sub>1×n</sub>(W·W),其中1<sub>1×n</sub>代表大小为1×n的单位向量;6g)根据第四临时变量T4及第五临时变量T5对中间向量β进行更新:β=(2n+a)/(T4+T5+b)其中,分子参数a固定为8,分母参数b固定为2;6h)根据左分解矩阵W、右分解矩阵H、中间向量β,计算第六临时变量:T6=H/(W<sup>T</sup>1<sub>n×n</sub>+diag(β)H),W<sup>T</sup>代表W矩阵的转置;6i)根据步骤(2)得到的B<sub>p</sub>、B<sub>j</sub>,计算第七临时变量:T7=A/(WH);6j)根据第七临时变量T7计算第八临时变量:T8=W<sup>T</sup>*T7;6k)根据第六临时变量T6和第八临时变量T8,对右分解矩阵H进行更新,即:<maths num="0002"><![CDATA[<math><mrow><mi>H</mi><mo>&LeftArrow;</mo><mi>T</mi><mn>6</mn><mo>&CenterDot;</mo><mi>T</mi><mn>8</mn><mo>=</mo><mfrac><mi>W</mi><mrow><msub><mrow><msup><mi>W</mi><mi>T</mi></msup><mn>1</mn></mrow><mrow><mi>n</mi><mo>&times;</mo><mi>n</mi></mrow></msub><mo>+</mo><mi>diag</mi><mrow><mo>(</mo><mi>&beta;</mi><mo>)</mo></mrow><mi>H</mi></mrow></mfrac><mo>&CenterDot;</mo><mo>[</mo><msup><mi>W</mi><mi>T</mi></msup><mrow><mo>(</mo><mfrac><mi>A</mi><mi>WH</mi></mfrac><mo>)</mo></mrow><mo>]</mo><mo>,</mo></mrow></math>]]></maths>6l)重复执行步骤6a)到6k)共100次,得到最终的左分解矩阵W';(7)将最终的左分解矩阵W’通过GPU传到计算机内存中,对该最终的左分解矩阵W'中元素按行进行归一化,得到网络的重叠划分矩阵M:<maths num="0003"><![CDATA[<math><mrow><mi>M</mi><mo>=</mo><mfenced open='[' close=']'><mtable><mtr><mtd><msub><mi>m</mi><mn>11</mn></msub></mtd><mtd><msub><mi>m</mi><mn>12</mn></msub></mtd><mtd><mo>.</mo><mo>.</mo><mo>.</mo></mtd><mtd><msub><mi>m</mi><mrow><mn>1</mn><mi>k</mi></mrow></msub></mtd></mtr><mtr><mtd><msub><mi>m</mi><mn>21</mn></msub></mtd><mtd><msub><mi>m</mi><mn>22</mn></msub></mtd><mtd><mo>.</mo><mo>.</mo><mo>.</mo></mtd><mtd><msub><mi>m</mi><mn>21</mn></msub></mtd></mtr><mtr><mtd><mo>.</mo></mtd><mtd><mo>.</mo></mtd><mtd></mtd><mtd><mo>.</mo></mtd></mtr><mtr><mtd><mo>.</mo></mtd><mtd><mo>.</mo></mtd><mtd><msub><mi>m</mi><mi>ij</mi></msub></mtd><mtd><mo>.</mo></mtd></mtr><mtr><mtd><mo>.</mo></mtd><mtd><mo>.</mo></mtd><mtd></mtd><mtd><mo>.</mo></mtd></mtr><mtr><mtd><msub><mi>m</mi><mrow><mi>n</mi><mn>1</mn></mrow></msub></mtd><mtd><msub><mi>m</mi><mrow><mi>n</mi><mn>2</mn></mrow></msub></mtd><mtd><mo>.</mo><mo>.</mo><mo>.</mo></mtd><mtd><msub><mi>m</mi><mi>nk</mi></msub></mtd></mtr></mtable></mfenced></mrow></math>]]></maths><maths num="0004"><![CDATA[<math><mrow><msub><mi>m</mi><mi>ij</mi></msub><mo>=</mo><mfrac><msub><msup><mi>w</mi><mo>&prime;</mo></msup><mi>ij</mi></msub><mrow><msubsup><mi>&Sigma;</mi><mrow><mi>j</mi><mo>=</mo><mn>1</mn></mrow><mi>k</mi></msubsup><msub><msup><mi>w</mi><mo>&prime;</mo></msup><mi>ij</mi></msub></mrow></mfrac></mrow></math>]]></maths>其中,w'<sub>ij</sub>表示最终的左分解矩阵W'第i行第j列的元素,m<sub>ij</sub>代表重叠划分矩阵M的第i行第j列的元素;(8)根据重叠划分矩阵M得到网络的重叠划分:对于网络中的第i个节点,若M中第i行的任一元素m<sub>ij</sub>不等于0,则将该节点划分到第j个社区中且隶属概率为m<sub>ij</sub>,否则,该节点不属于第j个社区;(9)根据网络的重叠划分,将节点划分到隶属概率最大的社区,得到网络的硬化分结果。
地址 710071 陕西省西安市太白南路2号