我们为什么这样选择损失函数

本文探讨了损失函数的选择与信息论的关系,特别是在深度学习中如何利用KL散度理解最小化损失函数的本质。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们为什么这样选择损失函数


这个问题深度学习中的 “圣经” 花书中进行阐述,这里做一个简单的总结和自己的思考。

先从信息熵开始说起

  • 信息论的基本想法是一个不太可能发现的事件居然发生了,要比一个非常可能的事件发生,能提供更多的信息。例如,消息说: “今天早上太阳照常升起”,信息量是如此的少,以至于没有必要发送;但一条信息说:“今天早上有日食”,信息量就很丰富了。
  • 我们想通过这种基本想法来量化信息,特别是:
    • 非常可能发生的事件信息量比较少,并且在极端条件下,一定能够发生的事件应该没有任何信息量
    • 较不可能发生的事件具有更高的信息量
    • 独立事件应具有增量的信息。例如,投掷的硬币两次正面朝上传递的信息量,应该是投掷一次硬币正面朝上的信息的两倍
  • 为了满足上述 3 个性质,我们定义了一个事件 x=x x = x 自信息(Self-information):
    I(x)=logP(x)(1) (1) I ( x ) = − log ⁡ P ( x )
  • 自信息只处理单个信息。我们用香农熵(Shannon Entropy,也叫信息熵)来量化事件的整个概率分布,它的定义为:

    H(x)=ExP[I(x)]=ExP[logP(x)](2) (2) H ( x ) = E x ∼ P [ I ( x ) ] = − E x ∼ P [ log ⁡ P ( x ) ]

    举个例子来感性认知下信息熵。假设你想通过身高来预测体重,于是你去收集了身高以及对应的体重,通过分析你发现,当身高一样时,体重是符合高斯分布的。比如,身高170cm,有的65kg,有的人70kg,有的人60kg,虽然体重各有不同,但是基本满足均值 μ1=65 μ 1 = 65 ,方差为 σ1 σ 1 的高斯分布。通过信息熵的计算公式,我们可以计算得到,当体重 xN(x;μ1;σ1) x ∼ N ( x ; μ 1 ; σ 1 ) 时, H(x)=log(σ2πe) H ( x ) = log ⁡ ( σ 2 π e ) 。(想知道怎么算吗?请看 这里。什么?只想知道结果?请看 这里

  • 接下来是相对熵,或者说 K-L 散度,它衡量了两个分布之间的差异,它的定义如下,其中 P(x) P ( x ) Q(x) Q ( x ) 是两个独立的概率分布

    DKL(PQ)=ExP[logP(x)Q(x)]=ExP[logP(x)logQ(x)](3) (3) D K L ( P ‖ Q ) = E x ∼ P [ log ⁡ P ( x ) Q ( x ) ] = E x ∼ P [ log ⁡ P ( x ) − log ⁡ Q ( x ) ]

    emmmm,我知道这有点抽象,没关系我们继续看例子。同样的,你想通过身高来预测体重,你收集完中国人的数据,于是你就去收集美国人的数据,结果你发现,美国人在身高相同的情况下,体重分布也满足高斯分布,但是均值 μ=70 μ = 70 ,方差为 σ2 σ 2 。那么很明显,如果你只是用中国人的数据训练了一个模型,然后用这个模型去预测美国人的体重这是不正确的,这种 “不正确” 的量化,我们可以用散度来表示。例如,两个高斯分布的散度是:
    KL(P,Q)=logσ1σ2+σ21+(μ1μ2)22σ2212(4) (4) K L ( P , Q ) = log ⁡ σ 1 σ 2 + σ 1 2 + ( μ 1 − μ 2 ) 2 2 σ 2 2 − 1 2

    想知道怎么算吗?这里这里 或者 这里。回头看这里式子,如果 μ1=μ2,σ1=σ2 μ 1 = μ 2 , σ 1 = σ 2 ,那么 KL(P,Q)=0 K L ( P , Q ) = 0 ,因为P、Q分布是一样的。

Loss 函数与 KL 散度之间的关系

  • 深度学习(或者其他的机器学习方法)的训练流程通常是

    1. 定义 Loss 函数
    2. 梯度下降法最小化 Loss 值

    例如回归问题中,我们常用 L2 作为 Loss 函数,为什么选择 L2 呢?以前都没有思考过,或者说,这有什么好思考的!书上,教程上都是这么用的。那么今天我们就来好好的思考思考,学过了 KL 散度,我们可以从这个角度进行阐述。

  • 先说结论:最小化 Loss 值的过程,其实就是最小化 KL 散度的过程。为了更清楚的说明,我们以用身高预测体重为例。首先定义符号, x x 表示身高,y表示体重, θ θ 表示概率分布的参数(例如高斯模型中的 μ μ σ σ ), pmodel(y|x;θ) p m o d e l ( y | x ; θ ) 表示身高为 x x 时,体重为y的概率。例如 pmodel(65|173;θ)=0.6 p m o d e l ( 65 | 173 ; θ ) = 0.6 表示 身高 173 时,体重为 65 的概率为 0.6。

  • 我们希望 pmodel(y|x;θ)pdata(y|x) p m o d e l ( y | x ; θ ) ≈ p d a t a ( y | x ) ,其中 pdata p d a t a 就是训练集的分布。衡量两个分布的距离恰好可以用 KL 散度来表示,因此:

    minDKL(pdatapmodel)=minExpdata[logpdata(y|x)logpmodel(y|x;θ)](14) (14) min D K L ( p d a t a ‖ p m o d e l ) = min E x ∼ p d a t a [ log ⁡ p d a t a ( y | x ) − log ⁡ p m o d e l ( y | x ; θ ) ]

    左边一项仅涉及数据生成过程,和模型无关。这意味着在最小化 KL 时,我们只需要最小化
    minExpdata[logpmodel(y|x;θ)](15) (15) min − E x ∼ p d a t a [ log ⁡ p m o d e l ( y | x ; θ ) ]

  • 如果我们假设 pmodel(y|x)=N(y;y^(x;w),σ2) p m o d e l ( y | x ) = N ( y ; y ^ ( x ; w ) , σ 2 ) ,其中 y^(x;w) y ^ ( x ; w ) 表示输入为x,模型参数为 w w 的情况下,模型的输出(终于引入了模型参数,注意这里的模型参数与上述的分布参数θ是两回事),根据这个假设,那么有

Expdata[logpmodel(y|x;θ)]=mi=1p(xi)logpmodel(yi|xi;θ)=mi=1logpmodel(yi|xi;θ)=mi=1log(12πσ2exp((y(i)y^(i))22σ2))=mlogσ+m2log(2π)+mi=1(y(i)y^(i))22σ2(7) (7) − E x ∼ p d a t a [ log ⁡ p m o d e l ( y | x ; θ ) ] = − ∑ i = 1 m p ( x i ) log ⁡ p m o d e l ( y i | x i ; θ ) = − ∑ i = 1 m log ⁡ p m o d e l ( y i | x i ; θ ) = − ∑ i = 1 m log ⁡ ( 1 2 π σ 2 exp ⁡ ( − ( y ( i ) − y ^ ( i ) ) 2 2 σ 2 ) ) = m log ⁡ σ + m 2 log ⁡ ( 2 π ) + ∑ i = 1 m ( y ( i ) − y ^ ( i ) ) 2 2 σ 2

  • 其中 p(xi)=1 p ( x i ) = 1 (因为 xi x i 已经出现在训练集中,因此 p(xi)=1 p ( x i ) = 1 ,这样的解释对吗?)。式子(7)前面两项与参数 w w 无关,因此在求导时,这两项无关。因此,对比 L2 损失函数和式子(7)的最后一项,我们立刻可以看出,最小化 KL 散度和最小化均方差会得到相同的模型参数。但是对于相同最优的 w,式子(8)的值与 L2 的值是不同的。
  • 通过上述的分析,我们知道我们在选择一个 Loss 作为最小化目标的时候,就对样本的分布做出了假设。例如,选择 L2 时,假设样本是高斯分布;选择 L1 时,假设样本是拉普拉斯分布;选择 binary cross entropy 时,假设样本是 Bernoulli 分布;选择 categorical cross entropy 时,假设样本是 Multinoulli 分布。然后通过最小化 Loss,使得模型概率分布接近数据的概率分布,即最小化 KL散度。
  • 但是正确的思考方式应该是:

    1. 首先假设样本的概率分布
    2. 根据分布概率,选择 Loss 函数
    3. 训练模型

    通常情况下,我们直接从第二步开始,而忽略了第一步,当然也无伤大雅,因为前人们已经帮我们总结了常见问题的概率分布,已经提出合适 Loss 函数。

其他

  • 花书的第五章用最大似然法来解释模型训练的目的,得到的结论是类似的:最大化关于 w w 的对数似然数和最小化 Loss 会得到相同的参数估计。然后,最大似然法又可以用 KL 散度的角度来解释,非常的神奇。
  • 在花书6.2.1.2中,用变分法对代价函数做出了更为具体的解释:用 L2 作为代价函数,所有可行解的均值;用 L1 作为代价函数,所有可行解的中位数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值