深度学习中需要掌握的数学2之信息论

信息论

  • 信息熵(Entropy)
    • 1.信息量
    • 2.总结
  • 交叉熵
    • 1.KL散度-如何衡量两个事件/分布之间的不同
    • 2.交叉熵公式
    • 3.为什么交叉熵可以用作代价
    • 4.总结
  • 参考文献

信息熵(Entropy)

  • 信息熵,可以看作是样本集合纯度一种指标,也可以认为是样本集合包含的平均信息量。
  • 假定当前样本集合 X X X中第 i i i类样本 _ xi 所占的比例为 P ( ) ( i = 1 , 2 , . . . , n ) P(_ )(i=1,2,...,n) P(xi)(i=1,2,...,n),也代表随机事件 X = x i X=x_i X=xi的概率,则X的信息熵定义为: H ( X ) = − ∑ i = 1 n P ( x i ) log ⁡ 2 P ( x i ) H(X) = -\sum_{i = 1}^nP(x_i)\log_2P(x_i) H(X)=i=1nP(xi)log2P(xi) H ( X ) H(X) H(X)的值越小,则 X X X的纯度越高,蕴含的不确定性越少

1.信息量

  • 信息量是对信息的度量,就跟时间的度量是秒一样,当我们考虑一个离散的随机变量x的时候,当我们观察到的这个变量的一个具体值的时候,我们接收到了多少信息呢?

  • 多少信息用信息量来衡量,我们接受到的信息量跟具体发生的事件有关。

  • 信息的大小跟随机事件的概率有关越小概率的事情发生了产生的信息量越大,如某地产生的地震了;越大概率的事情发生了产生的信息量越小,如太阳从东边升起来了(肯定发生嘛,没什么信息量),信息量的大小跟事情不确定性的变化有关

  • 那么,不确定性的变化跟什么有关呢?

  • 1,跟事情的可能结果的数量有关;2,跟概率有关

  • 先说1。

    • 例如我们讨论太阳从哪升起。本来就只有一个结果,我们早就知道,那么无论谁传递任何信息都是没有信息量的。当可能结果数量比较大时,我们得到的新信息才有潜力拥有大信息量。
  • 再说2,单看可能结果数量不够,还要看初始的概率分布。

    • 例如一开始我就知道小明在电影院的有15*15个座位的A厅看电影。小明可以坐的位置有225个,可能结果数量算多了。可是假如我们一开始就知道小明坐在第一排的最左边的可能是99%,坐其它位置的可能性微乎其微,那么在大多数情况下,你再告诉我小明的什么信息也没有多大用,因为我们几乎确定小明坐第一排的最左边了。
  • 将衡量不确定性的变化的大小叫做信息量

  • 信息量起码该满足些什么特点呢?

    • 信息量起码不能为负
    • 并且信息量和信息量之间可以相加吧!
      • 假如你告诉我的第一句话的信息量是3,在第一句话的基础上又告诉我一句话,额外信息量是4,那么两句话信息量加起来应该等于7吧!难道还能是5是9?
    • 刚刚已经提过,信息量跟概率有关系,但我们应该会觉得,信息量是连续依赖于概率的吧!
      • 就是说,某一个概率变化了0.0000001,那么这个信息量不应该变化很大。
    • 刚刚也提过,信息量大小跟可能结果数量有关。假如每一个可能的结果出现的概率一样,那么对于可能结果数量多的那个事件,新信息有更大的潜力具有更大的信息量,因为初始状态下不确定性更大。
  • 因此一个具体事件的信息量应该是随着其发生概率而递减的

  • 但是这个表示信息量函数的形式怎么找呢?

  • 随着概率增大而减少的函数形式太多了!还有下面这条性质

  • 如果我们有俩个不相关的事件 x x x y y y那么我们观察到的俩个事件同时发生时获得的信息应该等于观察到的事件各自发生时获得的信息之和 h ( x , y ) = h ( x ) + h ( y ) h(x,y)=h(x)+h(y) h(x,y)=h(x)+h(y)

  • 由于 x , y x,y xy是两个独立的事件,那么满足 p ( x , y ) = p ( x ) ∗ p ( y ) p(x,y) = p(x)*p(y) p(x,y)=p(x)p(y)

  • 根据上面推导,我们很容易看出 h ( x ) h(x) h(x)一定与 p ( x ) p(x) p(x)的对数有关(因为只有对数形式的真数相乘之后,能够对应对数的相加形式,也就是乘法加对数后变加法)。因此我们有信息量公式如下: − log ⁡ 2 P ( x i ) -\log_2P(x_i) log2P(xi)

  • 下面解决两个疑问?

    • 1.为什么有一个负号
      • 其中,负号是为了确保信息一定是正数或者是0( P ( x ) P(x) P(x)只能是0-1),总不能为负数吧
      • 信息量取概率的负对数,其实是因为信息量的定义是概率的倒数的对数( 1 P ( x i ) \frac{1}{P(x_i)} P(xi)1,这里概率不可能为0)。而用概率的倒数,是为了使概率越大,信息量越小,同时因为概率的倒数大于1,其对数自然大于0了
    • 2.为什么底数为2
      • 这是因为,我们只需要信息量满足低概率事件x对应于高的信息量。那么对数的选择是任意的。我们只是遵循信息论的普遍传统,使用2作为对数的底!
  • 一个事件的信息量就是这个事件发生的概率的负对数

2.总结

  • 信息量度量的是一个具体事件发生了所带来的信息,而熵则是在结果出来之前对可能产生的信息量的期望(平均值)——考虑该随机变量的所有可能取值,即所有可能发生事件所带来的信息量的期望。 信 息 量 的 期 望 : E = h ( x 1 ) p ( x 1 ) + h ( x 1 ) p ( x 1 ) + h ( x 2 ) p ( x 2 ) + h ( x 3 ) p ( x 3 ) + … + h ( x n ) p ( x n ) 信息量的期望: E = h(x_1)p(x_1) + h(x_1)p(x_1) + h(x_2)p(x_2) + h(x_3)p(x_3) + …+ h(x_n)p(x_n) :E=h(x1)p(x1)+h(x1)p(x1)+h(x2)p(x2)+h(x3)p(x3)++h(xn)p(xn) H ( X ) = − ∑ i = 1 n P ( x i ) log ⁡ 2 P ( x i ) H(X) = -\sum_{i = 1}^nP(x_i)\log_2P(x_i) H(X)=i=1nP(xi)log2P(xi)

  • 信息熵还可以作为一个系统复杂程度的度量,如果系统越复杂,出现不同情况的种类越多,那么他的信息熵是比较大的。

  • 如果一个系统越简单,出现情况种类很少(极端情况为1种情况,那么对应概率为1,那么对应的信息熵为0),此时的信息熵较小。

交叉熵

  • 要想明白交叉熵(Cross Entropy)的意义,可以从熵(Entropy) -> KL散度(Kullback-Leibler Divergence) -> 交叉熵这个顺序入手

  • 不严谨的概念:

    • 熵:可以表示一个事件A的自信息量,也就是A包含多少信息。
    • KL散度:可以用来表示从事件A的角度来看,事件B有多大不同。
    • 交叉熵:可以用来表示从事件A的角度来看,如何描述事件B。
  • 一句话总结的话:KL散度可以被用于计算代价,而在特定情况下最小化KL散度等价于最小化交叉熵。而交叉熵的运算更简单,所以用交叉熵来当做代价。

1.KL散度-如何衡量两个事件/分布之间的不同

  • 对于一个随机变量x的事件A的自信息量,如果我们有另一个独立的随机变量x相关的事件B,该怎么计算它们之间的区别?

  • 默认的计算方法:KL散度,有时候也叫KL距离,一般被用于计算两个分布之间的不同。看名字似乎跟计算两个点之间的距离也很像,但实则不然,因为KL散度不具备有对称性。在距离上的对称性指的是A到B的距离等于B到A的距离。

  • 举例

    • 事件A:张三今天买了2个土鸡蛋,事件B:李四今天买了6个土鸡蛋。我们定义随机变量x:买土鸡蛋,那么事件A和B的区别是什么?有人可能说,那就是李四多买了4个土鸡蛋?这个答案只能得50分,因为忘记了"坐标系"的问题。换句话说,对于张三来说,李四多买了4个土鸡蛋。对于李四来说,张三少买了4个土鸡蛋。·、选取的参照物不同,那么得到的结果也不同。更严谨的说,应该是说我们对于张三和李四买土鸡蛋的期望不同,可能张三天天买2个土鸡蛋,而李四可能因为孩子满月昨天才买了6个土鸡蛋,而平时从来不买。
  • KL散度的数学定义:

    • 对于离散事件我们可以定义事件A和B的差别为 D K L ( A ∣ ∣ B ) = ∑ i P A ( x i ) log ⁡ ( P A ( X i ) P B ( x i ) ) = ∑ i [ P A ( x i ) log ⁡ ( P A ( x i ) ) − P A ( x i ) log ⁡ ( P B ( x i ) ) ] D_{KL}(A||B)=\sum_iP_A(x_i)\log(\frac{P_A(X_i)}{P_B(x_i)})=\sum_i[P_A(x_i)\log(P_A(x_i))-P_A(x_i)\log(P_B(x_i))] DKL(AB)=iPA(xi)log(PB(xi)PA(Xi))=i[PA(xi)log(PA(xi))PA(xi)log(PB(xi))]
    • 如果 P A ( x i ) = P B ( x i ) P_A(x_i)=P_B(x_i) PA(xi)=PB(xi),即两个事件分布完全相同,那么KL散度等于0。
    • 可以发现减号左边的就是事件A的熵的相反数
    • 如果颠倒一下顺序求 D K L ( B ∣ ∣ A ) D_{KL}(B||A) DKL(BA),那么就需要使用B的熵,答案就不一样了。所以KL散度来计算两个分布A与B的时候是不是对称的,有“坐标系”的问题, D K L ( A ∣ ∣ B ) ≠ D K L ( B ∣ ∣ A ) D_{KL}(A||B)\neq D_{KL}(B||A) DKL(AB)=DKL(BA)
  • 换句话说,KL散度由A自己的熵与B在A上的期望共同决定。当使用KL散度来衡量两个事件(连续或离散),上面的公式意义就是求 A与B之间的对数差 在 A上的期望值。

2.交叉熵公式

  • 事实上交叉熵和KL散度的公式非常相近,其实就是KL散度的后半部分,A和B的交叉熵 = A与B的KL散度 - A的熵。 D K L ( A ∣ ∣ B ) = H ( A , B ) − S ( A ) D_{KL}(A||B)=H(A,B)-S(A) DKL(AB)=H(A,B)S(A)
  • 对比一下这是KL散度的公式: D K L ( A ∣ ∣ B ) = ∑ i P A ( x i ) log ⁡ ( P A ( X i ) P B ( x i ) ) = ∑ i [ P A ( x i ) log ⁡ ( P A ( x i ) ) − P A ( x i ) log ⁡ ( P B ( x i ) ) ] D_{KL}(A||B)=\sum_iP_A(x_i)\log(\frac{P_A(X_i)}{P_B(x_i)})=\sum_i[P_A(x_i)\log(P_A(x_i))-P_A(x_i)\log(P_B(x_i))] DKL(AB)=iPA(xi)log(PB(xi)PA(Xi))=i[PA(xi)log(PA(xi))PA(xi)log(PB(xi))]
  • 熵的公式: − ∑ i = 1 n P A ( x i ) log ⁡ P A ( x i ) -\sum_{i = 1}^nP_A(x_i)\log P_A(x_i) i=1nPA(xi)logPA(xi)
  • 这是交叉熵公式: H ( A , B ) = − P A ( x i ) log ⁡ ( P B ( x i ) ) H(A,B)=-P_A(x_i)\log(P_B(x_i)) H(A,B)=PA(xi)log(PB(xi))
  • 此处最重要的观察是,如果 S ( A ) S(A) S(A)是一个常量,那么 D K L ( A ∣ ∣ B ) = H ( A , B ) D_{KL}(A||B)=H(A,B) DKL(AB)=H(A,B)就是说KL散度和交叉熵在特定条件下等价
  • 和KL散度相同,交叉熵也不具备对称性
  • Cross(交叉)主要是用于描述这是两个事件之间的相互关系。特别地,求自己的交叉熵等于熵。

3.为什么交叉熵可以用作代价

  • 最小化模型分布 P ( m o d e l ) P(model) P(model)与训练数据上的分布 P ( t r a i n i n g ) P(training) P(training)的差异等价于最小化这两个分布间的KL散度,也就是最小化 K L ( P ( t r a i n i n g ) ∣ ∣ P ( m o d e l ) ) KL(P(training)||P(model)) KL(P(training)P(model))
  • 此处的A就是数据的真实分布: P ( t r a i n i n g ) P(training) P(training)
  • 此处的B就是模型从训练数据上学到的分布: P ( m o d e l ) P(model) P(model)
  • 巧的是,训练数据的分布A是给定的,因为A固定不变,那么求 D K L ( A ∣ ∣ B ) D_{KL}(A||B) DKL(AB)等价于求 H ( A , B ) H(A,B) H(A,B) ,也就是A与B的交叉熵得证,交叉熵可以用于计算“学习模型的分布”与“训练数据分布”之间的不同。当交叉熵最低时(等于训练数据分布的熵),我们学到了“最好的模型”。

4.总结

  • 为了让学到的模型分布更贴近真实数据分布,我们最小化 模型数据分布 与 训练数据之间的KL散度,而因为训练数据的分布是固定的,因此最小化KL散度等价于最小化交叉熵(看上面的公式)。
  • 因为等价,而且交叉熵更简单更好计算

参考文献

作者:运筹之学
作者:忆臻
作者:微调

你可能感兴趣的:(Pytorch学习,深度学习,人工智能,python)