nuget server logo nuget api documents
↑

API Docs / SMRUCC.genomics.Analysis.GEARS / GEARSConvLayer

GEARSConvLayer

Full name SMRUCC.genomics.Analysis.GEARS.Layers.GEARSConvLayer Assembly SMRUCC.genomics.Analysis.GEARS Members 26

GEARS 边类型感知的图卷积层

00 Remarks

实现 readme 第五节的「带边类型感知的消息传递」:

 h_i^(l+1) = σ( W_self · h_i^(l) + Σ_{j ∈ N_in(i)} α_ji · sign(r_ji) · (W_{r_ji} · h_j^(l)) )
 

要点:

  • 调控图中 TF → Target 是有向边,扰动信号沿调控方向向下游传播,

因此聚合的是入边邻居(即调控该基因的上游基因);

使模型能够表达「上游下调导致下游上调」这样的反向效应;

  • 默认使用稀疏入边聚合(复杂度 O(|E|·d)),因为先验调控网络非常稀疏

(350+ 基因仅约 350 条边),稠密邻接矩阵乘法会带来两个数量级的无用开销;

  • 堆叠 L 层即可捕捉 L-hop 的间接调控效应;readme 建议 2~4 层以避免过平滑。

之所以不使用 GNN 模块自带的 GATLayer,是因为它的 Backward 直接抛出 InvalidOperationException,无法参与训练。

01 Syntax

SMRUCC.genomics.Analysis.GEARS.Layers.GEARSConvLayer

02 Methods

NameOverloadsSummary
.ctor 1 创建 GEARS 图卷积层
Forward 2 前向传播:沿调控图的入边做边类型感知的稀疏(或稠密)聚合
BuildTransformed 1 按边关系类型对输入做线性变换;共享模式下所有类型复用同一个结果
ForwardDense 1 稠密模式下的前向传播(使用归一化邻接矩阵,含自环)
Backward 2 反向传播:累积本层权重梯度并返回输入梯度
BackwardDense 1 稠密模式下的反向传播
EnsureBuffers 1 获取(并在必要时重新分配与清零)按边类型分组的反向传播缓冲区
GetParameters 1 获取本层可训练参数
GetGradients 1 获取本层参数梯度(顺序与 GEARSConvLayer.GetParameters() 严格一致)

03 Properties

NameOverloadsSummary
InFeatures 1 输入特征维度
OutFeatures 1 输出特征维度
Activation 1 激活函数类型
UsePerRelationTransform 1 是否为每种边关系类型分配独立的变换矩阵
UseDense 1 是否使用稠密邻接矩阵聚合(仅用于小图对照,默认关闭)

04 Fields

NameOverloadsSummary
wSelf 1 自身信息变换权重 [inFeatures, outFeatures]
bias 1 偏置 [1, outFeatures]
relW 1 每种边关系类型专属的邻居变换权重
wSelfGrad 1 自身变换权重梯度
biasGrad 1 偏置梯度
relWGrad 1 每种边关系类型的邻居变换权重梯度
lastInput 1 上一次前向传播的输入特征
preActivation 1 上一次前向传播的激活前输出(用于计算激活函数导数)
denseAdj 1 稠密模式下的归一化邻接矩阵缓存
dTransBuffers 1 反向传播用的按边类型分组的梯度缓冲区

05 Members

method .ctor #
#ctor(Int32, Int32, ActivationType, Boolean, Boolean, Nullable(Of Int32), String)

创建 GEARS 图卷积层

Parameters
NameTypeDescription
inFeaturesInt32

输入特征维度

outFeaturesInt32

输出特征维度

activationActivationType

激活函数类型,默认 ActivationType.Tanh

usePerRelationTransformBoolean

为 True 时为每种边关系类型分配独立的变换矩阵(严格对应 readme §5.4); 为 False 时所有类型共享同一个变换矩阵,仅用符号区分激活/抑制,计算量更小

useDenseBoolean

为 True 时使用稠密归一化邻接矩阵聚合

seedNullable(Of Int32)

权重初始化随机种子;给定后初始化结果可复现

nameString

层名称

method Forward #
Forward(Tensor, GeneRegulatoryGraph)

前向传播:沿调控图的入边做边类型感知的稀疏(或稠密)聚合

Parameters
NameTypeDescription
inputTensor

节点特征 [numGenes, inFeatures]

graphDataGeneRegulatoryGraph

基因调控图(提供稀疏入边缓存)

Returns

更新后的节点特征 [numGenes, outFeatures]

method Forward overload 2 #
Forward(Tensor)

不支持的调用方式:本层需要图结构参数

Parameters
NameTypeDescription
inputTensor

节点特征

Returns

永不返回

method BuildTransformed #
BuildTransformed(Tensor, GeneRegulatoryGraph)

按边关系类型对输入做线性变换;共享模式下所有类型复用同一个结果

Parameters
NameTypeDescription
inputTensor

节点特征 [numGenes, inFeatures]

graphDataGeneRegulatoryGraph

基因调控图,用于判断哪些关系类型实际存在

Returns

长度为关系类型数量的变换结果数组

method ForwardDense #
ForwardDense(Tensor, GeneRegulatoryGraph)

稠密模式下的前向传播(使用归一化邻接矩阵,含自环)

Parameters
NameTypeDescription
inputTensor

节点特征 [numGenes, inFeatures]

graphDataGeneRegulatoryGraph

基因调控图

Returns

更新后的节点特征 [numGenes, outFeatures]

method Backward #
Backward(Tensor, GeneRegulatoryGraph)

反向传播:累积本层权重梯度并返回输入梯度

Parameters
NameTypeDescription
gradientTensor

上游梯度 [numGenes, outFeatures]

graphDataGeneRegulatoryGraph

基因调控图(提供稀疏入边缓存)

Returns

输入梯度 [numGenes, inFeatures]

method Backward overload 2 #
Backward(Tensor)

不支持的调用方式:本层需要图结构参数

Parameters
NameTypeDescription
gradientTensor

上游梯度

Returns

永不返回

method BackwardDense #
BackwardDense(Tensor, GeneRegulatoryGraph)

稠密模式下的反向传播

Parameters
NameTypeDescription
gActTensor

经过激活函数导数修正的梯度 [numGenes, outFeatures]

graphDataGeneRegulatoryGraph

基因调控图

Returns

输入梯度 [numGenes, inFeatures]

method EnsureBuffers #
EnsureBuffers(GeneRegulatoryGraph, Int32, Int32)

获取(并在必要时重新分配与清零)按边类型分组的反向传播缓冲区

Parameters
NameTypeDescription
graphDataGeneRegulatoryGraph

基因调控图,用于判断哪些关系类型实际存在

rowsInt32

行数(基因数量)

colsInt32

列数(输出维度)

Returns

缓冲区数组;图上不存在的关系类型对应位置为 Nothing

method GetParameters #
GetParameters

获取本层可训练参数

Returns

参数张量列表

method GetGradients #
GetGradients

获取本层参数梯度(顺序与 GEARSConvLayer.GetParameters() 严格一致)

Returns

梯度张量列表

property InFeatures #
InFeatures

输入特征维度

Returns

输入维度大小

property OutFeatures #
OutFeatures

输出特征维度

Returns

输出维度大小

property Activation #
Activation

激活函数类型

Returns

ActivationType 枚举值

property UsePerRelationTransform #
UsePerRelationTransform

是否为每种边关系类型分配独立的变换矩阵

Returns

独立变换则返回 True;所有类型共享同一个变换矩阵则返回 False

property UseDense #
UseDense

是否使用稠密邻接矩阵聚合(仅用于小图对照,默认关闭)

Returns

稠密模式则返回 True

field wSelf #
wSelf

自身信息变换权重 [inFeatures, outFeatures]

field bias #
bias

偏置 [1, outFeatures]

field relW #
relW

每种边关系类型专属的邻居变换权重

field wSelfGrad #
wSelfGrad

自身变换权重梯度

field biasGrad #
biasGrad

偏置梯度

field relWGrad #
relWGrad

每种边关系类型的邻居变换权重梯度

field lastInput #
lastInput

上一次前向传播的输入特征

field preActivation #
preActivation

上一次前向传播的激活前输出(用于计算激活函数导数)

field denseAdj #
denseAdj

稠密模式下的归一化邻接矩阵缓存

field dTransBuffers #
dTransBuffers

反向传播用的按边类型分组的梯度缓冲区