我的特征向量大小为1×4098,每个特征向量对应一个浮点数(温度)。在训练中,我有10,000个样本。因此,我的训练集大小为10000×4098,标签为10000×1。我想使用线性回归模型从训练数据中预测温度。我使用了3个隐藏层(512, 128, 32),并使用MSE损失函数。然而,使用TensorFlow时,我只得到了80%的准确率。你能建议我使用其他损失函数来获得更好的表现吗?
回答:
让我从理论上解释一下选择损失函数的依据。正如你可能猜到的,这一切都取决于数据。
MSE有一个很好的概率解释:它对应于在假设分布p(y|x)
为高斯分布时的最大似然估计(MLE):p(y|x) ~ N(mu, sigma)
。由于MLE会收敛到真实参数值,这意味着在这一假设下,所找到的最小值很可能是你能得到的最佳拟合。当然,你可能找到的是局部最小值而不是全局最小值,还有一个隐含的假设,即你的训练数据很好地代表了x
的分布。但这种不确定性是不可避免的,所以现实中我们只能接受它。
继续讨论,L1损失(绝对差值)的最小化等同于在假设p(y|x)
服从拉普拉斯分布时的MLE最大化。这里得出同样的结论:如果数据符合这一分布,那么没有其他损失函数会比L1损失更好。
Huber损失没有严格的概率解释(至少我不知道),它介于L1和L2之间,根据delta
的选择更接近其中一个或另一个。
这如何帮助你找到正确的损失函数?首先,这意味着没有一种损失函数在默认情况下优于其他。其次,你对数据的理解越好,你就越能确定你选择的损失函数是正确的。当然,你可以交叉验证所有这些选项并选择最佳的一个。但这里有一个很好的理由来进行这种分析:当你对数据分布有信心时,你会看到随着增加新的训练数据和增加模型复杂性,表现会稳步提升。否则,模型可能永远无法泛化。