zoukankan      html  css  js  c++  java
  • 交叉熵

    https://blog.csdn.net/weixinhum/article/details/85065350

     

    假设q(x)是用来拟合p(x)的概率分布,x属于p的样本空间,交叉熵用于衡量q在拟合p的过程中,用于消除不确定性而充分使用的信息量大小(理解为衡量q为了拟合p所付出的努力,另外注意交叉熵定义里的“充分使用”和信息熵定义里的“所需”的区别,“充分使用”不一定能达到全部,“所需”是指全部)。

    由于在每一个点X=x处q的香农信息量为-logq(x),也就是在点X=x处,q消除不确定性而充分使用的信息量为-logq(x)(理解为衡量q在X=x处为了拟合p所作的努力),那么就可以计算出在整个样本空间上q消除不确定性而充分使用的总体信息量,即-logq(x)的数学期望,由于每个x的权重为p(x),因此交叉熵H(p,q)为:
    ---------------------

    相对熵的公式如下:
    DKL(p∥q)=∑Ni=1p(xi)logp(xi)−∑Ni=1p(xi)logq(xi) D _ { K L } ( p | q ) = sum _ { i = 1 } ^ { N }p left( x _ { i } ight)log p left( x _ { i } ight)-sum _ { i = 1 } ^ { N }p left( x _ { i } ight)log q left( x _ { i } ight)
    D
    KL

    (p∥q)=
    i=1

    N

    p(x
    i

    )logp(x
    i

    )−
    i=1

    N

    p(x
    i

    )logq(x
    i

    )

    可以看到前面一项是真实事件的信息熵取反,我们可以直接写成
    DKL(p∥q)=−H(p)−∑Ni=1p(xi)logq(xi) D _ { K L } ( p | q ) = -H(p)-sum _ { i = 1 } ^ { N }p left( x _ { i } ight)log q left( x _ { i } ight)
    D
    KL

    (p∥q)=−H(p)−
    i=1

    N

    p(x
    i

    )logq(x
    i

    )

    在神经网络训练中,我们要训练的是q(xi) q ( x _ { i })q(x
    i

    )使得其与真实事件的分布越接近越好,也就是说在神经网络的训练中,相对熵会变的部分只有后面的部分,我们希望它越小越好,而前面的那部分是不变的。因此我们可以把后面的部分单独取出来,那部分就是交叉熵,写作:
    H(p,q)=−∑Ni=1p(xi)logq(xi) H(p,q) = -sum _ { i = 1 } ^ { N }p left( x _ { i } ight)log q left( x _ { i } ight)
    H(p,q)=−
    i=1

    N

    p(x
    i

    )logq(x
    i

    )

    这就是我们经常在神经网络训练中看到的交叉熵损失函数。如果要了解它的内涵,要回头去看相对熵。
    ---------------------

    萍水相逢逢萍水,浮萍之水水浮萍!
  • 相关阅读:
    WebService 访问代理及安全性验证设置
    精益求精,抑或得过且过
    用Eclipse开发Android应用程序(1): 开始之前
    用Eclipse开发Android应用程序(3): 开发第一个Android应用程序HelloWorld(下篇)
    [转]C#中调用打印机编程实例
    检索 COM 类工厂中 CLSID 为 ???的组件时失败,原因是出现以下错误: 80080005。
    用Eclipse开发Android应用程序(2): 开发环境搭建
    GridView RowCommand事件操作Demo Code
    USB三模(EDGE、DCHSPA+和LTE)数据棒
    [用 OProfile 彻底了解性能]
  • 原文地址:https://www.cnblogs.com/AIBigTruth/p/10484222.html
Copyright © 2011-2022 走看看