Я использую TensorFlow для экспериментов в основном с нейронными сетями. Хотя я провел довольно много экспериментов (XOR-Problem, MNIST, некоторые вещи регрессии, ...), я борюсь с выбором «правильной» функции стоимости для конкретных задач, потому что в целом я мог бы считаться новичком.
До прихода в TensorFlow я самостоятельно кодировал некоторые полностью подключенные MLP и некоторые рекуррентные сети с помощью Python и NumPy, но в основном у меня были проблемы, когда было достаточно простой квадратной ошибки и простого отклонения от градиента.
Однако, поскольку TensorFlow предлагает довольно много функций затрат, а также создание пользовательских функций затрат, я хотел бы знать, есть ли какое-то учебное пособие, возможно, специально для функций затрат в нейронных сетях? (Я уже сделал как половину официальных учебных пособий по TensorFlow, но они на самом деле не объясняют, почему функции или ученики с конкретными затратами используются для решения конкретных задач - по крайней мере, не для начинающих)
Чтобы привести несколько примеров:
cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(y_output, y_train))
Я предполагаю, что она применяет функцию softmax к обоим входам, так что сумма одного вектора равна 1. Но что именно является кросс-энтропией с логитами? Я думал, что это суммирует значения и вычисляет перекрестную энтропию ... так что некоторые метрические измерения ?! Разве это не было бы так же, если бы я нормализовал вывод, суммировал и принял квадратную ошибку? Кроме того, почему это используется, например, для MNIST (или даже более сложные проблемы)? Когда я хочу классифицировать как 10 или, может быть, даже 1000 классов, разве суммирование значений полностью не уничтожает какую-либо информацию о том, какой класс на самом деле был выходным?
cost = tf.nn.l2_loss(vector)
Для чего это? Я думал, что потеря l2 в значительной степени является квадратической ошибкой, но API TensorFlow сообщает, что его вход - это всего лишь один тензор. Понятия не имеет вообще ?!
Кроме того, я часто видел это для перекрестной энтропии :
cross_entropy = -tf.reduce_sum(y_train * tf.log(y_output))
... но почему это используется? Разве математическая потеря энтропии не является такой:
-1/n * sum(y_train * log(y_output) + (1 - y_train) * log(1 - y_output))
Где (1 - y_train) * log(1 - y_output)
роль в большинстве примеров TensorFlow? Разве это не пропало?
Ответы: я знаю, что этот вопрос довольно открытый, но я не ожидаю, что получу около 10 страниц с каждой функцией проблемы / стоимости, перечисленной подробно. Мне просто нужно краткое резюме о том, когда использовать какую функцию стоимости (в целом или в TensorFlow, для меня это не имеет большого значения) и некоторое пояснение по этой теме. И / или некоторый источник (и) для начинающих;)