Spec-Zone.ru › PyTorch 2.14

AdaptiveLogSoftmaxWithLoss

class torch.nn.AdaptiveLogSoftmaxWithLoss(in_features, n_classes, cutoffs, div_value=4.0, head_bias=False, device=None, dtype=None) [исходный код]

Эффективное приближение softmax.

Описано в работе «Эффективное приближение softmax для GPU» Эдуара Грава, Армана Жулена, Мустафы Сиссе, Давида Гранжье и Эрве Жегу.

Адаптивный 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 с полями 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
Возвращает:
  • output — тензор размера N, содержащий вычисленные логарифмы вероятностей целевых значений для каждого примера
  • loss — скаляр, представляющий вычисленную функцию потерь по отрицательному логарифмическому правдоподобию
Тип возвращаемого значения:

NamedTuple с полями output и loss

Форма:
  • input: (N,in_features)(N, \texttt{in\_features}) или (in_features)(\texttt{in\_features})
  • target: (N)(N) или ()(), где каждое значение удовлетворяет условию 0<=target[i]<=n_classes0 <= \texttt{target[i]} <= \texttt{n\_classes}
  • output1: (N)(N) или ()()
  • output2: Scalar
forward(input_, target_) [исходный код]

Выполняет прямой проход.

Тип возвращаемого значения:

_ASMoutput

log_prob(input) [исходный код]

Вычисляет логарифмы вероятностей для всех n_classes\texttt{n\_classes}.

Параметры:

input (Tensor) – мини-пакет примеров

Возвращает:

логарифмы вероятностей для каждого класса cc в диапазоне 0<=c<=n_classes0 <= c <= \texttt{n\_classes}, где n_classes\texttt{n\_classes} — параметр, переданный конструктору AdaptiveLogSoftmaxWithLoss.

Тип возвращаемого значения:

Tensor

Форма:
  • Вход: (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__ инициализацией.

© 2026, PyTorch Contributors
PyTorch has a BSD-style license, as found in the LICENSE file.
https://docs.pytorch.org/docs/2.14/generated/torch.nn.AdaptiveLogSoftmaxWithLoss.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API