• 损失函数:交叉熵


    损失函数:交叉熵

    交叉熵用于比较两个不同概率模型之间的距离。

    信息量

    信息量用来衡量事件的不确定性,即该事件从不确定转为确定时的难度有多大。

    定义信息量的函数为:

    [f(x):= ext{信息量} ]

    假设对于某8只球队进行比赛,对于其中任意一直球队,假设夺冠的概率为(frac{1}{8})。对于一条消息“A球队夺冠了”其信息量应该等于“A球队进入决赛”加上“A球队赢了决赛”之和。即:

    [egin{align} f( ext{A球队夺冠了})&=f( ext{A球队进入决赛})+f( ext{A球队赢了决赛})\ f(frac{1}{8})&=f(frac{1}{4})+f(frac{1}{2}) end{align} ]

    而:

    [egin{align} P( ext{A球队夺冠了})&=P( ext{A球队进入决赛})cdot P( ext{A球队赢了决赛})\ end{align} ]

    因此可以推出(其中(x_i)表示事件(i)在系统(X)​中发生的概率,下同):

    [f(x_1cdot x_2) = f(x_1)+f(x_2) ]

    因此可以定义信息量函数(负号是因为事件发生的概率越小,所包含的信息量越大):

    [f(x) = -log_2(x) ]

    熵用来衡量一个系统所包含的信息量有多少。它衡量一个系统的不确定程度,或者混乱程度。

    对于一个系统(P)​​​来说,要求整个系统的信息量,也就是求系统中每个事件(i),从不确定转为确定性所包含的信息量的平均值,也就是期望。即:

    [egin{align} H(P):&=E(f_P)\ &=sum_{i=1}^mp_icdot f(p_i)\ &=sum_{i=1}^m p_icdotig(-log_2(p_i)ig)\ &=-sum_{i=1}^m p_icdot log_2(p_i) end{align} ]

    相对熵与交叉熵

    相对熵表示使用理论分布拟合真实分布时产生的信息损耗。

    对于两个系统(P,Q)​,通过相对熵可以衡量(Q)​​相对于(P)​​​​有多大的差距,即系统(Q)​想要和系统(P)​达到一样的分布的话,它们之间相差多少信息量:

    [egin{align} D_{KL}(P||Q)&=sum_{i=1}^m p_icdot ig(f_Q(q_i)-f_P(p_i)ig)\ &=sum_{i=1}^m p_i cdot igg( ig(-log_2(q_i)ig)-ig(-log_2(p_i) ig)igg)\ &=color{blue}{sum_{i=1}^m p_icdot ig(-log_2(q_i) ig)} - color{red}{sum_{i=1}^m p_i cdotig(-log_2(p_i) ig)} end{align} ]

    可以发现上述公式中红色部分为系统(P)​​的熵,当系统P没有变化时,这部分是一个恒值。而蓝色部分也就是交叉熵,定义为(H(P,Q))

    又根据吉布斯不等式

    [ ext{若}sum_{i=1}^np_i=sum_{i=1}^nq_i=1, ext{且}p_i,q_iin[0,1] ext{,则有:}\ -sum_{i=1}^np_icdot log(p_i)le -sum_{i=1}^np_icdot log(q_i) ]

    可知相对熵恒大于(0)​。因此若想要(Q)系统的概率模型与(P)系统的概率模型尽可能相似,只要最小化交叉熵即可。

    深度学习中的交叉熵

    神经网络的目标:

    [egin{align} min;H(P,Q) &= -sum_{i=1}^m p_icdot log_2(q_i) end{align} ]

    在深度学习中,系统(P)可以用数据集所表示。系统(Q)可以用神经网络模型表示。同样只考虑判断输入是真是假的神经网络,对于(n)个数据中的第(i)个数据,它在系统(P)里发生的概率,也就是为真的概率为(y_1),为假的概率为(1-y_i),同时他在系统(Q)里为真的概率,也就是经过神经网络后的输出为(hat y_i),为假的概率为(1-hat y_i)。因此交叉熵又可表示为:

    [egin{align} H(P,Q)&=-sum_{i=1}^n p_icdot log_2(q_i)\ &=-sum_{i=1}^ny_icdot log_2(hat y_i)+(1-y_i)cdot log_2(1-hat y_i) end{align} ]

    是不是跟极大似然估计法的形式一模一样?

    到这里可以把(p_i,q_i)​​的意义具体化,其实(p_i)​​应该理解为数据(i)​​在系统(P)​​中的概率分布。同理(q_i)​​应该理解为数据(i)​​在系统(Q)​​​中的概率分布。对于判断输入是真是假的神经网络相当于数据(i)​​​的输出只有两种可能,为真或者为假,​对于多分类(m)​​神经网络,数据(i)​​的输出有(m)​​种可能,交叉熵又可表示为:

    [egin{align} H(P,Q)&=-sum_{i=1}^np_icdot log_2(q_i)\ &=-sum_{i=1}^nsum_{j=1}^mp_{ij}cdot log_2(q_{ij}) end{align} ]

    是不是跟极大似然估计法的形式一模一样?

    推荐详细讲解视频:https://www.bilibili.com/video/BV15V411W7VB

  • 相关阅读:
    面向对象编程思想-组合模式
    原生JS:Array对象详解
    一些XMLHttpRequest的例子代码
    详细解读XMLHttpRequest(一)同步请求和异步请求
    深入理解:JavaScript原型与继承
    轻松掌握:JavaScript状态模式
    轻松掌握:JavaScript装饰者模式
    轻松掌握:JavaScript享元模式
    轻松掌握:JavaScript模板方法模式
    回调函数的意义以及python实现
  • 原文地址:https://www.cnblogs.com/--Simon/p/15091794.html
Copyright © 2020-2023  润新知