• 文档 >
  • torch.nn >
  • 自适应对数软最大值与损失
快捷键

自适应对数软最大值与损失 ¶

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

高效的 softmax 近似

如在 Edouard Grave、Armand Joulin、Moustapha Cissé、David Grangier 和 Hervé Jégou 的《针对 GPU 的高效 softmax 近似》一文中所述。

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

自适应 softmax 将标签划分为几个簇,根据它们的频率。这些簇可能包含不同数量的目标。此外,包含较少频率标签的簇为这些标签分配较低维度的嵌入,这可以加快计算速度。对于每个小批量,只有至少包含一个目标的目标簇会被评估。

理念是频繁访问的簇(如包含最频繁标签的第一个簇),应该也是计算成本低的——也就是说,包含少量分配的标签。

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

  • cutoffs 应该是一个按升序排列的整数序列。它控制着簇的数量以及目标在簇中的划分。例如,设置 cutoffs = [10, 100, 1000] 表示前 10 个目标将被分配给自适应软最大值的首部,目标 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,则向自适应软最大值的首部添加一个偏置项。请参阅论文以获取详细信息。在官方实现中设置为 False。

警告

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

注意

此模块返回一个包含 NamedTupleoutputloss 字段的 NamedTuple 。请参阅详细文档以获取更多信息。

注意

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

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

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

  • cutoffs (序列) – 用于将目标分配到其桶的截止值

  • div_value (浮点数,可选) – 用作计算簇大小的指数值。默认:4.0

  • head_bias (布尔值,可选) – 如果 True ,则向自适应 softmax 的“头部”添加偏置项。默认: False

返回值:

  • 输出是一个大小为 N 的 Tensor,包含每个示例的预测目标对数概率

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

返回类型:

使用 NamedTupleoutputloss 字段

形状:
  • 输入: (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}

  • output1: (N)(N)()()

  • output2: Scalar

log_prob(input)[来源][来源] ¶

计算所有 n_classes\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)[source][source]

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

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

参数:

输入(张量)- 一个示例的小批量。

返回值:

每个示例的最高概率对应的类别。

返回类型:

输出(张量)

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

  • 输出: (N)(N)


© 版权所有 PyTorch 贡献者。

使用 Sphinx 构建,并使用 Read the Docs 提供的主题。

文档

PyTorch 的全面开发者文档

查看文档

教程

深入了解初学者和高级开发者的教程

查看教程

资源

查找开发资源并获得您的疑问解答

查看资源