我正在使用TensorFlow主要用于神经网络的实验。尽管现在我已经做了大量的实验(XOR问题,MNIST,一些回归的东西……),但是我为特定的问题选择“正确的”成本函数很困难,因为总的来说我可以被认为是一个初学者。
在上TensorFlow之前,我自己使用Python和NumPy编写了一些完全连接的MLP和一些递归网络,但大多数情况下,我遇到了一个简单的平方误差和简单的梯度设计就足够了的问题。
但是,由于TensorFlow本身提供了很多成本函数以及构建自定义成本函数的功能,所以我想知道是否存在某种专门针对神经网络上的成本函数的教程?(我已经完成了一半的TensorFlow官方教程,但它们并没有真正解释为什么特定成本函数或学习者用于特定问题-至少对于初学者而言)
举一些例子:
cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(y_output, y_train))
我猜想它在两个输入上都应用了softmax函数,以便一个向量的总和等于1。但是对数与logits的交叉熵到底是什么呢?我以为它会汇总值并计算交叉熵...那么一些度量标准度量值呢?如果我对输出进行归一化,求和并求平方误差,这是否会完全相同?此外,为什么将其用于MNIST(甚至更困难的问题)?当我想分类为10个甚至1000个类时,汇总这些值是否会完全破坏有关输出实际上是哪个类的任何信息?
cost = tf.nn.l2_loss(vector)
这个是来做什么的?我以为l2损失几乎是平方误差,但TensorFlow的API告诉它输入只是一个张量。根本不知道这个主意吗?
此外,我经常看到这种用于交叉熵的方法:
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中,对我来说并不重要),以及有关此主题的一些解释。和/或一些初学者的资源;)