在 this code为了计算负对数似然,他们说:
Note: we use the mean instead of the sum so that the learning rate is less dependent on the batch size
这就是他们获得负对数似然的方法:
return -T.mean(T.log(self.p_y_given_x)[T.arange(y.shape[0]), y])
这在许多教科书中都是如此(例如 Bishop 的模式识别和机器学习),负对数似然是通过使用每个单独样本误差的总和来计算的而不是平均值。我还是不太明白作者的注释。每次计算成本函数时,我们应该使用均值而不是总和吗?即使我们不使用批处理?
最佳答案
平均值和总和之间的差异只是乘以 1/N。
使用总和的问题是批量大小 (N) 会影响梯度。学习率表示您想要在梯度方向上调整参数的程度。
如果对于较大的批量大小 (N),您的梯度较大,则意味着您需要在增加批量大小 (N) 时调整学习率。
在实践中,为了保持这两者(学习率和批量大小)独立,通常使用平均值而不是总和。这使得梯度大小与 N 无关。
如果您不使用批处理,则 N=1 并且平均值与总和相同。
关于python - 对数似然成本函数 : mean or sum?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35667330/