可以为逻辑回归定义自己的成本函数吗?
Posted
技术标签:
【中文标题】可以为逻辑回归定义自己的成本函数吗?【英文标题】:Is it ok to define your own cost function for logistic regression? 【发布时间】:2012-08-22 21:06:41 【问题描述】:在最小二乘模型中,成本函数定义为作为输入函数的预测值与实际值之差的平方。
在进行逻辑回归时,我们将成本函数更改为对数函数,而不是将其定义为 sigmoid 函数(输出值)与实际输出之差的平方。
是否可以改变和定义我们自己的成本函数来确定参数?
【问题讨论】:
不是那么简单,逻辑回归有许多可能的链接函数,而不仅仅是规范的 logit 函数。我建议阅读广义线性模型背后的一些理论en.wikipedia.org/wiki/Generalised_linear_model 如果您在输入 $x$ 是标量的非常特殊的情况下继续构建二次损失函数,那么您的成本函数变为:$C(w,b):= \Sigma_ x | y(x) - \haty(x)|^2=\Sigma_x | y(x) - \sigma(wx+b)|^2$。现在如果你尝试对其应用梯度下降,你会看到:$C'(x)$ 是 $\sigma'(wx+b)$ 的倍数。现在,sigmoid 函数是渐近的,当输出 $\sigma(z)$ 接近 $0$ 或 $1$ 时,它的导数 $\sigma'(z)$ 几乎为零。这意味着:当学习不好时,例如$\sigma(wx+b)\约0$,但$y(x)=1$,则$C'(w), C'(b)\约0$。 (续) 【参考方案1】:使用逻辑函数、铰链损失、平滑铰链损失等,因为它们是零一二分类损失的上限。
这些函数通常也会对分类正确但仍靠近决策边界的示例进行惩罚,从而创建“边缘”。
所以,如果你在做二元分类,那么你当然应该选择标准的损失函数。
如果您尝试解决不同的问题,那么不同的损失函数可能会表现得更好。
【讨论】:
【参考方案2】:是的,您可以定义自己的损失函数,但如果您是新手,最好使用文献中的一个。损失函数应该满足一些条件:
它们应该近似于您试图最小化的实际损失。正如在另一个答案中所说,分类的标准损失函数是零一损失(错误分类率),用于训练分类器的损失函数是该损失的近似值。
没有使用线性回归的平方误差损失,因为它不能很好地近似零一损失:当您的模型预测某个样本的 +50 而预期的答案是 +1(正类)时,预测在决策边界的正确一侧,因此零一损失为零,但平方误差损失仍然是 49² = 2401。一些训练算法会浪费大量时间来获得非常接近 -1, +1 而不是只关注正确的标志/类别标签。(*)
损失函数应该适用于您预期的优化算法。这就是为什么不直接使用零一损失的原因:它不适用于基于梯度的优化方法,因为它没有明确定义的梯度(甚至是 subgradient,就像 SVM 的铰链损失一样) .
直接优化零一损失的主要算法是老的perceptron algorithm。
此外,当您插入自定义损失函数时,您不再构建逻辑回归模型,而是构建其他类型的线性分类器。
(*) 平方误差 与线性判别分析一起使用,但这通常以封闭形式而不是迭代来解决。
【讨论】:
关于第 1 点,在逻辑回归中,模型永远无法预测 +50,因为输出由逻辑函数缩放,将输入限制为 (0,1)。【参考方案3】:是的,可以使用其他成本函数来确定参数。
平方误差函数(线性回归常用的函数)不太适合逻辑回归。
在逻辑回归的情况下,假设是非线性的(sigmoid 函数),这使得平方误差函数是非凸的。
对数函数是一个没有局部最优值的凸函数,所以梯度下降效果很好。
【讨论】:
【参考方案4】:你不选择损失函数,你选择模型
当您使用最大似然估计 (MLE) 拟合参数时,损失函数通常由模型直接确定,这是机器学习中最流行的方法。
您提到了均方误差作为线性回归的损失函数。然后“我们将成本函数更改为对数函数”,指的是交叉熵损失。我们没有改变成本函数。实际上,当我们假设y
服从正态分布的高斯分布时,均方误差是线性回归的交叉熵损失,其均值由Wx + b
定义。
说明
使用 MLE,您可以选择参数,以使训练数据的可能性最大化。整个训练数据集的可能性是每个训练样本的可能性的乘积。因为这可能下溢为零,所以我们通常最大化训练数据的对数似然/最小化负对数似然。因此,成本函数变为每个训练样本的负对数似然之和,由下式给出:
-log(p(y | x; w))
其中 w 是我们模型的参数(包括偏差)。现在,对于逻辑回归,这就是您提到的对数。但是声称这也对应于线性回归的 MSE 呢?
示例
为了显示 MSE 对应于交叉熵,我们假设 y
正态分布在平均值附近,我们使用 w^T x + b
进行预测。我们还假设它有一个固定的方差,所以我们不用线性回归预测方差,只预测高斯的平均值。
p(y | x; w) = N(y; w^T x + b, 1)
你可以看到mean = w^T x + b
和variance = 1
现在,损失函数对应于
-log N(y; w^T x + b, 1)
如果我们看一下高斯N
是如何定义的,我们会看到:
现在,取它的负对数。这导致:
我们选择了 1 的固定方差。这使第一项保持不变,并将第二项减少为:
0.5 (y - mean)^2
现在,请记住我们将平均值定义为 w^T x + b
。由于第一项是常数,最小化高斯的负对数对应于最小化
(y - w^T x + b)^2
这对应于最小化均方误差。
【讨论】:
【参考方案5】:假设在您的逻辑回归模型中,您有标量输入 x,并且模型为每个输入样本 x 输出概率 $\haty(x)=sigma(wx+b)$。如果您继续在输入 $x$ 是标量的非常特殊的情况下构建二次损失函数,那么您的成本函数变为: $C(w,b):= \Sigma_x | y(x) - \haty(x)|^2=\Sigma_x | y(x) - \sigma(wx+b)|^2$。现在如果你尝试对其应用梯度下降,你会看到:$C'(w), C'(b)$ 是 $\sigma'(wx+b)$ 的倍数。现在,sigmoid 函数是渐近的,当输出 $\sigma(z)$ 接近 $0$ 或 $1$ 时,它的导数 $\sigma'(z)$ 几乎为零。这意味着:当学习不好时,例如$\sigma(wx+b)\约0$,但$y(x)=1$,则$C'(w), C'(b)\约0$。
现在,从两个角度来看,上述情况很糟糕:(1) 它使梯度下降在数值上变得更加昂贵,因为即使我们离最小化 C(w,b) 还很远,我们的收敛速度也不够快,并且(2) 与人类学习有悖常理:当我们犯了大错时,我们学得很快。
但是,如果您计算交叉熵成本函数的 C'(w) 和 C'(b),则不会出现此问题,因为与二次成本的导数不同,交叉熵成本的导数不是$sigma'(wx+b)$ 的倍数,因此当逻辑回归模型输出接近 0 或 1 时,梯度下降不一定会减慢,因此收敛到最小值的速度会更快。您可以在这里找到相关讨论:http://neuralnetworksanddeeplearning.com/chap3.html,我强烈推荐的优秀在线书籍!
此外,交叉熵成本函数只是用于估计模型参数的最大似然函数 (MLE) 的负对数,实际上在线性回归的情况下,最小化二次成本函数相当于最大化 MLE,或者等效地,最小化 MLE=cross entropy 的负对数,并使用线性回归的基本模型假设 - 有关更多详细信息,请参见 http://cs229.stanford.edu/notes/cs229-notes1.pdf 的第 12 页。因此,对于任何机器学习模型,无论是分类还是回归,通过最大化 MLE(或最小化交叉熵)来找到参数具有统计意义,而最小化逻辑回归的二次成本没有任何意义(尽管它对于线性回归,如前所述)。
我希望它能澄清一些事情!
【讨论】:
【参考方案6】:我想说,均方误差的数学基础是误差的高斯分布,而对于逻辑回归,它是两个分布的距离:基础(基本事实)分布和预测分布。
我们如何测量两个分布之间的距离?在信息论中,它是相对熵(也称为KL散度),相对熵is equivalent to交叉熵。而逻辑回归函数是softmax regression的一个特例,相当于交叉熵和maximum entropy。
【讨论】:
以上是关于可以为逻辑回归定义自己的成本函数吗?的主要内容,如果未能解决你的问题,请参考以下文章