逻辑回归为什么使用交叉熵而不用均方差?

这篇具有很好参考价值的文章主要介绍了逻辑回归为什么使用交叉熵而不用均方差?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。



逻辑回归为什么使用交叉熵而不用均方差?或者说逻辑回归的损失函数为什么不用最小二乘?

下面主要从两个角度进行阐述:

  • 从逻辑回归的角度出发,逻辑回归的预测值是一个概率,而交叉熵又表示真实概率分布与预测概率分布的相似程度,因此选择使用交叉熵
  • 从均方差(MSE)的角度来说,预测值概率与欧式距离没有任何关系,并且在分类问题中,样本的值不存在大小比较关系,与欧式距离更无关系,因此不适用MSE

1、损失函数的凸性(使用MSE可能会陷入局部最优)

前面我们在介绍线性回归时,我们用到的损失函数是误差(残差)平方和

L = ∑ i = 1 m ( y i − y ^ i ) 2 = ∑ i = 1 m ( y i − x i ω ) 2 L=\sum_{i=1}^m(y_i-\hat y_i)^2=\sum_{i=1}^m(y_i-x_i\omega)^2 L=i=1m(yiy^i)2=i=1m(yixiω)2

这是一个凸函数,有全局最优解

如果逻辑回归也使用误差平方和,由于逻辑回归假设函数的外层函数是Sigmoid函数,Sigmoid函数是一个复杂的非线性函数,这就使得我们将逻辑回归的假设函数代入上式时,即
L = ∑ i = 1 m ( y i − 1 1 + e − x i ω ) 2 L=\sum_{i=1}^m\left(y_i-\frac{1}{1+e^{-x_i\omega}}\right)^2 L=i=1m(yi1+exiω1)2

那么,我们得到的 L L L是一个非凸函数,不易优化,容易陷入局部最优解。所以逻辑回归的损失函数使用的是对数损失函数(Log Loss Function)

在逻辑回归(详见:传送门)一文中,我们已经给出了KL散度与交叉熵的关系
交叉熵 = K L 散度 + 信息熵 交叉熵=KL散度+信息熵 交叉熵=KL散度+信息熵

即交叉熵等于KL散度加上信息熵。而信息熵是一个常数,并且在计算的时候,交叉熵相较于KL散度更容易,所以我们直接使用了交叉熵作为损失函数

因此,我们在最小化交叉熵的时候,实际上就是在最小化 KL散度,也就是在让预测概率分布尽可能地与真实概率分布相似

2、MSE的损失小于交叉熵的损失(导致对分类错误点的惩罚不够)

逻辑回归的数学表达式如下
h θ ( x ) = g ( θ T x ) = 1 1 + e − θ T x h_\theta(x)=\rm g(\theta^Tx)=\frac{1}{1+e^{-\theta^Tx}} hθ(x)=g(θTx)=1+eθTx1

对于一元逻辑回归,其预测值为
y ^ = σ ( ω x + b ) \hat y = \sigma(\omega x+b) y^=σ(ωx+b)

其中, σ \sigma σSigmoid函数

如果使用均方差作为损失函数,我们以一个样本为例,为方便计算,我们给均方差除以2(不改变函数的单调性)
C = 1 2 ( y − y ^ ) 2 C=\frac{1}{2}(y-\hat y)^2 C=21(yy^)2

其中 y ^ \hat y y^= σ ( z ) \sigma(z) σ(z)= 1 1 + e − z \frac{1}{1+e^{-z}} 1+ez1 z z z= ω x + b \omega x+b ωx+b,使用梯度下降法对 ω \omega ω进行更新,那么就需要将损失函数对 ω \omega ω进行求偏导数
∂ C ∂ ω = ( y − y ^ ) σ ′ ( z ) x = ( y − y ^ ) y ^ ( 1 − y ^ ) x \frac{\partial C}{\partial \omega}=(y-\hat y)\sigma'(z)x=(y-\hat y)\hat y(1-\hat y)x ωC=(yy^)σ(z)x=(yy^)y^(1y^)x

具体计算过程可参考如下或文末参考文章

逻辑回归为什么使用交叉熵而不用均方差?,# 人工智能与机器学习,基础理论,逻辑回归,机器学习

可以看到,均方差损失函数的梯度与激活函数(Sigmoid函数)的梯度成正比,当预测值接近于1或0时,梯度会变得非常小,几乎接近于0,这样会导致当真实值与预测值差距很大时,损失函数收敛的很慢,无法进行有效学习,与我们的期望不符合

因此,如果使用均方差损失,训练的时候可能看到的情况是预测值和真实值之间的差距越大,参数调整的越小,训练的越慢

如果使用交叉熵作为损失函数,对于二分类问题,交叉熵的形式是由极大似然估计下概率的连乘然后取对数得到的(推导见文章:传送门)
C = − [ y ln ⁡ y ^ + ( 1 − y ) ln ⁡ ( 1 − y ^ ) ] C=-[y\ln \hat y +(1-y)\ln (1-\hat y)] C=[ylny^+(1y)ln(1y^)]

关于 ω \omega ω求偏导数得
∂ C ∂ ω = ( σ ( z ) − y ) x \frac{\partial C}{\partial \omega}=(\sigma(z)-y)x ωC=(σ(z)y)x

可以看到,交叉熵损失函数的梯度和当前预测值与真实值之间的差是有关的,没有受到Sigmoid函数的梯度的影响,且真实值与预测值的差越大,损失函数的梯度就越大,更新的速度也就越快,这正是我们想要的



参考文章:https://zhuanlan.zhihu.com/p/453411383?login=from_csdn文章来源地址https://www.toymoban.com/news/detail-832871.html


到了这里,关于逻辑回归为什么使用交叉熵而不用均方差?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 为什么不用Go开发操作系统?

      操作系统 (OS) 是计算机系统的心脏和灵魂,它管理着计算机的硬件和软件资源,并为用户提供与计算机交互的方式。传统上,C 和 Assembly 等语言因其低开销和 “接近机器码” 的特性而被用于开发操作系统。 但诸如 Go 等高级语言的兴起引入了一些特性,这些特性或许可以使

    2024年02月06日
    浏览(57)
  • 记录--为什么推荐用svg而不用icon?

    使用背景: 1.因为svg图标在任何设备下都可以高清显示,不会模糊。而icon会在显卡比较低的电脑上有显示模糊的情况 2.svg图标在页面render时 速度会比icon稍微快一点 3.实现小程序换肤功能 ;方案见:www.yuque.com/lufeilizhix… SVG基础可参考:www.yuque.com/lufeilizhix… inline svg是目前前

    2024年02月08日
    浏览(50)
  • SpringBoot有的时候引入依赖为什么不用加版本号

    有的小伙伴做项目时候,引入新的包时候,会有疑问,为什么有些依赖需要加版本号,有些依赖不需要加版本号?不加版本号的依赖,版本号都写在哪里了呢? 内置的依赖可以不加版本号 这是因为SpringBoot内置了很多依赖,引入这些内置的依赖时不需要加版本号,相反,如果

    2024年01月19日
    浏览(64)
  • 游戏引擎中为什么要用四元数表示旋转而不用欧拉角旋转?

    个人观点,仅供参考,如有错误可太刺激了 四元数的简单概念和使用 欧拉角通常用于表示一个物体的 旋转状态 ,而不是表示 旋转过程 。 欧拉角描述的是物体相对于某个参考坐标系的朝向或旋转状态,通常以不同的轴(例如,绕X轴、Y轴和Z轴)的旋转角度来表示。这可以让

    2024年02月06日
    浏览(54)
  • 为什么很多程序员不用switch,而是大量 的if......else if?

    不会吧还有人用if else和switch case?三目运算符? 不会吧? 不会吧?大佬都是全都不用的!以JAVA为例 条件判断语句的四种写法,茴字的四种写法大家不会不知道吧 1.正常人写法: //输出 :张三应该去男厕所 2.Lambda策略模式写法: 某些大公司P6级别以上(年薪30w-50w)标准写法

    2024年02月15日
    浏览(51)
  • 为什么网线接法要分交叉连接和直连连接两种方式

    水晶头有两种连接方式T568A和T568B。网线的两头都使用同一标准连接就是直连线,两头使用不同的标准就是交叉线。 ** ** 如下图所示: 电脑连接路由器等其他设备的时候需要使用直连线。 相同设备使用交叉线,比如路由器和路由器之间,电脑和电脑之间。 结论:简单理解就是

    2024年02月05日
    浏览(51)
  • 表单的总数据为什么可以写成一个空对象,不用具体的写表单中绑定的值,vue3

      from为空对象  在v-model里写form.name,其实就是在form这个空对象里添加了一个键名为name的成员,你不用在script标签的form对象里面特意写name属性。

    2024年01月23日
    浏览(64)
  • 为什么要使用卷积

    1. 卷积这个名词是怎么解释?“卷”是什么意思?“积”又是什么意思? 卷积的“卷”,指的的函数的翻转,从  g(t)  变成  g(-t)  的这个过程;同时,“卷”还有滑动的意味在里面(吸取了网友李文清的建议)。如果把卷积翻译为“褶积”,那么这个“褶”字就只有翻转的

    2024年02月09日
    浏览(43)
  • 为什么使用AutoMapper

    类库

    2024年02月14日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包