自适应对数_softmax_损失

classtorch.nn.AdaptiveLogSoftmaxWithLoss(in_features, n_classes, cutoffs, div_value=4.0, head_bias=False, device=None, dtype=None)[源代码]

高效的softmax逼近

Edouard Grave、Armand Joulin、Moustapha Cissé、David Grangier 和 Hervé Jégou 所著的《用于 GPU 的高效 softmax 近似》 中所述。

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

自适应softmax根据标签频率将其划分为多个簇。每个簇中可能包含不同数量的目标。此外,较少出现的标签会被分配较低维度的嵌入,从而加快计算速度。对于每个小批量数据,只评估其中至少有一个目标存在的那些簇。

想法是,经常被访问的簇(例如第一个包含最频繁标签的簇)应该易于计算,也就是说,这些簇应包含较少的分配标签。

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

  • cutoffs 应该是一个按升序排列的整数序列,用于控制聚类的数量以及将目标划分到各个聚类的方式。例如,设置 cutoffs = [10, 100, 1000] 表示前 10 个目标会被分配到自适应 softmax 的“头部”,接下来的 11 到 100 个目标会被分配到第一个聚类,101 到 1000 个目标会被分配到第二个聚类,而剩下的目标 1001 到 n_classes - 1 将被分配到最后一个、第三个聚类。

  • div_value 用于计算每个附加簇的大小,其值为$\left\lfloor\frac{\texttt{in\_features}}{\texttt{div\_value}^{idx}}\right\rfloor$。其中,$idx$ 是簇的索引,频率较低的词对应的簇具有较大的索引,并且索引从$1$ 开始。

  • head_bias 如果设置为 True,会在自适应 softmax 的“头部”添加一个偏置项。具体细节请参考论文。而在官方实现中,默认设置为 False。

警告

传递给此模块的标签应按频率排序。这意味着最常出现的标签用索引0表示,而最不常出现的标签用索引n_classes - 1表示。

注意

此模块返回一个包含outputloss字段的NamedTuple。更多细节请参考相关文档。

注意

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

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

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

  • cutoffs (Sequence) – 用于将目标分配到相应桶的阈值

  • div_value (float, 可选) – 用于计算聚类大小的指数值。默认:4.0

  • head_bias (bool, optional) – 如果为 True,会在自适应softmax的‘头’部分添加一个偏置项。默认值: False

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

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

返回类型

NamedTuple 包含 outputloss 字段

形状:
  • 输入格式为: $(N, \texttt{in\_features})$$(\texttt{in\_features})$

  • 目标: $(N)$$()$,其中每个值的范围是 $0 <= \texttt{target[i]} <= \texttt{n\_classes}$

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

  • 输出2: 标量

log_prob(input)[源代码]

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

参数

输入 (Tensor) – 一个小批量的示例

返回值

每个类别的对数概率$c$,范围在$0 \leq c \leq \texttt{n\_classes}$。其中$\texttt{n\_classes}$是传递给AdaptiveLogSoftmaxWithLoss构造函数的参数。

返回类型

Tensor

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

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

predict(input)[源代码]

对于输入小批量中的每个样本,返回概率最大的类别。

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

参数

输入 (Tensor) – 一个小批量的示例

返回值

每个示例中概率最高的类别

返回类型

输出(Tensor

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

  • 输出: $(N)$

本页目录