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используется для вычисления размера каждого дополнительного кластера, который задаётся как , где — индекс кластера (индексы кластеров менее частых слов больше; отсчёт индексов начинается с ). -
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
- Форма:
-
- input: или
- target: или , где каждое значение удовлетворяет условию
- 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.AdaptiveLogSoftmaxWithLoss.html