Entropy
熵是服从某一概率分布事件的理论最小平均编码长度。
E
n
t
r
o
p
y
=
−
∑
i
P
(
i
)
l
o
g
2
P
(
i
)
Entropy =- \sum_{i}P(i)log_{2}P(i)
Entropy=−i∑P(i)log2P(i)
即 负的可能性的对数 的期望 代表了该事件理论上的平均最小编码长度。
H
(
P
)
=
E
x
∼
P
[
−
l
o
g
P
(
x
)
]
H(P) = E_{x \sim P}[-logP(x)]
H(P)=Ex∼P[−logP(x)]
Cross Entropy
交叉熵使实际编码长度和理论最小编码长度有了对比意义。
H
(
P
,
Q
)
=
E
x
∼
P
[
−
l
o
g
Q
(
x
)
]
H(P, Q) = E_{x \sim P}[-logQ(x)]
H(P,Q)=Ex∼P[−logQ(x)]
其中P是真实概率分布,Q是预估概率分布。
有
H
(
P
,
Q
)
>
=
H
(
P
)
H(P, Q) >= H(P)
H(P,Q)>=H(P),当且仅当
P
=
Q
P=Q
P=Q时等号成立。因此可以将交叉熵用于分类损失函数。
torch.nn.functional.cross_entropy
相比nn.torch.CrossEntropyLoss
更灵活,可以用来计算指标,不进行梯度计算,反向传播等。
Binary Cross Entropy
二分类交叉熵是交叉熵的一个特例,当只有两个类别时,有
P
(
x
1
)
=
1
−
P
(
x
2
)
P(x_{1})=1-P(x_{2})
P(x1)=1−P(x2),
Q
(
x
1
)
=
1
−
Q
(
x
2
)
Q(x_{1})=1-Q(x_{2})
Q(x1)=1−Q(x2).
torch.nn.BCEWithLogitsLoss
相比 torch.nn.BCELoss
,其对输入进行Sigmod层,该函数的数值稳定性好于使用Sigmoid层和BCELoss的组合使用。
参考链接:
https://zhuanlan.zhihu.com/p/149186719
https://pytorch.org/docs/stable/generated/torch.nn.BCEWithLogitsLoss.html#torch.nn.BCEWithLogitsLoss
https://pytorch.org/docs/stable/generated/torch.nn.CrossEntropyLoss.html
https://pytorch.org/docs/stable/generated/torch.nn.BCELoss.html