机器学习中,针对不同的问题选用不同的损失函数非常重要,而均方误差就是最基本,也是在解决回归问题时最常用的损失函数。本文就keras模块均方误差的计算梳理了一些细节。
首先看一下均方误差的数学定义 :
均方误差是预测向量与真实向量差值的平方然后求平均,其中n为两个向量所包含的元素的个数。
MSE=1n∑i=1n(Yi−Y^i)2MSE = \frac{1}{n}\sum_{i=1}^n(Y_i - \hat Y_i)^2MSE=n1i=1∑n(Yi−Y^i)2
需要注意的是,我们发现在上述定义中,真实值与预测值都是两个向量。下面以一个小例子来说明keras中的均方误差计算。
以keras源代码中的注释为例,在选择默认reduction type 为 auto/sum_over_batch_size时,计算结果为(1+1)/ 4 = 0.5
y_true = [[0., 1.], [0., 0.]]
y_pred = [[1., 1.], [1., 0.]]
# Using 'auto'/'sum_over_batch_size' reduction type.
mse = tf.keras.losses.MeanSquaredError()
mse(y_true, y_pred).numpy()0.5
例如,在一类线性回归问题中,输出为一个包含a个元素的向量,对于每一个batch,我们计算一次均方误差。此时输入和输出的均为 (batch_size,a)的矩阵,此时的均方误差计算实际上是针对flatten平铺后的两个向量进行运算的,即n = batch_size * a,计算出的均方误差仍然是一个一维的数值,表示了每个元素的平均误差。