Мультиметочная функция потери классификации

Во многих местах я видел, что для классификации нескольких меток с использованием нейронных сетей одной полезной функцией потерь является двоичная кросс-энтропия для каждого из выходных узлов.

В Tensorflow это выглядит так:

cost = tf.nn.sigmoid_cross_entropy_with_logits()

Это дает массив с таким количеством значений, сколько у нас есть выходных узлов.

Мой вопрос: должна ли эта функция стоимости быть усреднена по количеству выходных узлов? Который в Tensorflow будет выглядеть так:

cost = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits())

Или каждая потеря лечится независимо?

Спасибо

1 ответ

Решение

За N метки в классификации по нескольким меткам, не имеет значения, суммируете ли вы потери для каждого класса или вычисляете среднюю потерю, используя tf.reduce_mean: градиент будет указывать в том же направлении.

Однако, если вы разделите сумму на N (это то, что по сути является усреднением), это повлияет на скорость обучения в конце дня. Если вы не уверены, сколько будет меток в задаче классификации по нескольким меткам, возможно, будет проще использовать tf.reduce_meanпотому что вам не нужно будет перенастраивать вес этого компонента потерь по сравнению с другими компонентами потерь, и вам не придется корректировать скорость обучения в количестве N изменений меток.

Другие вопросы по тегам