自适应对数软最大值与损失 ¶
- 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
用于计算每个额外簇的大小,该大小由 给出,其中 是簇索引(对于出现频率较低的词,其索引较大,索引从 开始)。head_bias
如果设置为 True,则向自适应软最大值的首部添加一个偏置项。请参阅论文以获取详细信息。在官方实现中设置为 False。
警告
此模块的输入标签应按其频率排序。这意味着最频繁的标签应由索引 0 表示,而最不频繁的标签应由索引 n_classes - 1 表示。
注意
此模块返回一个包含
NamedTuple
、output
和loss
字段的NamedTuple
。请参阅详细文档以获取更多信息。注意
要计算所有类的对数概率,可以使用
log_prob
方法。- 参数:
in_features (int) – 输入张量中的特征数量
n_classes (int) – 数据集中的类别数量
cutoffs (序列) – 用于将目标分配到其桶的截止值
div_value (浮点数,可选) – 用作计算簇大小的指数值。默认:4.0
head_bias (布尔值,可选) – 如果
True
,则向自适应 softmax 的“头部”添加偏置项。默认:False
- 返回值:
输出是一个大小为
N
的 Tensor,包含每个示例的预测目标对数概率损失是一个表示计算出的负对数似然损失的标量
- 返回类型:
使用
NamedTuple
、output
和loss
字段
- 形状:
输入: 或
目标: 或 ,其中每个值满足
output1: 或
output2:
Scalar
- log_prob(input)[来源][来源] ¶
计算所有 的对数概率。
- 参数:
输入(张量)- 一批示例
- 返回值:
每个类别的对数概率 ,其中 是传递给
AdaptiveLogSoftmaxWithLoss
构造函数的参数。- 返回类型:
- 形状:
输入:
输出: