zoukankan      html  css  js  c++  java
  • 交叉熵损失函数

    交叉熵损失函数

    熵的本质是香浓信息量(log(frac{1}{p}))的期望

    既然熵的本质是香浓信息量(log(frac{1}{p}))的期望,那么便有

    [H(p)=E[p_i imeslog(frac{1}{p_i})]=sum p_i imeslogfrac{1}{p_i} ]

    一个时间结果的出现概率越低,对其编码的bit的长度就越长。熵的本质的另一个解释是编码方案完美时,最短平均编码长度的是多少

    现在关于样本集的2个概率分布(p)(q),其中(p)为真实分布,(q)为非真实分布,通常是预测结果,比如在深度学习的分类中,像手写数字识别,会有10个类别,那么对于一个给定的图片(x),那么经过深度模型预测得到的结果应该是一个分布,比如(q(0)=0.0,q(1) = 0.1,q(2) = 0.1, q(3) = 0.8,q(4)=0,dots),这就是一个分布,最后肯定会选择概率最大的3作为输出。但是这是预测的概率分布,实际的分布应该是(p(0)=0,p(1)=0,p(2)=0,p(3)=1,p(4)=0,dots)。于是,我们想做的就是让q的分布与(p)的分布一样。

    在概率论或信息论中,KL散度( Kullback–Leibler divergence),又称相对熵(relative entropy),是描述两个概率分布P和Q差异的一种方法。它是非对称的,这意味着D(P||Q) ≠ D(Q||P)。特别的,在信息论中,D(P||Q)表示当用概率分布Q来拟合真实分布P时,产生的信息损耗,其中P表示真实分布,Q表示P的拟合分布。简单的说,KL散度或者相对熵它是用来度量两个分布(P,Q)之间的距离的,也就是说,距离越大,两个分布差距最大。于是。在我们的模型训练中, 我们要做的就是不断的调整参数,使得预测得到的分布与真实分布尽可能的一致。那么,这与交叉熵有什么关系呢?

    相对熵的数学定义如下

    [D_{KL} = sum_ip(i)logfrac{p(i)}{q(i)} ]

    展开后有

    [D_{KL} = sum_ip(i)log(p(i)) - p(i)log(q(i)) ]

    我们暂且表示为

    [D_{KL} = sum_iH(p(i) + H(p(i),q(i)) ]

    (H(p_i))是一个真实分布的期望,因此与训练无关,是一个常数项。于是,最小化相对熵便转为最小化(H(p_i,q_i)=-sum_i p(i)log q(i))

    这个就是交叉熵。

    一句话说,就是,最小化误差可以通过最小化相对熵(KL散度)来实现,而最小化相对熵,则可以通过最小化交叉熵来实现,所以,交叉熵损失函数就这么来了。。。。。。。。。

    参考

    1. 妖娆的up主的交叉熵视频
  • 相关阅读:
    EncryptionAndDecryptionC# 加密 解密
    EncryptFac 加解密小工具
    Aes加密/解密示例项目
    DES加密解密工具
    DESC加密解密算法
    加解密合集
    Zabbix系列之一——zabbix3.4部署
    Linux下ntpdate时间同步
    SVN服务器搭建实录
    Failed to get D-Bus connection: Operation not permitted解决
  • 原文地址:https://www.cnblogs.com/crackpotisback/p/6781872.html
Copyright © 2011-2022 走看看