python - 对数似然成本函数 : mean or sum?

标签 python machine-learning neural-network classification theano

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/

相关文章:

python - 通过 conda (conda-forge opencv) 安装 cv2 依赖项的 setup.py

javascript - 当选项值存在于选择中时,为什么元素不可交互?

python - 如何忽略某些警告,而其他警告则从 Python 命令行转向异常?

machine-learning - 机器学习,为什么我们需要对数据进行加权

python-2.7 - 用于 svm 的机器学习网格搜索

machine-learning - 理解pycaffe中的load_image()方法

python - Pandas :更改具有多级列的数据框中的特定列名

python - 如何获得训练集和验证集的不同指标?

tensorflow - 生成对抗网络tanh?

neural-network - Keras ImageDataGenerator 慢