首页 文章详情

AI 面试高频问题: 为什么二分类不用 MSE 损失函数?

机器学习与数学 | 4937 2020-08-31 12:48 0 0 1
UniSMS (合一短信)

 由于微信改了推送规则,请加星标,多点赞和在看,以便第一时间收到推送。 

〄机器学习与数学


对于二分类问题,损失函数不采用均方误差(Mean Squared Error,MSE)至少可以从两个角度来分析。

1从数据分布角度

首先,使用 MSE 意味着假设数据采样误差是遵循正态分布的。用贝叶斯门派的观点来看,意味着作了高斯先验的假设。实际上,可以分为两类(即二分类)的数据集是遵循伯努利分布。

如果假设误差遵循正态分布,并使用最大似然估计(Maximum Likelihood Estimation,MLE)我们将得出 MSE 正是用于优化模型的损失函数。

首先,正态/高斯分布 由两个参数 定义,

〄 正态分布示例。

训练数据 包括特征 和实际观测值 。简单来说,每当我们采样数据时,观测值有时会与真实值相匹配,有时观测值会因某些误差而失真。我们假设所有观测到的数据都带有一定的误差(即 ,并且误差遵循均值为 ,方差未知的正态分布。

我们可以这样来看,实际观测值 通常围绕待预测的目标值 呈正态分布。

〄 观测值相对目标值呈正态分布。

因此,每个观测值 可以由如下正态分布定义,

假设数据是独立同分布的,因此使用最大似然估计时,只要最大化所有观测值误差正态分布的乘积。即似然函数为,

为了简化公式,可以采用似然函数的自然对数,

上式倒数第二行的第一项是独立于 ,因此可以直接省略掉。而最大化一个函数等价于最小化该函数的负值,可得,

由于方差 也不依赖于 ,因此可以忽略它,甚至也可以忽略 ,但是也可以保留它,因为它可以消除掉求导后多出来的 2。

最后,我们可以通过 是样本数量)缩放负对数似然函数,以获得所谓的均方误差损失函数,

以上是通过 MLE 得到 MSE 的推导过程。这是想说明,使用 MSE 损失函数的背景假设是数据误差遵循高斯分布。实际上,二分类问题并不符合这个假设。

2从优化角度

其次,MSE 函数对于二分类问题来说是非凸的。简而言之,如果使用 MSE 损失函数训练二分类模型,则不能保证将损失函数最小化。这是因为 MSE 函数期望实数输入在范围 中,而二分类模型通过 Sigmoid 函数输出范围为 的概率。

当将一个无界的值传递给 MSE 函数时,在目标值 处有一个明确最小值的情况下,会形成一条漂亮的 U 形(凸)曲线。另一方面,当将来自 Sigmoid 等函数的有界值传递给 MSE 函数时,可能会导致结果并不是凸的。

〄 当与 Sigmoid/Logistic 函数复合时,MSE 会呈现非凸性。

看上面右边的图,函数的一侧是凹的,而另一侧是凸的,没有明确的最小值点。因此,如果在初始化二分类神经网络权重时,权值万一设置得很大,使其落在 MSE 凹的那一侧(如下图红色标记的点),由于梯度几乎为 ,损失函数梯度下降法将不起作用,因此网络权重可能得不到更新或改善得非常缓慢。这也是训练时应采用小值来初始化神经网络的原因之一。

〄 当使用 Sigmoid/Logistic 函数的输出时,MSE 函数的一侧是凸的,而另一侧是凹的。

为什么是这样呢?让我们把 Sigmoid 函数代进去看看,

此时求导会多一个因子,就是 函数的导数。我们直接看一下这个导数的函数曲线。如下图所示,是不是两侧很大范围几乎是 呢。

说句题外话,当我们进行线性回归(即通过直线拟合数据)时,选用 MSE 作为损失函数是一个不错的选择。在没有关于数据的分布知识的情况下,假设高斯分布通常是可行的。

3有更好选择

假如没有更好的选择,那么在权重初始化方面做做工作,MSE 也能凑合着用。但实际上,确实存在更好的选择,那就是交叉熵。戳这里可以温习一下本号关于交叉熵的图解介绍。至于为什么交叉熵在这个问题上好使,且听下回分解。

⟳参考资料⟲

[1]

正态分布: https://en.wikipedia.org/wiki/Normal_distribution

[2]

Sigmoid: https://en.wikipedia.org/wiki/Sigmoid_function

[3]

Rafay Khan: https://towardsdatascience.com/why-using-mean-squared-error-mse-cost-function-for-binary-classification-is-a-bad-idea-933089e90df7


good-icon 0
favorite-icon 1
收藏
回复数量: 0
    暂无评论~~
    Ctrl+Enter