【数理统计】最大似然估计与交叉熵

最大似然估计

什么是参数估计?假设我们有一个映射函数 f θ f_\theta fθ可以将输入 X ∈ R n X\in R^n XRn映射到一个概率,其中 θ \theta θ是映射函数的参数,未知待求解。现在我们有一组采样值 { X i } \{X_i\} {Xi},诉求是通过这些采样值估计一下映射函数的参数,本质上呢就是根据采样值得到随机变量 X X X的联合分布。常用的方法有矩估计法、最大似然估计,而最大似然估计在机器学习中很常见,值得学习一下。

最大似然,字面意思上理解就是“最像那么回事的”。我们不妨将映射函数记为 f ( X , θ ) f(X,\theta) f(X,θ)。根据第i个样本 X i X_i Xi可以得到一个输出 f θ ( X i ) f_\theta(X_i) fθ(Xi),我们可以理解为在这一次采样中可以得到那么多值,但我们恰恰得到了 X i X_i Xi,翻译翻译就是得到 X i X_i Xi样本的概率很大啊。在这个想法的基础上,我们把 θ \theta θ作为变量,从样本 X i X_i Xi这一采样结果,我们得到的信息是, θ \theta θ应该使 f ( X i , θ ) f(X_i,\theta) f(Xi,θ)最大(函数将输入映射为概率,应该找一组参数使概率最大)。现在我们有N个采样,将其N个概率乘起来得到了似然函数: L θ = ∏ i f ( X i , θ ) L_\theta=\prod_i f(X_i,\theta) Lθ=if(Xi,θ),最大似然估计就是求一组参数 θ ^ \hat\theta θ^,使似然函数最大:
θ ^ = arg max ⁡ θ L θ = arg max ⁡ θ ∏ i f ( X i , θ ) \hat\theta = \argmax_{\theta}L_\theta= \argmax_{\theta}\prod_i f(X_i,\theta) θ^=θargmaxLθ=θargmaxif(Xi,θ)

现将问题转换到二分类问题中,将映射函数的输出记为 Y Y Y,可以是分类问题中的标签0和1,采样结果为 { ( X i , Y i ) } \{(X_i,Y_i)\} {(Xi,Yi)}。当 Y i = 1 Y_i=1 Yi=1时应该似然函数为 f ( X i , θ ) f(X_i,\theta) f(Xi,θ),当 Y i = 0 Y_i=0 Yi=0时似然函数为 1 − f ( X i , θ ) 1-f(X_i,\theta) 1f(Xi,θ),此时将似然函数写为如下形式:
L θ = ∏ i f ( X i , θ ) Y i ( 1 − f ( X i , θ ) ) 1 − Y i L_\theta=\prod_i f(X_i,\theta)^{Y_i}(1-f(X_i,\theta))^{1-Y_i} Lθ=if(Xi,θ)Yi(1f(Xi,θ))1Yi,最大似然估计为:
θ ^ = arg max ⁡ θ ∏ i f ( X i , θ ) Y i ( 1 − f ( X i , θ ) ) 1 − Y i \hat\theta = \argmax_{\theta}\prod_i f(X_i,\theta)^{Y_i}(1-f(X_i,\theta))^{1-Y_i} θ^=θargmaxif(Xi,θ)Yi(1f(Xi,θ))1Yi
一般求解最大似然估计问题,都会取对数将连乘转换为连加。并且由此可以推导出二分类的交叉熵损失函数,由于 L θ ∝ l n L θ L_\theta\propto lnL_\theta LθlnLθ,因此:
θ ^ = arg max ⁡ θ l n L θ = arg max ⁡ θ ∑ i Y i l n f θ ( X i ) + ( 1 − Y i ) l n ( 1 − f θ ( X i ) ) = arg max ⁡ θ ∑ i Y i l n Y i ^ + ( 1 − Y i ) l n ( 1 − Y i ^ ) \hat\theta = \argmax_{\theta}lnL_\theta\\ =\argmax_{\theta}\sum_iY_ilnf_\theta(X_i)+(1-Y_i)ln(1-f_\theta(X_i))\\ =\argmax_{\theta}\sum_iY_iln\hat{Y_i}+(1-Y_i)ln(1-\hat{Y_i}) θ^=θargmaxlnLθ=θargmaxiYilnfθ(Xi)+(1Yi)ln(1fθ(Xi))=θargmaxiYilnYi^+(1Yi)ln(1Yi^)
最优化问题通常求最小值,加上负号就得到了二分类的交叉熵损失函数:
B C E L o s s = − ∑ i Y i l n Y i ^ + ( 1 − Y i ) l n ( 1 − Y i ^ ) BCELoss=-\sum_iY_iln\hat{Y_i}+(1-Y_i)ln(1-\hat{Y_i}) BCELoss=iYilnYi^+(1Yi)ln(1Yi^)

可以看到, Y i Y_i Yi 1 − Y i 1-Y_i 1Yi的作用类似于选择,将BCE可以扩展到CrossEntropyLoss,而交叉熵损失其实就是二分类交叉熵损失的自然扩展,扩展到C个类别而已:
C E L o s s = − ∑ i l n y i , c ^ CELoss=-\sum_iln\hat{y_{i,c}} CELoss=ilnyi,c^,其中 y i , c ^ = L o g s o f t m a x ( Y i ^ [ c ] ) \hat{y_{i,c}}=Logsoftmax(\hat{Y_i}[c]) yi,c^=Logsoftmax(Yi^[c])假设 Y i ^ ∈ R C \hat{Y_i}\in \mathbb{R}^C Yi^RC Y i ^ [ c ] \hat{Y_i}[c] Yi^[c]表示取第c个元素,之前pytorch上的公式看不懂,就是因为没有理解这个意思。

交叉熵

交叉熵也能推出上面的交叉熵损失函数。交叉熵用到了信息论,使用 I ( X i ) I(X_i) I(Xi)表示随机事件 X X X的某一次采样 X i X_i Xi所蕴含的信息量级:
I ( X i ) = − l o g P ( X i ) I(X_i)=-logP(X_i) I(Xi)=logP(Xi)
,意思是概率越小的采样事件所包含的信息量越大。就比如一个经典的例子:“明天下雨”这个事件要比“明天太阳从东方升起”这个事件包含的信息量更大,因为太阳明天一定从东方升起,而明天下雨不一定。而熵则定义为信息量的期望:
H ( P ) = E X ∼ P I ( X ) = − 1 N ∑ i P ( X i ) l o g P ( X i ) H(P)=\mathbb{E}_{X\sim P}I(X)=-\frac{1}{N}\sum_iP(X_i)logP(X_i) H(P)=EXPI(X)=N1iP(Xi)logP(Xi)
KL散度用来衡量两个分布P和Q的相似度,
D K L ( P , Q ) = E X ∼ P l o g P ( X ) Q ( X ) = 1 N ∑ i P ( X i ) l o g P ( X i ) − P ( X i ) l o g Q ( X i ) = H ( P , Q ) − H ( P ) D_{KL}(P,Q)=\mathbb{E}_{X\sim P}log\frac{P(X)}{Q(X)}=\frac{1}{N}\sum_iP(X_i)logP(X_i)-P(X_i)logQ(X_i)\\ =H(P,Q)-H(P) DKL(P,Q)=EXPlogQ(X)P(X)=N1iP(Xi)logP(Xi)P(Xi)logQ(Xi)=H(P,Q)H(P)
Q是模型需要学习的分布,而P是数据的分布,所以P是无参的, H ( P ) H(P) H(P)不会对优化目标有什么影响,故 H ( P , Q ) H(P,Q) H(P,Q)就可以代替KL散度来作为衡量两个分布的指标,它也被称为交叉熵。
H ( P , Q ) = − 1 N ∑ i P ( X i ) l o g Q ( X i ) H(P,Q)=-\frac{1}{N}\sum_iP(X_i)logQ(X_i) H(P,Q)=N1iP(Xi)logQ(Xi)
它和pytorch上的公式似乎长得不太一样:
l n = − w y n log ⁡ exp ⁡ ( x n , y n ) ∑ c = 1 C exp ⁡ ( x n , c ) ⋅ 1 l_{n}=-w_{y_{n}} \log \frac{\exp \left(x_{n, y_{n}}\right)}{\sum_{c=1}^{C} \exp \left(x_{n, c}\right)} \cdot 1 ln=wynlogc=1Cexp(xn,c)exp(xn,yn)1
注意pytorch公式上的那个1,其实就是 P ( X i ) P(X_i) P(Xi)。pytorch的计算公式中 Q ( X i ) Q(X_i) Q(Xi)取的是模型输出的第c个值,c表示类别,而 X i X_i Xi就是第c个类别的,而 c = y n c=y_n c=yn得知的。 x n , y n x_{n, y_{n}} xn,yn的意思是 x n x_n xn的第 y n y_n yn个值 x n [ y n ] x_n[y_n] xn[yn]。我们已知 X i X_i Xi是属于第c类的,模型的输出表示各个类别的概率,所以 Q ( X i ) Q(X_i) Q(Xi)就是取输出向量的第c位,其他位舍弃。
换一种思考方式,假设分类任务中共有C个类别,由于分布P是固定无参的,所以 P ( X i ) ∈ R 1 × C P(X_i)\in \mathbb{R}^{1\times C} P(Xi)R1×C,其中第c位为1,其余位为0,而 Q ( X i ) ∈ R C × 1 Q(X_i)\in \mathbb{R}^{C\times 1} Q(Xi)RC×1是各个类别的概率,两个向量相乘就是pytorch的计算公式。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值