評價此頁

AdaptiveLogSoftmaxWithLoss#

class torch.nn.modules.adaptive.AdaptiveLogSoftmaxWithLoss(in_features, n_classes, cutoffs, div_value=4.0, head_bias=False, device=None, dtype=None)[源]#

高效的 softmax 近似。

Efficient softmax approximation for GPUs by Edouard Grave, Armand Joulin, Moustapha Cissé, David Grangier, and Hervé Jégou 所述。

自適應 Softmax 是一種用於訓練具有大型輸出空間的模型的近似策略。當標籤分佈高度不平衡時,它最為有效,例如在自然語言建模中,其中單詞頻率分佈近似遵循 齊夫定律

自適應 Softmax 根據頻率將標籤劃分為幾個簇。這些簇可能包含不同數量的目標。此外,包含較少頻繁標籤的簇為這些標籤分配較低維度的嵌入,從而加快了計算速度。對於每個小批次,僅評估至少存在一個目標的簇。

其思想是,頻繁訪問的簇(例如包含最頻繁標籤的第一個簇)的計算成本也應該很低——也就是說,它們包含的標籤數量很少。

我們強烈建議您閱讀原始論文以獲取更多詳細資訊。

  • cutoffs 應為按遞增順序排序的整數序列。它控制著簇的數量和目標到簇的劃分。例如,設定 cutoffs = [10, 100, 1000] 意味著前 10 個目標將被分配到自適應 Softmax 的“頭部”,目標 11, 12, ..., 100 將被分配到第一個簇,目標 101, 102, ..., 1000 將被分配到第二個簇,而目標 1001, 1002, ..., n_classes - 1 將被分配到最後一個(第三個)簇。

  • div_value 用於計算每個附加簇的大小,其計算方式為 in_featuresdiv_valueidx\left\lfloor\frac{\texttt{in\_features}}{\texttt{div\_value}^{idx}}\right\rfloor,其中 idxidx 是簇的索引(頻率較低的詞的簇具有較大的索引,索引從 11 開始)。

  • head_bias 如果設定為 True,則在自適應 Softmax 的“頭部”新增一個偏置項。詳情請參閱論文。在官方實現中設定為 False。

警告

輸入到此模組的標籤應按頻率排序。這意味著最頻繁的標籤應由索引 0 表示,最不頻繁的標籤應由索引 n_classes - 1 表示。

注意

此模組返回一個 NamedTuple,其中包含 outputloss 欄位。有關詳細資訊,請參閱後續文件。

注意

要計算所有類的對數機率,可以使用 log_prob 方法。

引數
  • in_features (int) – 輸入張量的特徵數

  • n_classes (int) – 資料集中的類別數

  • cutoffs (Sequence) – 用於將目標分配到其儲存桶的截止值

  • div_value (float, optional) – 用於計算簇大小的指數值。預設為 4.0

  • head_bias (bool, optional) – 如果為 True,則在自適應 Softmax 的“頭部”新增一個偏置項。預設為 False

返回

  • output 是一個大小為 N 的張量,包含為每個示例計算的目標對數機率

  • loss 是一個標量,表示計算出的負對數似然損失

返回型別

NamedTuple,包含 outputloss 欄位

形狀
  • 輸入:(N,in_features)(N, \texttt{in\_features})(in_features)(\texttt{in\_features})

  • 目標:(N)(N)()(),其中每個值滿足 0<=target[i]<=n_classes0 <= \texttt{target[i]} <= \texttt{n\_classes}

  • 輸出1:(N)(N)()()

  • 輸出2:Scalar

forward(input_, target_)[源]#

執行前向傳播。

返回型別

_ASMoutput

log_prob(input)[源]#

計算所有 n_classes\texttt{n\_classes} 的對數機率。

引數

input (Tensor) – 示例的小批次

返回

在範圍 0<=c<=n_classes0 <= c <= \texttt{n\_classes} 內,對於每個類 cc 的對數機率,其中 n_classes\texttt{n\_classes} 是傳遞給 AdaptiveLogSoftmaxWithLoss 建構函式的引數。

返回型別

張量

形狀
  • 輸入:(N,in_features)(N, \texttt{in\_features})

  • 輸出:(N,n_classes)(N, \texttt{n\_classes})

predict(input)[源]#

為輸入小批次中的每個示例返回機率最高的類。

這等效於 self.log_prob(input).argmax(dim=1),但在某些情況下效率更高。

引數

input (Tensor) – 示例的小批次

返回

為每個示例機率最高的類

返回型別

output (Tensor)

形狀
  • 輸入:(N,in_features)(N, \texttt{in\_features})

  • 輸出:(N)(N)

reset_parameters()[源]#

根據 __init__ 中使用的初始化重置引數。