Cyan's Blog

Search

Search IconIcon to open search

D2L-14-Cross Entropy as Loss

Last updated Feb 11, 2022 Edit Source

# 交叉熵作为损失函数

# 为什么交叉熵可以衡量输出与真实值的差别?

证明视频阐述得非常好 (2:39) :

# Cross Entropy与Softmax

为什么经常看到Cross Entropy和Softmax在一起?

# 详细推导

$$\begin{aligned}\frac{\partial}{\partial o_p}L(\mathbf{y}, \hat{\mathbf{y}})&=-\frac{\partial}{\partial o_p}\left(\log{\frac{\exp \left(o_{k}\right)}{\sum_{i=1}^{K} \exp \left(o_{i}\right)}}\right)\\ &=-\frac{\partial}{\partial o_p}\left(o_{k}-{\sum_{i=1}^{K} \exp \left(o_{i}\right)}\right) \\ &=\begin{cases} \frac{\partial}{\partial o_p}\sum_{i=1}^{K} \exp \left(o_{i}\right)-1 & \text{when }p=k\\
\frac{\partial}{\partial o_p}\sum_{i=1}^{K} \exp \left(o_{i}\right)-0 & \text{when }p\neq k \end{cases}\\ &=\frac{\partial}{\partial o_p}\sum_{i=1}^{K} \exp \left(o_{i}\right)-{y}p\
&=\frac{\exp{o_p}}{\sum
{i=1}^{K} \exp (o_{i})}-{y}_p\&=\operatorname{Softmax}(\mathbf{o})_p-{y}_p \end{aligned}$$

其中 $\mathbf{o=W^T X+b}$

# 另一种推导

这里给出另一种推导方式:

$$\begin{aligned} L(\mathbf{y}, \hat{\mathbf{y}}) &=-\sum_{j=1}^{K} {y}{j} \log \frac{\exp \left(o{j}\right)}{\sum_{i=1}^{K} \exp \left(o_{i}\right)} \\ (\text{将负号移进去})&=\quad\sum_{j=1}^{K} {y}{j} \log \frac{\sum{i=1}^{K} \exp \left(o_{i}\right)}{\exp \left(o_{j}\right)} \\ &=\sum_{j=1}^{K} {y}{j} \log \sum{i=1}^{K} \exp \left(o_{i}\right)-\sum_{j=1}^{K} {y}{j} o{j} \\ (\text{独热编码,只有一个}{y}j\text{为}1)&=\log \sum{i=1}^{K} \exp \left(o_{i}\right)-\sum_{j=1}^{K} {y}{j} o{j} . \end{aligned}$$

# 对比交叉熵与均方误差

为什么Softmax回归不用MSE

# PyTorch的Cross Entropy Loss包括Softmax

  • class torch.nn.CrossEntropyLoss(weight=None, size_average=True)
  • 此标准将LogSoftMaxNLLLoss集成到一个类中。当训练一个多类分类器的时候,这个方法是十分有用的。

# reduction='none'

$$\ell(x, y)=L=\left{l_{1}, \ldots, l_{N}\right}^{\top}, \quad l_{n}=-w_{y_{n}} \log \frac{\exp \left(x_{n, y_{n}}\right)}{\sum_{c=1}^{C} \exp \left(x_{n, c}\right)} \cdot 1\left{y_{n} \neq \text { ignore_index }\right}$$

# reduction='sum', 'mean'

$$ \ell(x, y)= \begin{cases}\sum_{n=1}^{N} \frac{1}{\sum_{n=1}^{N} w_{y_{n}} \cdot 1\left{y_{n} \neq \text { ignore_index }\right}}l_{n}, & \text { if reduction }=\text { ‘mean’; } \\ \sum_{n=1}^{N} l_{n}, & \text{ if reduction }=\text { ‘sum’ }\end{cases} $$

# 需要把标签 one-hot 之后再输入到损失函数里面吗?

Cross_Entropy_Loss_Input_Format-交叉熵损失函数输入格式


  1. Y hat (written $ŷ$ ) is the predicted value of y (the dependent variable) in a regression equation. Y Hat: Definition - Statistics How To ↩︎

  2. 教材里面说: 这不是巧合,在任何指数族分布模型中 (参见 本书附录中关于数学分布的一节 ), 对数似然的梯度正是由此得出的。 这使梯度计算在实践中变得容易很多。 但是我还是不是很理解这里什么意思. https://zh-v2.d2l.ai/chapter_linear-networks/softmax-regression.html#subsec-softmax-and-derivatives ↩︎