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 для GPU» Эдуара Грава, Армана Жулена, Мустафы Сиссе, Давида Гранжье и Эрве Жегу.
Адаптивный 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.- Параметры:
-
- in_features (int) – количество признаков во входном тензоре
- n_classes (int) – количество классов в наборе данных
- cutoffs (Sequence) – пороговые значения, используемые для распределения целевых значений по группам
- div_value (float, optional) – значение, используемое в качестве показателя степени при вычислении размеров кластеров. По умолчанию: 4.0
-
head_bias (bool, optional) – если
True, добавляет член смещения в «голову» адаптивного softmax. По умолчанию:False
- Возвращает:
-
-
output — тензор размера
N, содержащий вычисленные логарифмы вероятностей целевых значений для каждого примера - loss — скаляр, представляющий вычисленную функцию потерь на основе отрицательного логарифмического правдоподобия
-
output — тензор размера
- Тип возвращаемого значения:
-
NamedTupleс полямиoutputиloss
- Форма:
-
- вход: или
- целевое значение: или , где каждое значение удовлетворяет условию
- output1: или
- output2:
Scalar
-
forward(input_, target_)[исходный код] -
Выполняет прямой проход.
- Тип возвращаемого значения:
-
_ASMoutput
-
log_prob(input)[исходный код] -
Вычисляет логарифмы вероятностей для всех .
- Параметры:
-
input (Tensor) – мини-пакет примеров
- Возвращает:
-
логарифмы вероятностей для каждого класса в диапазоне , где — параметр, переданный конструктору
AdaptiveLogSoftmaxWithLoss. - Тип возвращаемого значения:
- Форма:
-
- Вход:
- Выход:
-
predict(input)[исходный код] -
Возвращает класс с наибольшей вероятностью для каждого примера во входном мини-пакете.
Это эквивалентно
self.log_prob(input).argmax(dim=1), но в некоторых случаях работает эффективнее.- Параметры:
-
input (Tensor) – мини-пакет примеров
- Возвращает:
-
класс с наибольшей вероятностью для каждого примера
- Тип возвращаемого значения:
-
output (Tensor)
- Форма:
-
- Вход:
- Выход:
-
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.modules.adaptive.AdaptiveLogSoftmaxWithLoss.html