3.4 softmax回归

发布时间 2023-05-27 13:50:58作者: AncilunKiang

3.4.1 分类问题

整节理论知识,详见书本。

3.4.2 网络架构

整节理论知识,详见书本。

3.4.3 全连接层的参数开销

整节理论知识,详见书本。

3.4.4 softmax运算

整节理论知识,详见书本。

3.4.5 小批量样本的向量化

整节理论知识,详见书本。

3.4.6 损失函数

整节理论知识,详见书本。

3.4.7 信息论基础

整节理论知识,详见书本。

以下为结合视频《“交叉熵”如何做损失函数?打包理解“信息量”、“比特”、“熵”、“KL散度”、“交叉熵”》对交叉熵的理解:

  1. 为什么香农要把信息量定义为 \(-\log P(j)\)

    香农如此定义当然并非一时兴起。

    假设有一事件的概率为 \(P\),该事件可拆分为两个小事件,这两个小事件的概率分别为 \(P_1\)\(P_2\)。那么显然 \(P=P_1\times P_2\)

    我们假设信息量为 \(f(P(j))\)(自变量为概率),则为了保持量纲需要满足 \(f(P)=f(P_1)+f(P_2)\)

    为了满足以上两个式子,顺理成章的想到给 \(f(P(j))\) 应该是对数运算,即 \(f(P(j))=\log(P(j))\)

    又为了满足概率越大信息量越小的直观感受,可在给对数运算取负值,至此即得出信息量的定义 \(f(P(j))=-\log P(j)\)

  2. 何为熵?

    熵的定义式如下:

    \[H(P)=\sum_j-P(j)\log P(j) \]

    显而易见,\(熵=\sum_j概率\times信息量\),也就是说熵实际上就是事件信息量的期望。

  3. 什么是交叉熵?为什么交叉熵能当损失函数?

    为了计量的是真实值与估计值之间的差距,在这里自然的使用真实值与估计值的信息量的均差,称之为 KL 散度:

    \[\begin{align} D_{KL}(y|\hat{y})&=\sum_{j=1}^q y_j(f(\hat{y}_j)-f(y_j))\\ &=\sum_{j=1}^q y_j((-\log\hat{y}_j)-(-\log y_j))\\ &=\sum_{j=1}^q y_j(-\log\hat{y}_j)-\sum_{j=1}^q y_j(-\log y_j)\\ &=交叉熵-熵 \end{align} \]

    吉布斯不等式知,KL 散度的前项一定大于后向,即 \(D_{KL}(y|\hat{y})\ge0\)

    因此便可以取交叉熵作为真实值与估计值之间的差距,且最小化交叉熵即可最小化损失。

3.4.8 模型预测和评估

整节理论知识,详见书本。

练习

(1)我们可以更深入地探讨指数族与 softmax 之间的联系。

a. 计算 softmax 交叉熵损失 \(l(\boldsymbol{y},\hat{\boldsymbol{y}})\) 的二阶导数。

b. 计算 \(\mathrm{softmax}(\boldsymbol{o})\) 给出的分布方差,并与上面计算的二阶导数匹配。

a. 由 3.5.6 2 知道:

\[\frac{\partial l(\boldsymbol{y},\hat{\boldsymbol{y}})}{\partial o_j}=\frac{\exp(o_j)}{\sum^q_{k=1}\exp(o_k)}-y_j=\mathrm{softmax}(\boldsymbol{o})_j-y_j \]

则二阶导为:

\[\begin{align} \frac{\partial^2 l(\boldsymbol{y},\hat{\boldsymbol{y}})}{\partial o_j^2}&=\frac{\partial \frac{\exp(o_j)}{\sum^q_{k=1}\exp(o_k)}-y_j}{\partial o_j}\\ &=\frac{\exp(o_j)\sum^q_{k=1}\exp(o_k)-\exp^2(o_j)}{(\sum^q_{k=1}\exp(o_k))^2}-0\\ &=\frac{\exp(o_j)}{\sum^q_{k=1}\exp(o_k)}(1-\frac{\exp(o_j)}{\sum^q_{k=1}\exp(o_k)})\\ &=\mathrm{softmax}(\boldsymbol{o})_j(1-\mathrm{softmax}(\boldsymbol{o})_j) \end{align} \]

b.先求均值:

\[\begin{align} \overline{\mathrm{softmax}(\boldsymbol{o})}&=\frac{1}{q}\sum^q_{j=1}\mathrm{softmax}(\boldsymbol{o})_j\\ &=\frac{1}{q}\sum^q_{j=1}\frac{\exp(o_j)}{\sum^q_{k=1}\exp(o_k)}\\ &=\frac{1}{q}\frac{\sum^q_{j=1}\exp(o_j)}{\sum^q_{k=1}\exp(o_k)}\\ &=\frac{1}{q} \end{align} \]

方差为:

\[\begin{align} \mathrm{V\ ar}(o)&=\frac{1}{q}\sum^q_{j=1}(\mathrm{softmax}(\boldsymbol{o})_j-\overline{\mathrm{softmax}(\boldsymbol{o})})^2\\ &=\frac{1}{q}\left[(\mathrm{softmax}(\boldsymbol{o})_1-\frac{1}{q})^2+(\mathrm{softmax}(\boldsymbol{o})_2-\frac{1}{q})^2+\dots+(\mathrm{softmax}(\boldsymbol{o})_q-\frac{1}{q})^2\right]\\ &=\frac{1}{q}(\frac{1}{q}+\sum^q_{j=1}\mathrm{softmax}^2(\boldsymbol{o})_j-\frac{2}{q}\sum^q_{j=1}\mathrm{softmax}(\boldsymbol{o})_j)\\ &=\frac{1}{q}(\frac{1}{q}-\frac{2}{q}+\sum^q_{j=1}\mathrm{softmax}^2(\boldsymbol{o})_j)\\ &=-\frac{1}{q^2}+\frac{1}{q}\sum^q_{j=1}\mathrm{softmax}^2(\boldsymbol{o})_j \end{align} \]

上式与二阶导数式匹配为:

\[\begin{align} \mathrm{V\ ar}(o)&=-\frac{1}{q^2}+\frac{1}{q}\sum^q_{j=1}\mathrm{softmax}^2(\boldsymbol{o})_j\\ &=-\frac{1}{q^2}-\frac{1}{q}(1-\sum^q_{j=1}\mathrm{softmax}^2(\boldsymbol{o})_j)+\frac{1}{q}\\ &=-\frac{1}{q^2}-\frac{1}{q}(\sum^q_{j=1}\mathrm{softmax}(\boldsymbol{o})_j-\sum^q_{j=1}\mathrm{softmax}^2(\boldsymbol{o})_j)+\frac{1}{q}\\ &=-\frac{1}{q^2}-\frac{1}{q}\sum^q_{j=1}(\mathrm{softmax}(\boldsymbol{o})_j-\mathrm{softmax}^2(\boldsymbol{o})_j)+\frac{1}{q}\\ &=\frac{q-1}{q^2}-\frac{1}{q}\sum^q_{j=1}\frac{\partial^2 l(\boldsymbol{y},\hat{\boldsymbol{y}})}{\partial o_j^2}\\ \end{align} \]


(2)假设我们有3个类别出现的的概率相等,即概率向量是 \(\left(\frac{1}{3}, \frac{1}{3}, \frac{1}{3}\right)\)

a. 如果我们尝试为它设计二进制代码,有什么问题?

b. 请设计一个更好的代码。(提示:如果我们尝试为两个独立的观测结果编码会发生什么,如果我们为 \(n\) 个观测值联合编码怎么办?)

a. 3不是2的幂,用两位二进制编码则会浪费一个编码,这样后面就会很麻烦。

b. 如 3.4.1 所述,可使用独热编码,即分别使用 100、010 和 001 代表上述三个类别。


(3)softmax 是对上面介绍的映射的误称(虽然深度学习领域很多人都使用这个名字)。真正的 softmax 被定义为 \(\mathrm{ReakSiftMax}(a,b)=\log(\exp(a)+\exp(b))\)

a. 证明 \(\mathrm{ReakSiftMax}(a,b)>\max(a,b)\)

b. 证明 \(\lambda^{-1}\mathrm{ReakSiftMax}(\lambda a,\lambda b)>\max(a,b)\) 成立,前提是 \(\lambda>0\)

c. 证明对于 \(\lambda\to\infty\),有 \(\lambda^{-1}\mathrm{ReakSiftMax}(\lambda a,\lambda b)\to\max(a,b)\)

d. sofrmax 会是什么样子?

e. 将其扩展到两个以上的数字。

a. \(\mathrm{ReakSiftMax}(a,b)=\log(\exp(a)+\exp(b))>\log(\exp(\max(a,b)))=\max(a,b)\)

b. 若 \(\lambda>0\) 则:

\[\begin{align} \lambda^{-1}\mathrm{ReakSiftMax}(\lambda a,\lambda b)=\lambda^{-1}\log(\exp(\lambda a)+\exp(\lambda b))>\lambda^{-1}\log(\exp(\max(\lambda a,\lambda b)))&=\lambda^{-1}\max(\lambda a,\lambda b)\\ &=\lambda^{-1}\lambda\max(a,b)\\ &=\max(a,b) \end{align} \]

\(\lambda<0\) 则:

\[\begin{align} \lambda^{-1}\mathrm{ReakSiftMax}(\lambda a,\lambda b)=\lambda^{-1}\log(\exp(\lambda a)+\exp(\lambda b))<\lambda^{-1}\log(\exp(\min(\lambda a,\lambda b)))&=\lambda^{-1}\min(\lambda a,\lambda b)\\ &=\lambda^{-1}\lambda\max(a,b)\\ &=\max(a,b) \end{align} \]

c. 若 \(a\ne b\),则:

\[\lim_{\lambda\to\infty}\exp(\max(\lambda a,\lambda b))\gg\lim_{\lambda\to\infty}\exp(\min(\lambda a,\lambda b)) \]

故:

\[\begin{align} \lim_{\lambda\to\infty}\lambda^{-1}\mathrm{ReakSiftMax}(\lambda a,\lambda b)&=\lim_{\lambda\to\infty}\lambda^{-1}\log(\exp(\lambda a)+\exp(\lambda b))\\ &=\lim_{\lambda\to\infty}\lambda^{-1}\log(\exp(\max(\lambda a,\lambda b)))\\ &=\lim_{\lambda\to\infty}\lambda^{-1}\max(\lambda a,\lambda b)\\ &=\lim_{\lambda\to\infty}\lambda^{-1}\lambda \max(a,b)\\ &=\max(a,b) \end{align} \]

\(a= b\),则:

\[\begin{align} \lim_{\lambda\to\infty}\lambda^{-1}\mathrm{ReakSiftMax}(\lambda a,\lambda b)&=\lim_{\lambda\to\infty}\lambda^{-1}\log(\exp(\lambda a)+\exp(\lambda b))\\ &=\lim_{\lambda\to\infty}\lambda^{-1}\log(2\exp(\max(\lambda a,\lambda b)))\\ &=\lim_{\lambda\to\infty}\lambda^{-1}[\max(\lambda a,\lambda b)+\log2]\\ &=\lim_{\lambda\to\infty}[\lambda^{-1}\lambda \max(a,b)+\lambda^{-1}\log2]\\ &=\max(a,b)+0\\ &=\max(a,b) \end{align} \]

d. \(\mathrm{softmin}(\boldsymbol{o})_j=\mathrm{softmax}(-\boldsymbol{o})_j\),故softmin 长这个样子:

\[\mathrm{softmin}(\boldsymbol{o})_j=\frac{\exp(-o_j)}{\sum^q_{k=1}\exp(-o_k)} \]

详细参见官方文档 SOFTMIN

e. 扩展到 n 个参数为:

\[\mathrm{ReakSiftMax}(x_1,x_2\dots,x_n)=\log(\exp(x_1)+\exp(x_2)+\dots+\exp(x_n)) \]