speechbrain.nnet.quaternion_networks.q_ops 模块

这个库实现了四元数值架构所需的各种操作。这项工作的灵感来自:\n“Quaternion neural networks” - Parcollet T.\n“Quaternion recurrent neural networks” - Parcollet T. et al.\n“Quaternion convolutional neural networks for end-to-end automatic speech recognition” - Parcollet T. et al.\n“Deep quaternion networks” - Gaudet Chase J. et al.

作者
  • Titouan Parcollet 2020

摘要

QuaternionLinearCustomBackward

此类重新定义了四元数线性层(非旋量层)的反向传播。

函数

affect_conv_init

将给定的权重初始化函数应用于参数。

affect_init

将给定的权重初始化函数应用于参数。

check_quaternion_input

检查线性层的四元数值形状。

quaternion_conv_op

将四元数卷积变换应用于输入数据:重要的是要注意,QCNN 的前向阶段定义为 W * Inputs(其中 * 等于汉密尔顿乘积)。

quaternion_conv_rotation_op

将四元数旋转变换应用于输入数据:旋转 W*x*W^t 可以通过 R*x 替换,遵循:https://en.wikipedia.org/wiki/Quaternions_and_spatial_rotation 对酉权重和非酉权重都有效(它们将被归一化)。

quaternion_init

返回使用“Quaternion Recurrent Neural Network” - Parcollet T. 中描述的方法初始化的四元数矩阵。

quaternion_linear_op

将四元数线性变换应用于输入数据:重要的是要注意,QNN 的前向阶段定义为 W * Inputs(其中 * 等于汉密尔顿乘积)。

quaternion_linear_rotation_op

将四元数旋转变换应用于输入数据:旋转 W*x*W^t 可以通过 R*x 替换,遵循:https://en.wikipedia.org/wiki/Quaternions_and_spatial_rotation 对酉权重和非酉权重都有效(它们将被归一化)。

renorm_quaternion_weights_inplace

重新规范化四元数值权重的幅值。

unitary_init

返回酉四元数矩阵。

参考

class speechbrain.nnet.quaternion_networks.q_ops.QuaternionLinearCustomBackward(*args, **kwargs)[source]

基类:Function

此类重新定义了四元数线性层(非旋量层)的反向传播。通过这样做,我们可以节省高达 4 倍的内存,但速度也比 ‘quaternion_linear_op’ 慢 2 倍。它应该在 speechbrain.nnet.quaternion_networks.linear.QuaternionLinear 中使用。

static forward(ctx, input, r_weight, i_weight, j_weight, k_weight, bias)[source]

将四元数线性变换应用于输入数据:重要的是要注意,QNN 的前向阶段定义为 W * Inputs(其中 * 等于汉密尔顿乘积)。构建的 cat_kernels_4_quaternion 是四元数表示的修改版本,因此当我们执行 torch.mm(Input,W) 时,它等效于 W * Inputs。

参数:
  • ctx (PyTorch 上下文对象) – 用于保存执行反向传播所需的上下文。

  • input (torch.Tensor) – 要转换的四元数输入张量。形状:[batch*time, X]。

  • r_weight (torch.Parameter) – 本层四元数权重矩阵的实部。

  • i_weight (torch.Parameter) – 本层四元数权重矩阵的第一个虚部。

  • j_weight (torch.Parameter) – 本层四元数权重矩阵的第二个虚部。

  • k_weight (torch.Parameter) – 本层四元数权重矩阵的第三个虚部。

  • bias (torch.Parameter)

返回类型:

线性变换后的四元数

static backward(ctx, grad_output)[source]

运行上面定义的前向调用的反向阶段。此实现遵循“Quaternion neural networks” - Parcollet T. 第 48 页中可找到的四元数层的四元数反向传播。

参数:
  • ctx (PyTorch 上下文对象) – 包含保存的权重和偏置

  • grad_output (torch.Tensor) – 前向部分的输出

返回类型:

此操作对应的梯度

speechbrain.nnet.quaternion_networks.q_ops.quaternion_linear_op(input, r_weight, i_weight, j_weight, k_weight, bias)[source]

将四元数线性变换应用于输入数据:重要的是要注意,QNN 的前向阶段定义为 W * Inputs(其中 * 等于汉密尔顿乘积)。构建的 cat_kernels_4_quaternion 是四元数表示的修改版本,因此当我们执行 torch.mm(Input,W) 时,它等效于 W * Inputs。

参数:
  • input (torch.Tensor) – 要转换的四元数输入张量。

  • r_weight (torch.Parameter) – 本层四元数权重矩阵的实部。

  • i_weight (torch.Parameter) – 本层四元数权重矩阵的第一个虚部。

  • j_weight (torch.Parameter) – 本层四元数权重矩阵的第二个虚部。

  • k_weight (torch.Parameter) – 本层四元数权重矩阵的第三个虚部。

  • bias (torch.Parameter)

返回类型:

线性变换后的四元数

speechbrain.nnet.quaternion_networks.q_ops.quaternion_linear_rotation_op(input, r_weight, i_weight, j_weight, k_weight, bias, scale, zero_kernel)[source]

将四元数旋转变换应用于输入数据:旋转 W*x*W^t 可以通过 R*x 替换,遵循:https://en.wikipedia.org/wiki/Quaternions_and_spatial_rotation 对酉权重和非酉权重都有效(它们将被归一化)。输入的初始大小必须是 4 的倍数,且实部为零。旋转仅影响四元数的向量部分。

参数:
  • input (torch.Tensor) – 要转换的四元数输入张量。

  • r_weight (torch.Parameter) – 本层四元数权重矩阵的实部。

  • i_weight (torch.Parameter) – 本层四元数权重矩阵的第一个虚部。

  • j_weight (torch.Parameter) – 本层四元数权重矩阵的第二个虚部。

  • k_weight (torch.Parameter) – 本层四元数权重矩阵的第三个虚部。

  • bias (torch.Parameter)

  • scale (torch.Parameter) – 在旋量神经网络的上下文中,对输入向量 x 执行多次旋转并求和。因此,输出向量的范数始终随着层数的增加而增加,这使得深度配置的神经网络不稳定。scale 参数是可学习的参数,通过将输出向量乘以一个小的可训练参数来充当门控。

  • zero_kernel (torch.Parameter) – 零核只是一个要求梯度为 False 的零张量。其形状等效于四元数分量形状。实际上,它只在使用旋转矩阵时需要匹配维度:https://en.wikipedia.org/wiki/Quaternions_and_spatial_rotation

返回类型:

线性旋转后的四元数

speechbrain.nnet.quaternion_networks.q_ops.quaternion_conv_rotation_op(input, r_weight, i_weight, j_weight, k_weight, bias, scale, zero_kernel, stride: int, padding: int, groups: int, dilation: int, conv1d: bool)[source]

将四元数旋转变换应用于输入数据:旋转 W*x*W^t 可以通过 R*x 替换,遵循:https://en.wikipedia.org/wiki/Quaternions_and_spatial_rotation 对酉权重和非酉权重都有效(它们将被归一化)。输入的初始大小必须是 4 的倍数,且实部为零。旋转仅影响四元数的向量部分。

参数:
  • input (torch.Tensor) – 要转换的四元数输入张量。

  • r_weight (torch.Parameter) – 本层四元数权重矩阵的实部。

  • i_weight (torch.Parameter) – 本层四元数权重矩阵的第一个虚部。

  • j_weight (torch.Parameter) – 本层四元数权重矩阵的第二个虚部。

  • k_weight (torch.Parameter) – 本层四元数权重矩阵的第三个虚部。

  • bias (torch.Parameter)

  • scale (torch.Parameter) – 在旋量神经网络的上下文中,对输入向量 x 执行多次旋转并求和。因此,输出向量的范数始终随着层数的增加而增加,这使得深度配置的神经网络不稳定。scale 参数是可学习的参数,通过将输出向量乘以一个小的可训练参数来充当门控。

  • zero_kernel (torch.Parameter) – 零核只是一个要求梯度为 False 的零张量。其形状等效于四元数分量形状。实际上,它只在使用旋转矩阵时需要匹配维度:https://en.wikipedia.org/wiki/Quaternions_and_spatial_rotation

  • stride (int) – 卷积滤波器的步长因子。

  • padding (int) – 填充量。更多信息请参阅 torch.nn 文档。

  • groups (int) – 此选项指定卷积组。更多信息请参阅 torch.nn 文档。

  • dilation (int) – 卷积滤波器的膨胀因子。

  • conv1d (bool) – 如果为 True,将应用一维卷积操作。否则,调用二维卷积。

返回类型:

旋转后的四元数输入

speechbrain.nnet.quaternion_networks.q_ops.quaternion_conv_op(input, r_weight, i_weight, j_weight, k_weight, bias, stride: int, padding: int, groups: int, dilation: int, conv1d: bool)[source]

将四元数卷积变换应用于输入数据:重要的是要注意,QCNN 的前向阶段定义为 W * Inputs(其中 * 等于汉密尔顿乘积)。构建的 cat_kernels_4_quaternion 是四元数表示的修改版本,因此当我们执行 torch.mm(Input,W) 时,它等效于 W * Inputs。

参数:
  • input (torch.Tensor) – 要转换的四元数输入张量。

  • r_weight (torch.Parameter) – 本层四元数权重矩阵的实部。

  • i_weight (torch.Parameter) – 本层四元数权重矩阵的第一个虚部。

  • j_weight (torch.Parameter) – 本层四元数权重矩阵的第二个虚部。

  • k_weight (torch.Parameter) – 本层四元数权重矩阵的第三个虚部。

  • bias (torch.Parameter)

  • stride (int) – 卷积滤波器的步长因子。

  • padding (int) – 填充量。更多信息请参阅 torch.nn 文档。

  • groups (int) – 此选项指定卷积组。更多信息请参阅 torch.nn 文档。

  • dilation (int) – 卷积滤波器的膨胀因子。

  • conv1d (bool) – 如果为 True,将应用一维卷积操作。否则,调用二维卷积。

返回类型:

卷积后的四元数输入

speechbrain.nnet.quaternion_networks.q_ops.quaternion_init(in_features, out_features, kernel_size=None, criterion='glorot')[source]

返回使用“Quaternion Recurrent Neural Network” - Parcollet T. 中描述的方法初始化的四元数矩阵。

参数:
  • in_features (int) – 输入层实数值的数量(四元数 // 4)。

  • out_features (int) – 输出层实数值的数量(四元数 // 4)。

  • kernel_size (int) – 卷积层的核大小(例如:(3,3))。

  • criterion (str) – (glorot, he)

返回类型:

初始化的四元数矩阵

speechbrain.nnet.quaternion_networks.q_ops.unitary_init(in_features, out_features, kernel_size=None, criterion='he')[source]

返回酉四元数矩阵。

参数:
  • in_features (int) – 输入层实数值的数量(四元数 // 4)。

  • out_features (int) – 输出层实数值的数量(四元数 // 4)。

  • kernel_size (int) – 卷积层的核大小(例如:(3,3))。

  • criterion (str) – (glorot, he)

返回类型:

酉四元数矩阵。

speechbrain.nnet.quaternion_networks.q_ops.affect_init(r_weight, i_weight, j_weight, k_weight, init_func, init_criterion)[source]

将给定的权重初始化函数应用于参数。

参数:
  • r_weight (torch.Parameters) – (nb_quaternion_in, nb_quaternion_out)

  • i_weight (torch.Parameters) – (nb_quaternion_in, nb_quaternion_out)

  • j_weight (torch.Parameters) – (nb_quaternion_in, nb_quaternion_out)

  • k_weight (torch.Parameters) – (nb_quaternion_in, nb_quaternion_out)

  • init_func (function) – (unitary_init, quaternion_init)

  • init_criterion (str) – (glorot, he)

speechbrain.nnet.quaternion_networks.q_ops.affect_conv_init(r_weight, i_weight, j_weight, k_weight, kernel_size, init_func, init_criterion)[source]

将给定的权重初始化函数应用于参数。这是专门为卷积层编写的。

参数:
  • r_weight (torch.Parameters) – (nb_quaternion_in, nb_quaternion_out)

  • i_weight (torch.Parameters) – (nb_quaternion_in, nb_quaternion_out)

  • j_weight (torch.Parameters) – (nb_quaternion_in, nb_quaternion_out)

  • k_weight (torch.Parameters) – (nb_quaternion_in, nb_quaternion_out)

  • kernel_size (int) – 核大小。

  • init_func (function) – (unitary_init, quaternion_init)

  • init_criterion (str) – (glorot, he)

speechbrain.nnet.quaternion_networks.q_ops.check_quaternion_input(input_shape)[source]

检查线性层的四元数值形状。

参数:

input_shape (tuple) – 预期的输入形状。

speechbrain.nnet.quaternion_networks.q_ops.renorm_quaternion_weights_inplace(r_weight, i_weight, j_weight, k_weight, max_norm)[source]

重新规范化四元数值权重的幅值。

参数:
  • r_weight (torch.Parameter)

  • i_weight (torch.Parameter)

  • j_weight (torch.Parameter)

  • k_weight (torch.Parameter)

  • max_norm (float) – 四元数权重幅度的最大范数