Мультиметочная функция потери классификации
Во многих местах я видел, что для классификации нескольких меток с использованием нейронных сетей одной полезной функцией потерь является двоичная кросс-энтропия для каждого из выходных узлов.
В 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
изменений меток.