Чем softmax_cross_entropy_with_logits отличается от softmax_cross_entropy_with_logits_v2?

41

В частности, я предполагаю, что мне интересно это утверждение:

Будущие основные версии TensorFlow позволят градиентам перетекать в метки, введенные на backprop по умолчанию.

Который показан, когда я использую tf.nn.softmax_cross_entropy_with_logits. В том же сообщении он призывает меня взглянуть tf.nn.softmax_cross_entropy_with_logits_v2. Я просмотрел документацию, но она только утверждает, что для tf.nn.softmax_cross_entropy_with_logits_v2:

Обратное распространение будет происходить как в логах, так и в метках. Чтобы запретить обратное распространение на метки, передайте тензоры меток через stop_gradients перед передачей его этой функции.

в отличие от tf.nn.softmax_cross_entropy_with_logits:

Обратное распространение будет происходить только в логах.

Будучи очень новым для предмета (я пытаюсь пройтись по некоторым основным учебникам), эти утверждения не очень ясны. У меня поверхностное понимание обратного распространения, но что на самом деле означает предыдущее утверждение? Как связаны обратное распространение и метки? И как это меняет то, как я работаю, tf.nn.softmax_cross_entropy_with_logits_v2в отличие от оригинала?

Кристиан Эрикссон
источник

Ответы:

56

У вас есть все причины, чтобы запутаться, потому что при контролируемом обучении не требуется обратного распространения на ярлыки. Они считаются фиксированной наземной истиной, и только веса должны быть скорректированы в соответствии с ними.

Но в некоторых случаях сами ярлыки могут исходить из дифференцированного источника, другой сети. Одним из примеров может быть состязательное обучение . В этом случае обе сети могут извлечь выгоду из сигнала ошибки. Вот причина, почему tf.nn.softmax_cross_entropy_with_logits_v2был введен . Обратите внимание, что когда метки являются заполнителями (что также типично), нет разницы, идет ли градиент через потоки или нет, потому что нет переменных, к которым можно применить градиент.

Максим
источник
5
Ах, я вижу, мне еще предстоит выйти за рамки контролируемого обучения, многому научиться. Просто, чтобы я вас правильно понял, в основном до тех пор, пока я не укажу, что мои ярлыки подлежат оптимизации (например, сохраните их как tf.Variable), они не будут затронуты и softmax_..._with_logits_v2будут работать как softmax_with_logits? (Или я мог бы использовать tf.stop_gradient в переменной метки.)
Кристиан Эрикссон,
3
Да все верно.
Максим
2
Очень понятный и образовательный, большое спасибо!
Haitao Du