nuget server logo nuget api documents
↑

API Docs / SMRUCC.genomics.Analysis.HTS.P-NET / SparseConnectivity

SparseConnectivity

Full name SMRUCC.genomics.Analysis.HTS.P_NET.SparseConnectivity Assembly SMRUCC.genomics.Analysis.HTS.P-NET Members 13

稀疏连接内核:由生物层级父子关系编译出来的边表

00 Remarks

P-NET 的每一个网络层都由一个二值掩码矩阵 M 约束其连接拓扑, 前向传播为 y = f[(M * W)⃗x + b]。由于掩码在整个训练过程中保持不变, 因此可以在网络构建阶段就将 M 编译为一个按父节点分组的边表, 在运行期用 O(N nnz) 的 scatter/gather 内核代替 O(N fanIn * fanOut) 的稠密矩阵乘法。 这正是论文 Extended Data Fig. 1c 所描述的 "patterned sparse matrix" 优化。

边表的存储布局为:

  • ChildIdx 按照父节点分组连续存放,父节点 j 的所有子节点索引位于区间 [ParentStart(j), ParentStop(j)) 之内;
  • Weights 矩阵中的数据布局为行优先,即 W(i, j) = Data(i * FanOut + j), 与 Tensor 的内存布局保持一致,方便直接对 Tensor.Data 做下标运算。

01 Syntax

SMRUCC.genomics.Analysis.HTS.P_NET.SparseConnectivity

02 Methods

NameOverloadsSummary
.ctor 2 由父子成员关系编译得到稀疏连接边表
Start 1 获取指定父节点的子节点索引在 SparseConnectivity.ChildIdx 中的起始位置
Stop 1 获取指定父节点的子节点索引在 SparseConnectivity.ChildIdx 中的结束位置(不含)
GetFanIn 1 获取指定父节点的入度(子节点数量,即 fan-in)
BuildMask 1 构建二值掩码矩阵 M,形状为 [FanIn, FanOut]
HasEdge 1 声明一个连接是否存在
ToString 1 生成稀疏连接的字符串描述

03 Properties

NameOverloadsSummary
FanIn 1 输入维度(子节点数量,即掩码矩阵的行数)
FanOut 1 输出维度(父节点数量,即掩码矩阵的列数)
EdgeCount 1 掩码矩阵中非零元素的数量,即真实存在的生物学父子关系数量
ChildIdx 1 按父节点分组的子节点索引表,长度为 SparseConnectivity.EdgeCount
ParentStart 1 每一个父节点在 SparseConnectivity.ChildIdx 中的起始偏移,长度为 SparseConnectivity.FanOut + 1

04 Members

method .ctor overload 2 #
#ctor(Int32, Int32)

创建一个空的稀疏连接对象(对应于全零掩码)

Parameters
NameTypeDescription
fanInInt32

输入维度

fanOutInt32

输出维度

method .ctor #
#ctor(Int32, Int32, Int32()())

由父子成员关系编译得到稀疏连接边表

Parameters
NameTypeDescription
fanInInt32

输入维度(下一层的节点数量)

fanOutInt32

输出维度(当前层的节点数量)

membersInt32()()

每一个父节点所包含的子节点索引,长度必须等于 fanOut

method Start #
Start(Int32)

获取指定父节点的子节点索引在 SparseConnectivity.ChildIdx 中的起始位置

Parameters
NameTypeDescription
parentIndexInt32

父节点索引

Returns

起始偏移

method Stop #
Stop(Int32)

获取指定父节点的子节点索引在 SparseConnectivity.ChildIdx 中的结束位置(不含)

Parameters
NameTypeDescription
parentIndexInt32

父节点索引

Returns

结束偏移

method GetFanIn #
GetFanIn(Int32)

获取指定父节点的入度(子节点数量,即 fan-in)

Parameters
NameTypeDescription
parentIndexInt32

父节点索引

Returns

入度

method BuildMask #
BuildMask

构建二值掩码矩阵 M,形状为 [FanIn, FanOut]

Remarks

掩码矩阵仅在需要检视或者落盘的时候才会被创建,运行期的计算完全走 SparseConnectivity.ChildIdx 边表,不会使用这个矩阵。

Returns

元素取值为 0 或者 1 的 Tensor 掩码矩阵

method HasEdge #
HasEdge(Int32, Int32)

声明一个连接是否存在

Parameters
NameTypeDescription
childInt32

子节点索引

parentInt32

父节点索引

Returns

存在则返回 True,否则返回 False

method ToString #
ToString

生成稀疏连接的字符串描述

Returns

形如 Sparse[180 -> 60, nnz=180, density=1.67%] 的描述文本

property FanIn #
FanIn

输入维度(子节点数量,即掩码矩阵的行数)

Returns

子节点数量

property FanOut #
FanOut

输出维度(父节点数量,即掩码矩阵的列数)

Returns

父节点数量

property EdgeCount #
EdgeCount

掩码矩阵中非零元素的数量,即真实存在的生物学父子关系数量

Returns

连接边数量

property ChildIdx #
ChildIdx

按父节点分组的子节点索引表,长度为 SparseConnectivity.EdgeCount

Returns

子节点索引数组

property ParentStart #
ParentStart

每一个父节点在 SparseConnectivity.ChildIdx 中的起始偏移,长度为 SparseConnectivity.FanOut + 1

Returns

偏移数组,ParentStart(FanOut) 即为 SparseConnectivity.EdgeCount