评价此页

AdaptiveLogSoftmaxWithLoss#

class torch.nn.modules.adaptive.AdaptiveLogSoftmaxWithLoss(in_features, n_classes, cutoffs, div_value=4.0, head_bias=False, device=None, dtype=None)[源]#

高效的 softmax 近似。

Efficient softmax approximation for GPUs by Edouard Grave, Armand Joulin, Moustapha Cissé, David Grangier, and Hervé Jégou 所述。

自适应 Softmax 是一种用于训练具有大型输出空间的模型的近似策略。当标签分布高度不平衡时,它最为有效,例如在自然语言建模中,其中单词频率分布近似遵循 齐夫定律

自适应 Softmax 根据频率将标签划分为几个簇。这些簇可能包含不同数量的目标。此外,包含较少频繁标签的簇为这些标签分配较低维度的嵌入,从而加快了计算速度。对于每个小批量,仅评估至少存在一个目标的簇。

其思想是,频繁访问的簇(例如包含最频繁标签的第一个簇)的计算成本也应该很低——也就是说,它们包含的标签数量很少。

我们强烈建议您阅读原始论文以获取更多详细信息。

  • cutoffs 应为按递增顺序排序的整数序列。它控制着簇的数量和目标到簇的划分。例如,设置 cutoffs = [10, 100, 1000] 意味着前 10 个目标将被分配到自适应 Softmax 的“头部”,目标 11, 12, ..., 100 将被分配到第一个簇,目标 101, 102, ..., 1000 将被分配到第二个簇,而目标 1001, 1002, ..., n_classes - 1 将被分配到最后一个(第三个)簇。

  • div_value 用于计算每个附加簇的大小,其计算方式为 in_featuresdiv_valueidx\left\lfloor\frac{\texttt{in\_features}}{\texttt{div\_value}^{idx}}\right\rfloor,其中 idxidx 是簇的索引(频率较低的词的簇具有较大的索引,索引从 11 开始)。

  • head_bias 如果设置为 True,则在自适应 Softmax 的“头部”添加一个偏置项。详情请参阅论文。在官方实现中设置为 False。

警告

输入到此模块的标签应按频率排序。这意味着最频繁的标签应由索引 0 表示,最不频繁的标签应由索引 n_classes - 1 表示。

注意

此模块返回一个 NamedTuple,其中包含 outputloss 字段。有关详细信息,请参阅后续文档。

注意

要计算所有类的对数概率,可以使用 log_prob 方法。

参数
  • in_features (int) – 输入张量的特征数

  • n_classes (int) – 数据集中的类别数

  • cutoffs (Sequence) – 用于将目标分配到其存储桶的截止值

  • div_value (float, optional) – 用于计算簇大小的指数值。默认为 4.0

  • head_bias (bool, optional) – 如果为 True,则在自适应 Softmax 的“头部”添加一个偏置项。默认为 False

返回

  • output 是一个大小为 N 的张量,包含为每个示例计算的目标对数概率

  • loss 是一个标量,表示计算出的负对数似然损失

返回类型

NamedTuple,包含 outputloss 字段

形状
  • 输入:(N,in_features)(N, \texttt{in\_features})(in_features)(\texttt{in\_features})

  • 目标:(N)(N)()(),其中每个值满足 0<=target[i]<=n_classes0 <= \texttt{target[i]} <= \texttt{n\_classes}

  • 输出1:(N)(N)()()

  • 输出2:Scalar

forward(input_, target_)[源]#

执行前向传播。

返回类型

_ASMoutput

log_prob(input)[源]#

计算所有 n_classes\texttt{n\_classes} 的对数概率。

参数

input (Tensor) – 示例的小批量

返回

在范围 0<=c<=n_classes0 <= c <= \texttt{n\_classes} 内,对于每个类 cc 的对数概率,其中 n_classes\texttt{n\_classes} 是传递给 AdaptiveLogSoftmaxWithLoss 构造函数的参数。

返回类型

张量

形状
  • 输入:(N,in_features)(N, \texttt{in\_features})

  • 输出:(N,n_classes)(N, \texttt{n\_classes})

predict(input)[源]#

为输入小批量中的每个示例返回概率最高的类。

这等效于 self.log_prob(input).argmax(dim=1),但在某些情况下效率更高。

参数

input (Tensor) – 示例的小批量

返回

为每个示例概率最高的类

返回类型

output (Tensor)

形状
  • 输入:(N,in_features)(N, \texttt{in\_features})

  • 输出:(N)(N)

reset_parameters()[源]#

根据 __init__ 中使用的初始化重置参数。