为完成项目相关要求,从本章开始将尝试设计一个混合机制的GCN加速器,如果我某方面理解有问题,还望各位大佬指正
GCN网络的机制在这里不细谈了,可以看看b站同济子豪兄相关的论文精读视频,这里简单说明一下混合机制的GCN。
首先说一下什么是混合机制。对于GCN网络而言,可以分为两个主要的硬件步骤聚合(Aggregation)和组合(Combination)。聚合阶段就是将一个节点相邻的节点特征乘以某个特定的权重相加的过程,组合阶段是一个多层感知机结构,可以使用标准的神经网络阵列进行加速。下面截取一段GCN网络的公式。
图卷积网络(GCN)的基本公式
在GCN中,节点的特征表示可以通过以下公式计算得到:
H ( l + 1 ) = σ ( D − 1 2 A D − 1 2 H ( l ) W ( l ) ) H^{(l+1)} = \sigma(D^{-\frac{1}{2}} A D^{-\frac{1}{2}} H^{(l)} W^{(l)}) H(l+1)=σ(D−21AD−21H(l)W(l))
其中:
- H ( l ) H^{(l)} H(l) 是第 l l l 层的节点特征表示矩阵。
- A A A 是图的邻接矩阵,通常是归一化的。
- D D D 是节点的度矩阵,其对角线上的元素 D i i D_{ii} Dii 是节点 i i i 的度(包括自环)。
- W ( l ) W^{(l)} W(l) 是第 l l l 层的权重矩阵。
- σ \sigma σ 是激活函数,通常是ReLU函数。
- H ( l + 1 ) H^{(l+1)} H(l+1) 是下一层的节点特征表示矩阵。
可以看出,聚合阶段就是将某个节点所有连接节点的特征乘以起始节点与目的节点各自的节点度的-1/2次方再加和。
Σ
(
1
/
(
i
n
d
e
g
r
e
e
⋅
o
u
t
d
e
g
r
e
e
)
⋅
f
e
a
t
u
r
e
)
\Sigma(1/\sqrt(indegree·outdegree)· feature)
Σ(1/(indegree⋅outdegree)⋅feature)
组合阶段直接对照多层感知机即可
整个过程我将先从小模块搭起,使用chisel语言完成相应模块的设计。同时,由于图数据非常离散,导致cache命中率极低,大大降低了所设计的加速器的运行速度。本人同时设计了一套节点重排的软件方法,将关联度较高的节点相邻排布,同时使所设计的加速器支持数据预取。未来设计的加速器将基于这一点进行设计。由于专利尚在审核,此处就暂不将算法具体内容放出。望各位海涵。
注:由于尚在摸索期,此项目文件可能会多次修改,不断测试。代码可能也较为丑陋,望周知。