Pytorch

在 Pytorch 语义下,目前理解其中的关键就在于待训练参数计算逻辑两点,并且这两点共同构成了各种封装好的模块

troch.nn.Linear 为例,可以通过 nn.Parameter 手动创建参数,然后自行创建计算逻辑。但是由于线性计算的需求较为普遍,因此 Pytorch 也直接提供了封装好的线性层模块,按理说这种封装的本质就是在内部实现上用 nn.Parameter 定义权重(weight)和偏置(bias,可选),同时封装“输入特征与权重矩阵相乘 + 加偏置” 的计算逻辑(有待确定)。

nn.Linear 时给定的数值和 nn.Parameter 构造参数时给定的数值是对应的,这也可以看出 nn.Linear 实际隐藏了构造参数这个过程

$y = x \ A^T + b$: x:(N, in_features), y: (N, out_features), 所以给定 in_features 和 out_features 自然就可以确定权重矩阵的 shape 为 (in_features, out_features)

1
2
3
4
5
6
# 参数 + 计算逻辑
self.proj_param = nn.Parameter(torch.Tensor(num_of_heads, num_in_features, num_out_features))
nodes_features_proj = torch.matmul(in_nodes_features.unsqueeze(0), self.proj_param)

# 封装模块
self.linear_proj = nn.Linear(num_in_features, num_of_heads * num_out_features, bias=False)
0%