对数似然成本函数:平均值还是总和?
log-likelihood cost function: mean or sum?
在 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 的 Pattern Recognition and Machine Learning),负对数似然是通过使用 sum[=每个样本误差的 23=] 而不是 均值 。我仍然不明白作者的注释。每次我们计算成本函数时,我们应该使用均值而不是总和吗?即使我们不使用批处理?
均值与和的差值就是乘以1/N。
使用总和的问题是批量大小 (N) 会影响梯度。学习率表示您要在梯度方向上调整参数的程度。
如果批量大小 (N) 越大,梯度越大,这意味着您需要在增加批量大小 (N) 时调整学习率。
在实践中,为了保持这两个(学习率和批量大小)独立,通常使用均值而不是总和。这使得梯度幅度独立于 N.
如果不使用batch,则N=1,均值与总和相同。
考虑两种情况,当你想改变你的算法的批量大小时,假设从 10 到 100:
如果您使用的是对数似然成本函数的总和,则您所采取的平均步长将乘以 10(因为总和将有 10 倍以上的项),然后您将必须重新调整学习率
如果你用的是均值,那么这个结果除以100而不是10,你的步数自然是同一个数量级
所以,如果您不使用小批量或调整批量大小,请不要担心这个
在 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 的 Pattern Recognition and Machine Learning),负对数似然是通过使用 sum[=每个样本误差的 23=] 而不是 均值 。我仍然不明白作者的注释。每次我们计算成本函数时,我们应该使用均值而不是总和吗?即使我们不使用批处理?
均值与和的差值就是乘以1/N。
使用总和的问题是批量大小 (N) 会影响梯度。学习率表示您要在梯度方向上调整参数的程度。
如果批量大小 (N) 越大,梯度越大,这意味着您需要在增加批量大小 (N) 时调整学习率。
在实践中,为了保持这两个(学习率和批量大小)独立,通常使用均值而不是总和。这使得梯度幅度独立于 N.
如果不使用batch,则N=1,均值与总和相同。
考虑两种情况,当你想改变你的算法的批量大小时,假设从 10 到 100:
如果您使用的是对数似然成本函数的总和,则您所采取的平均步长将乘以 10(因为总和将有 10 倍以上的项),然后您将必须重新调整学习率
如果你用的是均值,那么这个结果除以100而不是10,你的步数自然是同一个数量级
所以,如果您不使用小批量或调整批量大小,请不要担心这个