corssEntropy(softmax(\theta | X, I(y))) 梯度推导[2021-02-05]

[Toc]

一. 概率,信息,熵





  • 概率:Probability

    • 事件发生的可能性
  • 信息:Information

    • 对于一个预测系统(比如机器学习)而言,事件发生的概率越大,越符合预测系统的预期(符合知识体系),那么该预测系统获得的信息就越少(因为系统对此知识或者经验更已知)。

      反之,如果一个对于该系统预期发生的概率越小(也即系统认为该事件本不应该或者很难发生)的事件发生了,那么,系统就获得了新的信息,此时,这个已发生的事件对于该系统而言,信息量就越高。

    • 信息的计算公式 I(x) = -\log{(P(x))}

  • 熵:Entropy

    • 所有事件的信息(I(x))对期望(发生的概率 P(x) )的加权平均值。
    • 计算公式 E(x) = \sum P(x)I(x) = - \sum P(x) \cdot \log{\left( P(x) \right)}




1.其中,对于信息的计算公式 I(x) = -log(P(x))

信息 I(x) 选择对数来作为信息的计算公式符合以下三条和信息相关的直觉。


a.信息量只取决于概率 P

准确来说,信息量取决于系统对已发生的事件的预测概率 P


b.概率越小,那么信息量越大(单调性)

image-20260407120319307.png

以上是 -\ln{x} 的曲线,可以观察到,在区间 [0, 1] (概率值)的范围内:概率越小(当 P(x) \to 0^+I(x) \to \infty),提供给系统的信息量越趋近于无穷大; 概率越大(接近于100%),提供给系统的信息量越趋近于 0;


c.两个独立事件的总信息量可以相加(最重要的特性)

I(x \& y) = I(x) + I(y) = -\ln{(P(x)\cdot P(y))} = -(\ln{P(x)} + \ln{P(y)});

  • 也即,两个事件 x, y 同时发生的概率 P(x\& y) = P(x)\cdot P(y) 下的信息量 - ln(P(x)\cdot P(y)),等于两个事件各自发生情况下的信息量之和 -(\ln{P(x)} + \ln{P(y)})






二. softmax 函数






softmax(x_j,\theta) = \frac { e^{x_{j} \theta_{j}} } { \sum_{i=0}^{c} e^{x_i \theta_i} }

softmax 在多分类中有两个用途:
1.其一是用于将数据归一化[0,1] 区间内(因为我们需要的结果是概率)。
2.其二是通过指数来增加不同结果之间的差异性。






三.交叉熵 Cross Entropy






以上介绍了熵的定义是现实信息量的总预期,在机器学习的多分类算法中,交叉熵通常作为损失函数来判断系统预测概率和真实概率之间的偏差。

在熵计算的公式 E(x) = \sum - P(x) \cdot ln(P(x)) 中,通常修改为 E(x) = \sum -P(x) \cdot ln(P_{prediction}(x));其中,P_{prediction}(x) 表示系统预测的概率(这样修改的意义在于 ln 函数可以对概率变化导致的信息量的变化进一步放大)。交叉熵的结果值越大,表示系统当前获得信息量越大,据上所述,系统获得的信息量越大,表示系统预测的结果和实际值的偏差越大,所以需要通过反向传播算法来调整权重,从而使得系统的预测结果向样本偏移。






四.交叉熵+softmax函数导数推导





约定:

  • \vec{x} 表示特征向量
  • y 表示分类中的真实概率分布( y 是标量,\vec{y} 是向量,\vec{y} 中只有一个值为 1,用于指示正确分类,其余值为 0;因而 y 又称为 one-hot)
  • \hat{y} 表示模型预测的概率分布
  • \vec{z} = \Theta^Tx 表示未激活的得分向量
  • target 下标表示的是 one-hot 向量 y 所指示的那个正确的分类
  • \Theta 表示的是权重矩阵(m\times c,m 为权重数(和特征数量对应),c 为分类数量),也即求导的目标

交叉熵损失函数的定义:
L = \sum_{k=1}^{c} -y_k \cdot ln(\hat{y}_k)
这里的 \vec{y} 向量是 one-hot 向量,也即只有一个值为 1 (索引为 target 的值),其余值为 0,用于指示分类。因而,上式可以进一步简化为:
L = -ln(\hat{y}_{target})
\hat{y}_k 为:
\hat{y}_{target} = \frac { e^{z_{target}} } { \sum_{i=1}^{c} e^{z_{i}} }
所以 L
\begin{align} L &=&& -ln(\hat{y}_{target}) \\ &=&& -ln \left( \frac { e^{z_{target}} } { \sum_{i=1}^{c} e^{z_i} } \right) \\ &=&& ln(\sum_{i=1}^c e^{z_i}) - z_{target} \qquad \left( z_{target 表示正确分类} \right) \end{align}
然后再分别对 L 中的两项进行求导:

  • 对第一部分求导:

    \begin{align} \frac { \partial } { \partial z_j } ln \left( \sum_{i=1}^{c} e^{z_{i}} \right) &=& \frac { 1 } { \sum_{i=1}^c e^{z_{i}} } \cdot \frac { \partial } { \partial z_j } \left( e^{z_{i}} \right) \\ &=& \frac { e^{z_{i}} } { \sum_{i=1}^{c} e^{z_{i}} } \\ &=& \hat{y} \end{align}

  • 对第二部分求导:
    (- Z_{target})' = - 1 \qquad (该部分只有 y_{target} 的系数为 1 其余部分系数为 0,由 \vec{y} 指示)

  • 合并结果为(标量形式,对单个分类进行求导):
    \frac { \partial L } { \partial z_{j} } = \hat{y_j} - y_{j}

  • 写成向量形式(对向量中的每个分类进行求导):
    \frac { \partial L } { \partial \vec{z} } = \vec{\hat{y}} - \vec{y}

再将其映射回权重矩阵 \Theta(其中 i 对应于权重索引,j 对应于分类数索引):
\begin{align} \frac { \partial L } { \partial \theta_{ij} } &=& \frac { \partial L } { \partial \vec{z_j} } \cdot \frac { \partial \vec{z_j} } { \partial \theta{ij} } \end{align}
写成矩阵乘法(假设向量都是竖排,\Theta 的形状为 特征数x分类数):
\frac { \partial L } { \partial \Theta_{c \times m} } = \vec{x}_{c \times 1} (\vec{\hat{y}}_{m \times 1} -\vec{y}_{m \times 1})^T































【错误推导】四.corssEntropy(softmax(\theta, X), I(y)) 梯度推导


该推导没有考虑到 \vec{y} 的 one-hot 的特性。虽然结果可以收敛,但是算法最终的准确度不行。

交叉熵合并 softmax 函数:

\theta 是一个 m\times c 的矩阵,其中 m 是特征的数量, c 是分类的数量。

假设 \mathrm{\vec{x}}m\times 1 的列向量。

\cdot 运算和 numpy 的广播机制一致。

注意:注意矩阵运算中的结果的形状应该以 \theta 的形状为准,因为求的梯度为 \theta 的梯度。

exp(matrix) 表示对矩阵中的每个元素进行广播执行 e^{matrix\_element}

I(y) = -ln(y) ; 表示信息量

\begin{align} \\ &\mathrm {f}(\theta)&&=&&crossEntropy(softmax(\theta,\vec{\mathrm{x}}^T), I(\vec{y})) \\ \\ &&&=&& I(\vec{y}) \cdot log \left( \frac {exp(\vec{\mathrm{x}}^T\theta)} {\sum exp(\vec{\mathrm{x}}^T\theta)} \right) \end{align}

\mathrm{F}'(\theta) 求解:

part 0
\begin{align} \frac { \partial \left( I(\vec{y}) \cdot log \left( \frac {exp(\vec{\mathrm{x}}^T\theta)} {\sum exp(\vec{\mathrm{x}}^T\theta)} \right) \right) } {\partial \left( \frac {exp(\vec{\mathrm{x}}^T\theta)} {\sum exp(\vec{\mathrm{x}}^T\theta)} \right) } &&=&& I(\vec{y})\cdot \frac {1} {\frac {exp(\vec{\mathrm{x}}^T\theta)} {\sum exp(\vec{\mathrm{x}}^T\theta)}} \\ \\ &&=&& I(\vec{y}) \cdot \frac {\sum exp(\vec{\mathrm{x}}^T\theta)} {exp(\vec{\mathrm{x}}^T\theta)} \end{align}

part 1
\frac { \partial\left( \frac {exp(\vec{\mathrm{x}}^T\theta)} {\sum exp(\vec{\mathrm{x}}^T\theta)} \right) } {\partial \left( exp(\vec{\mathrm{x}}^T\theta) \right) } = I(\vec{y})\cdot \frac {{\sum exp(\vec{\mathrm{x}}^T\theta) - exp(\vec{\mathrm{x}}^T\theta)}} {(\sum exp(\vec{\mathrm{x}}^T\theta))^{2}}

part 2
\frac {\partial(exp(\vec{\mathrm{x}}^T\theta))} {\partial(\theta)} = \mathrm{\vec{x}}\cdot exp(\mathrm{\vec{x}^{T}\theta})

合并:
\begin{align} \frac { \partial \left( I(\vec{y}) \cdot log \left( \frac {exp(\vec{\mathrm{x}}^T\theta)} {\sum exp(\vec{\mathrm{x}}^T\theta)} \right) \right) } {\partial \left( \frac {exp(\vec{\mathrm{x}}^T\theta)} {\sum exp(\vec{\mathrm{x}}^T\theta)} \right) } \cdot \frac { \partial\left( \frac {exp(\vec{\mathrm{x}}^T\theta)} {\sum exp(\vec{\mathrm{x}}^T\theta)} \right) } {\partial \left( exp(\vec{\mathrm{x}}^T\theta) \right) } \cdot \frac {\partial(exp(\vec{\mathrm{x}}^T\theta))} {\partial(\theta)} = I(\vec{y})\cdot \frac {\sum exp(\vec{\mathrm{x}}^T\theta)} {exp(\vec{\mathrm{x}}^T\theta)} \cdot \frac {{\sum exp(\vec{\mathrm{x}}^T\theta) - exp(\vec{\mathrm{x}}^T\theta)}} {(\sum exp(\vec{\mathrm{x}}^T\theta))^{2}} \cdot \mathrm{\vec{x}}\cdot exp(\mathrm{\vec{x}^{T}\theta}) \cdot \end{align}

有:
\begin{align} \frac {\partial(\mathrm{F}(\theta))} {\partial(\theta)} &&=&& \frac { \partial\left( I(\vec{y}) \cdot log \left( \frac {exp(\vec{\mathrm{x}}^T\theta)} {\sum exp(\vec{\mathrm{x}}^T\theta)} \right) \right) } {\partial(\theta)}\\ && = && \mathrm{\vec{x}}\cdot I(\vec{y})\cdot \frac {{\sum exp(\vec{\mathrm{x}}^T\theta) - exp(\vec{\mathrm{x}}^T\theta)}} {\sum exp(\vec{\mathrm{x}}^T\theta)}&\\\\ &&=&&\mathrm{\vec{x}}\cdot I(\vec{y})\cdot (1 - softmax(\mathrm{\vec{x}}^{T}\theta))& \\ \\ &&=&&\mathrm{\vec{x}}\cdot I(\vec{y})\cdot (1 - \vec{\hat{y}})& \end{align}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容