Подтвердить что ты не робот

В Tensorflow, в чем разница между sampled_softmax_loss и softmax_cross_entropy_with_logits

В тензорном потоке есть методы под названием softmax_cross_entropy_with_logits и sampled_softmax_loss.

Я прочитал документ tensorflow и искал google для получения дополнительной информации, но я не могу найти разницы. Мне кажется, что оба вычисляют убытки, используя функцию softmax.

Использование sampled_softmax_loss для вычисления потерь

loss = tf.reduce_mean(tf.nn.sampled_softmax_loss(...))

Использование softmax_cross_entropy_with_logits для вычисления потерь

loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(P, Q))

Для меня вычисление потери softmax аналогично вычислению мягкой макс кросс-энтропии (например, cross_entropy (softmax (train_x)))

Может ли кто-нибудь сказать мне, почему существует два разных метода и какой метод я должен использовать в этом случае?

Спасибо.

4b9b3361

Ответ 1

Если ваш целевой словарь (или, другими словами, количество классов, которые вы хотите предсказать) действительно большой, очень сложно использовать регулярный softmax, потому что вы должны рассчитать вероятность для каждого слова в словаре. Используя sampled_softmax_loss, вы учитываете только подмножество V вашего словаря, чтобы рассчитать свою потерю.

Сэмплированный softmax имеет смысл только в том случае, если мы проследим (наш V) меньше, чем размер словаря. Если ваш словарный запас (количество меток) мал, нет смысла использовать sampled_softmax_loss.

В этой статье вы можете увидеть детали реализации: http://arxiv.org/pdf/1412.2007v2.pdf

Также вы можете увидеть пример, где он используется - Последовательность для перевода последовательности в этом пример

Ответ 2

Sampled:

Сэмплированный в обоих случаях означает, что вы не вычисляете его для всего того, что возможно в качестве вывода (например: в словаре слишком много слов, чтобы взять все из них при каждом деривации, поэтому мы берем только несколько образец и узнать об этом для проблем НЛП).

softmax_cross_entropy_with_logits:

Это кросс-энтропия и принимает логиты в качестве входных данных и дает то, что может быть использовано как потеря.

sampled_softmax_loss:

Это выборочный файл softmax_cross_entropy_with_logits, поэтому перед использованием кросс-энтропии требуется всего несколько образцов, а не с использованием полной кросс-энтропии: https://github.com/tensorflow/tensorflow/blob/r1.2/tensorflow/python/ops/nn_impl.py#L1269