AdaptiveLogSoftmaxWithLoss#
- class torch.nn.modules.adaptive.AdaptiveLogSoftmaxWithLoss(in_features, n_classes, cutoffs, div_value=4.0, head_bias=False, device=None, dtype=None)[源]#
高效的 softmax 近似。
自適應 Softmax 是一種用於訓練具有大型輸出空間的模型的近似策略。當標籤分佈高度不平衡時,它最為有效,例如在自然語言建模中,其中單詞頻率分佈近似遵循 齊夫定律。
自適應 Softmax 根據頻率將標籤劃分為幾個簇。這些簇可能包含不同數量的目標。此外,包含較少頻繁標籤的簇為這些標籤分配較低維度的嵌入,從而加快了計算速度。對於每個小批次,僅評估至少存在一個目標的簇。
其思想是,頻繁訪問的簇(例如包含最頻繁標籤的第一個簇)的計算成本也應該很低——也就是說,它們包含的標籤數量很少。
我們強烈建議您閱讀原始論文以獲取更多詳細資訊。
cutoffs應為按遞增順序排序的整數序列。它控制著簇的數量和目標到簇的劃分。例如,設定cutoffs = [10, 100, 1000]意味著前 10 個目標將被分配到自適應 Softmax 的“頭部”,目標 11, 12, ..., 100 將被分配到第一個簇,目標 101, 102, ..., 1000 將被分配到第二個簇,而目標 1001, 1002, ..., n_classes - 1 將被分配到最後一個(第三個)簇。div_value用於計算每個附加簇的大小,其計算方式為 ,其中 是簇的索引(頻率較低的詞的簇具有較大的索引,索引從 開始)。head_bias如果設定為 True,則在自適應 Softmax 的“頭部”新增一個偏置項。詳情請參閱論文。在官方實現中設定為 False。
警告
輸入到此模組的標籤應按頻率排序。這意味著最頻繁的標籤應由索引 0 表示,最不頻繁的標籤應由索引 n_classes - 1 表示。
注意
此模組返回一個
NamedTuple,其中包含output和loss欄位。有關詳細資訊,請參閱後續文件。注意
要計算所有類的對數機率,可以使用
log_prob方法。- 引數
- 返回
output 是一個大小為
N的張量,包含為每個示例計算的目標對數機率loss 是一個標量,表示計算出的負對數似然損失
- 返回型別
NamedTuple,包含output和loss欄位
- 形狀
輸入: 或
目標: 或 ,其中每個值滿足
輸出1: 或
輸出2:
Scalar