AdaptiveLogSoftmaxWithLoss¶
- 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 在《Efficient softmax approximation for GPUs》中所述。
自適應 softmax 是一種用於訓練具有大型輸出空間的模型的近似策略。當標籤分佈高度不平衡時,例如在自然語言建模中,詞頻分佈大致遵循齊普夫定律(Zipf’s law),這種策略最為有效。
自適應 softmax 根據標籤的頻率將標籤劃分為多個簇。這些簇可以包含不同數量的目標。此外,包含不常見標籤的簇會為這些標籤分配較低維度的嵌入,從而加快計算速度。對於每個 minibatch,僅評估包含至少一個目標的簇。
其理念是,那些被頻繁訪問的簇(例如第一個簇,包含最常見的標籤)也應該計算開銷較低——也就是說,它們包含少量被分配的標籤。
強烈建議查閱原始論文以獲取更多詳細資訊。
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 表示。
注意
此模組返回一個帶有
output和loss欄位的NamedTuple。詳細資訊請參閱進一步的文件。注意
要計算所有類別的對數機率,可以使用
log_prob方法。- 引數
- 返回值
output 是一個大小為
N的 Tensor,包含為每個示例計算的目標對數機率loss 是一個 Scalar,表示計算出的負對數似然損失
- 返回型別
帶有
output和loss欄位的NamedTuple
- 形狀
輸入: 或
目標: 或 ,其中每個值滿足
輸出1: 或
輸出2:
Scalar