一些TensorFlow示例是这样计算成本函数的:
cost = tf.reduce_sum((pred-y)**2 / (2*n_samples))
所以商数是样本数量,乘以二。
添加额外因子2的原因,是为了在反向传播时对成本函数进行微分时,可以抵消掉1/2的因子,从而节省一个操作吗?
如果是这样,现在是否仍然推荐这样做?这是否真的能带来显著的性能提升?
回答:
在数学上这样做很方便,因为不需要一直携带0.5这个因子。但在代码中,这并不会产生很大的影响,因为这种改变使得梯度(以及相应的可训练变量的更新)变大了或变小了两倍。由于更新是乘以学习率的,这个因子2可以通过轻微调整超参数来抵消。我说轻微,是因为在模型选择过程中,通常会尝试以对数尺度调整学习率:0.1
, 0.01
, 0.001
, ….
因此,无论损失函数中使用了什么特定的公式,其效果都是微不足道的,不会导致任何训练速度的提升。选择合适的学习率更为重要。