高效的 softmax 近似。
如 Edouard Grave, Armand Joulin, Moustapha Cissé, David Grangier, and Hervé Jégou 的《Efficient softmax approximation for GPUs》中所述。
自適應 Softmax 是一種用於訓練具有大輸出空間的模型的近似策略。當標籤分佈高度不平衡時,它最為有效,例如在自然語言建模中,其中單詞頻率分佈大致遵循 齊夫定律。
自適應 Softmax 根據頻率將標籤劃分為幾個簇。這些簇可能包含不同數量的目標。此外,包含不頻繁標籤的簇會為這些標籤分配較低維度的嵌入,這會加快計算速度。對於每個小批次,僅評估至少包含一個目標的簇。
其思想是,經常訪問的簇(例如第一個簇,包含最頻繁的標籤)也應該計算成本低廉——即,包含少量分配的標籤。
我們強烈建議您仔細閱讀原始論文以獲取更多詳細資訊。
cutoffs 應為按遞增順序排序的整數序列。它控制簇的數量以及目標到簇的劃分。例如,設定 cutoffs = [10, 100, 1000] 意味著前 10 個目標將被分配到自適應 Softmax 的“頭部”,目標 11, 12, ..., 100 將被分配到第一個簇,目標 101, 102, ..., 1000 將被分配到第二個簇,而目標 1001, 1002, ..., n_classes - 1 將被分配到最後一個(第三個)簇。
div_value 用於計算每個附加簇的大小,其大小為 ⌊div_valueidxin_features⌋, 其中 idx 是簇索引(不頻繁單詞的簇具有較大的索引,索引從 1 開始)。
head_bias 如果設定為 True,則在自適應 Softmax 的“頭部”新增一個偏置項。有關詳細資訊,請參閱論文。在官方實現中設定為 False。
警告
傳遞給此模組的標籤應根據其頻率進行排序。這意味著最頻繁的標籤應由索引 0 表示,最不頻繁的標籤應由索引 n_classes - 1 表示。
注意
此模組返回一個 NamedTuple,其中包含 output 和 loss 欄位。有關詳細資訊,請參閱進一步的文件。
注意
要計算所有類的對數機率,可以使用 log_prob 方法。
- 引數
in_features (int) – 輸入張量的特徵數
n_classes (int) – 資料集中的類別數
cutoffs (Sequence) – 用於將目標分配到其桶的截止值
div_value (float, optional) – 用於作為指數計算簇大小的值。預設為 4.0
head_bias (bool, optional) – 如果為 True,則在自適應 Softmax 的“頭部”新增偏置項。預設為 False
- 返回
-
- 返回型別
NamedTuple,包含 output 和 loss 欄位
- 形狀
輸入:(N,in_features) 或 (in_features)
目標:(N) 或 (),其中每個值滿足 0<=target[i]<=n_classes
輸出1:(N) 或 ()
輸出2:Scalar
-
forward(input_, target_)[原始碼]
執行前向傳播。
- 返回型別
_ASMoutput
-
log_prob(input)[原始碼]
計算所有 n_classes 的對數機率。
- 引數
input (Tensor) – 一個小批次示例
- 返回
每個類別 c 的對數機率,範圍為 0<=c<=n_classes,其中 n_classes 是傳遞給 AdaptiveLogSoftmaxWithLoss 建構函式的引數。
- 返回型別
張量
- 形狀
輸入:(N,in_features)
輸出:(N,n_classes)
-
predict(input)[原始碼]
為輸入小批次中的每個示例返回機率最高的類別。
這等同於 self.log_prob(input).argmax(dim=1),但在某些情況下更有效。
- 引數
input (Tensor) – 一個小批次示例
- 返回
每個示例中機率最高的類別
- 返回型別
output (Tensor)
- 形狀
-
-
reset_parameters()[原始碼]
根據 __init__ 中使用的初始化重置引數。