#tensorflow #machine-learning #deep-learning #backpropagation
Вопрос:
Допустим, я выполняю стандартную задачу классификации DNN и использую потерю перекрестной энтропии. После расчета потерь я применяю вектор маски([0, 0, 0, 1, 1, …] к потере, чтобы установить часть потерь на ноль.
вопрос в том, как Tensorflow справится с этой нулевой потерей? Будет ли он участвовать в обратном распространении или нет?
Ответ №1:
Да, tensorflow сможет справиться с этим. Градиенты, ведущие к замаскированным значениям потерь, будут тогда равны просто 0, потому что они не повлияли на значения потерь.
Комментарии:
1. Спасибо, Марк, как tensorflow справится с этим? будет ли tensorflow просто выбрасывать образцы, потеря которых замаскирована до нуля? и почему? обратите внимание, что потеря=0 не означает, что градиент=0
2. Потеря=0 не означает градиент=ноль, но градиент равен нулю, если переменная не влияет на результат вашей функции потерь. Если вы маскируете свои значения потерь нулевыми значениями, то они блокируют любое влияние переменных вашей модели на результат ваших потерь, и, следовательно, градиент равен нулю. Это то же самое, что применить отсев в нейронной сети. Там вы также блокируете некоторые значения, умножая их на 0, и при этой операции градиент не проходит.
3. Спасибо, Марк, я получил некоторое представление о вашем объяснении(возможно, все еще пропустил некоторые моменты). но есть небольшая разница, в моем случае операция маски применяется к входным выборкам, а не к переменным графика(одна потеря соответствует одному образцу). имеют ли разные образцы один и тот же график TF(и одни и те же переменные графика)? если да, то как TF заблокирует обновление?
4. Я не уверен, что понимаю, что вы имеете в виду. Вы имеете в виду, что в пределах одной партии вы вычисляете потери для многих образцов, а затем маскируете некоторые из рассчитанных значений потерь, так что потери для некоторых образцов равны нулю? Если это так, то эти выборки, для которых вы замаскировали значения потерь, просто не будут способствовать вашему градиенту, и градиент рассчитывается только на основе других выборок. Как всегда помните: все, что не влияет на конечную величину потерь, не будет иметь градиента. Применение маски в основном «отключает» некоторые веса/образцы от вашей потери.
5. спасибо за ваш ответ. ваше понимание верно. И теперь я полностью понимаю, что ты имеешь в виду. Но все же, как убедиться, что он «отключит» образцы с нулевыми потерями? это из математического определения или в TF есть какая-то «волшебная» логика в бэкэнде?
Ответ №2:
Применение маски к потере вашей модели после того, как вы рассчитали фактическую потерю, по сути, означает, что нулевые элементы градиента пропущены во время обратного распространения. Например, очень распространенным подходом является применение вектора маски к потере при работе с данными временных рядов, которые обычно дополняются, чтобы иметь одинаковую длину. Эти дополнительные нулевые значения бесполезны для вашей модели при расчете градиентов и поэтому игнорируются.
Комментарии:
1. Спасибо всем вместе. У меня нет опыта работы с временными рядами с глубоким обучением. Вы имеете в виду, что Tensorflow выбросит эти образцы с потерей 0? Но потеря=0 не означает градиент=0, как tensorflow сможет выбросить эти образцы с 0 потерями? что, если у него действительно ненулевой градиент?