自适应对数_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表示。
注意
此模块返回一个包含
output
和loss
字段的NamedTuple
。更多细节请参考相关文档。注意
要为所有类别计算对数概率,可以使用
log_prob
方法。- 参数
- 返回值
-
-
output 是一个大小为
N
的张量,包含每个示例的计算目标对数概率值。 -
loss 是一个标量,表示计算得出的负对数似然损失。
-
- 返回类型
-
NamedTuple
包含output
和loss
字段
- 形状:
-
-
输入格式为: $(N, \texttt{in\_features})$ 或 $(\texttt{in\_features})$
-
目标: $(N)$ 或 $()$,其中每个值的范围是 $0 <= \texttt{target[i]} <= \texttt{n\_classes}$
-
输出1: $(N)$ 或 $()$
-
输出2:
标量
-
-