记录一下自己的笔记。
1.信息熵
首先是信息量的定义,根据信息论原理得出。。
这里一开始就给出了负号,保证 I(x)>=0.
信息熵
就是信息量的数学期望。
2.KL散度(相对熵)
中间还有一个条件熵,略过了。。
这里对应就是我们机器学习中的P(X)真实分布,Q(X)预测分布。
从式中得知,KL越少就是表示两个分布越接近。
在机器学习中,我们的目的就是将Q(x)无限接近P(x).
其中Dkl可以证明是非负数。
从而得出交叉熵的定义。
注意目的是最小化KL离散度,但是因为信息熵H(x)一般是常量,那么就转化成最小化交叉熵(同样非负,刻画两个随机变量分布的距离)了。 同样也等价于最大化似然估计。
另外多分类交叉熵应该就是 多个loss相加为一个样本的交叉熵。
同理在代码中
import torch
import torch.nn as nn
loss = nn.nn.CrossEntropyLoss(inputs,target,reduction,weight) # 一个四个参数
# reduction (string,可选) – 指定要应用于输出的reduction操作:' none ' | 'mean' | ' sum '。“none”:表示不进行任何reduction,
# “mean”:输出的和除以输出中的元素数,即求平均值,“sum”:输出求和。注意:size_average和reduce正在被弃用,
# 与此同时,指定这两个arg中的任何一个都将覆盖reduction参数。默认值:“mean”
其实就是因为pytorch对输出做了一个onehot变化,只算出预测成功的类别(P(x) =1,其他class为0) 再加上softmax就得出下面的结果。
一般加入weight参数,用在NLP处理序列,补零后的mask掩码序列,对补零的参数不做更新。
多分类
最大似然估计的对数等价形式将损失函数定义为如下:看来和我想的是一样的,一个样本,为1的class算出他们的loss再相加。
∑ t = 1 T ∑ − m ≤ j ≤ m , j ≠ 0 [ − log P ( D = 1 ∣ w ( t ) , w ( t + j ) ) ] \sum_{t=1}^T\sum_{-m\le j\le m,j\ne 0} [-\log P(D=1\mid w^{(t)},w^{(t+j)})] t=1∑T−m≤j≤m,j=0∑[−logP(D=1∣w(t),w(t+j))]