softmax 回归|线性神经网络|动手学深度学习

23 阅读6分钟

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

  1. 计算softmax交叉熵损失l(y,y^)l(\mathbf{y},\hat{\mathbf{y}})的二阶导数。
  2. 计算softmax(o)\mathrm{softmax}(\mathbf{o})给出的分布方差,并与上面计算的二阶导数匹配。

指数族与Softmax的联系

指数族分布是一类在统计学中非常重要的概率分布,它们具有特定的形式,可以表示为指数函数的参数化形式。Softmax函数是一种在机器学习中常用的将任意实数向量转换为有效概率分布的函数,特别是在多分类问题中。

指数族分布的一个关键特性是它们的概率密度函数(或概率质量函数)可以表示为一个共轭先验的形式,这使得它们在贝叶斯统计中非常有用。Softmax函数的输出可以看作是指数族分布中的一种特殊情况,即多项式分布。

Softmax交叉熵损失的二阶导数

Softmax交叉熵损失通常用于衡量模型输出的概率分布与目标概率分布之间的差异。对于一个多分类问题,假设我们有模型输出 z\mathbf{z},目标概率分布 y\mathbf{y},Softmax交叉熵损失可以表示为:

L=i=1Cyilog(σ(zi))L = -\sum_{i=1}^{C} y_i \log(\sigma(\mathbf{z}_i))

其中 CC 是类别的数量,σ()\sigma(\cdot) 是Softmax函数,zi\mathbf{z}_i 是模型输出向量的第 ii 个元素,yiy_i 是目标概率分布中第 ii 个元素。

Softmax函数的定义为:

σ(zi)=ezij=1Cezj\sigma(\mathbf{z}_i) = \frac{e^{\mathbf{z}_i}}{\sum_{j=1}^{C} e^{\mathbf{z}_j}}

对于Softmax交叉熵损失的二阶导数,我们关注的是 z\mathbf{z} 关于自身的二阶导数。首先,我们计算一阶导数:

Lzi=j=1Cyj(δijσ(zj))\frac{\partial L}{\partial \mathbf{z}_i} = -\sum_{j=1}^{C} y_j \left( \delta_{ij} - \sigma(\mathbf{z}_j) \right)

其中 δij\delta_{ij} 是Kronecker delta函数,当 i=ji = j 时为1,否则为0。

接下来,我们计算二阶导数:

2Lzizj=k=1Cσ(zk)(δikδjkσ(zk)δij)\frac{\partial^2 L}{\partial \mathbf{z}_i \partial \mathbf{z}_j} = \sum_{k=1}^{C} \sigma(\mathbf{z}_k) \left( \delta_{ik} \delta_{jk} - \sigma(\mathbf{z}_k) \delta_{ij} \right)

这个二阶导数的形式揭示了Softmax输出的概率分布之间的相关性。

分布的方差与二阶导数的匹配

对于指数族分布,方差可以通过二阶导数来计算。对于Softmax输出的概率分布 P(z)P(\mathbf{z}),其方差可以表示为:

Var[σ(zi)]=σ(zi)(1σ(zi))\text{Var}[\sigma(\mathbf{z}_i)] = \sigma(\mathbf{z}_i) (1 - \sigma(\mathbf{z}_i))

这是因为Softmax输出的每一项都是概率,其范围在0到1之间,因此它的方差具有上述形式。

如果我们将二阶导数的表达式与方差的形式进行比较,我们可以看到它们之间的联系。二阶导数的对角线元素(当 i=ji = j 时)对应于每个类别的概率乘以 11 减去该类别的概率,这与方差的表达式相匹配。

非对角线元素(当 iji \neq j 时)表示不同类别之间的协方差,它们是负的,这反映了不同类别概率之间的负相关性。

总结来说,Softmax函数的输出可以看作是指数族分布的一种,其方差可以通过二阶导数来计算,而二阶导数的形式揭示了概率分布之间的相关性。

1. 假设我们有三个类发生的概率相等,即概率向量是(13,13,13)(\frac{1}{3}, \frac{1}{3}, \frac{1}{3})

  1. 如果我们尝试为它设计二进制代码,有什么问题?
  2. 请设计一个更好的代码。提示:如果我们尝试编码两个独立的观察结果会发生什么?如果我们联合编码nn个观测值怎么办?

1. 为概率向量 (13,13,11)(\frac{1}{3}, \frac{1}{3}, \frac{1}{1}) 设计二进制代码的问题

如果我们有三个类别,每个类别发生的概率相等,即概率向量是 (13,13,13)(\frac{1}{3}, \frac{1}{3}, \frac{1}{3}),尝试为这个概率分布设计二进制代码可能会遇到以下问题:

  1. 非唯一可解码性:在二进制编码中,每个类别通常对应一个唯一的二进制串。如果三个类别的概率相等,任何尝试将它们映射到不同长度的二进制串都会导致某些类别的概率不匹配,因为不同长度的二进制串会有不同的概率。

  2. 编码效率:如果所有类别的概率相等,使用二进制编码可能不是最高效的,因为编码的长度可能不是最优的。

  3. 错误传播:在某些二进制编码方案(如汉明码或里德-所罗门码)中,错误可以被检测和纠正。然而,如果编码设计不当,错误可能会传播,导致解码错误。

2. 设计一个更好的代码

为了设计一个更好的编码方案,我们可以考虑以下提示:

  • 独立观察结果的编码:如果我们尝试编码两个独立的观察结果,我们应该能够将它们映射到不同的二进制串,同时保持每个类别的概率相等。

  • 联合编码 n 个观测值:如果我们联合编码 n 个观测值,我们希望编码能够反映出这些观测值的联合概率分布。

考虑到这些提示,我们可以使用一种称为等概率编码的方案,其中每个类别都映射到一个相同长度的二进制串,并且所有这些二进制串具有相同的概率。对于三个类别,我们可以设计如下编码:

  • 类别 1: 100
  • 类别 2: 010
  • 类别 3: 001

这种编码方案保证了:

  • 所有类别的概率都是相等的,因为每个二进制串出现的概率都是 ( \frac{1}{2^3} = \frac{1}{8} )。
  • 独立观察结果的编码是独立的,因为每个二进制串都是固定的,并且与前一个结果无关。
  • 对于 n 个观测值的联合编码,我们可以将它们串联起来,得到的二进制串仍然保持等概率。

这种编码方案简单、高效,并且避免了错误传播的问题,因为每个类别都有一个唯一的二进制表示,且这些表示互不重叠。

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

  1. 证明RealSoftMax(a,b)>max(a,b)\mathrm{RealSoftMax}(a, b) > \mathrm{max}(a, b)
  2. 证明λ1RealSoftMax(λa,λb)>max(a,b)\lambda^{-1} \mathrm{RealSoftMax}(\lambda a, \lambda b) > \mathrm{max}(a, b)成立,前提是λ>0\lambda > 0
  3. 证明对于λ\lambda \to \infty,有λ1RealSoftMax(λa,λb)max(a,b)\lambda^{-1} \mathrm{RealSoftMax}(\lambda a, \lambda b) \to \mathrm{max}(a, b)
  4. soft-min会是什么样子?
  5. 将其扩展到两个以上的数字。

首先,让我们澄清一下Softmax函数和RealSoftMax函数的定义:

  • Softmax 函数通常是指将实数向量转换为有效概率分布的指数函数。对于向量 z\mathbf{z} 中的元素 ziz_i,Softmax函数定义为: σ(zi)=ezijezj\sigma(z_i) = \frac{e^{z_i}}{\sum_{j} e^{z_j}}

  • RealSoftMax 函数,根据你的描述,定义为: RealSoftMax(a,b)=log(exp(a)+exp(b))\mathrm{RealSoftMax}(a, b) = \log (\exp(a) + \exp(b))

现在,让我们逐一解答你的问题:

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

由于 max(a,b)\mathrm{max}(a, b) 要么等于 aa 要么等于 bb,并且 exe^x 是一个严格单调递增函数,我们可以写出:

exp(a)>0,exp(b)>0\exp(a) > 0, \quad \exp(b) > 0

因此:

exp(a)+exp(b)>exp(max(a,b))\exp(a) + \exp(b) > \exp(\mathrm{max}(a, b))

取自然对数后,由于对数函数是严格单调递增的:

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

RealSoftMax(a,b)>max(a,b)\mathrm{RealSoftMax}(a, b) > \mathrm{max}(a, b)

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

由于 λ>0\lambda > 0

RealSoftMax(λa,λb)=log(exp(λa)+exp(λb))\mathrm{RealSoftMax}(\lambda a, \lambda b) = \log (\exp(\lambda a) + \exp(\lambda b))

=λa+log(1+exp(λbλa))= \lambda a + \log (1 + \exp(\lambda b - \lambda a))

由于 log(1+x)\log (1 + x) 是严格单调递增的,并且 λbλa\lambda b - \lambda a 可以是正的或负的,我们有:

log(1+exp(λbλa))>0\log (1 + \exp(\lambda b - \lambda a)) > 0

因此:

λa+log(1+exp(λbλa))>λa\lambda a + \log (1 + \exp(\lambda b - \lambda a)) > \lambda a

λ1RealSoftMax(λa,λb)>a\lambda^{-1} \mathrm{RealSoftMax}(\lambda a, \lambda b) > a

同理,我们也可以得到:

λ1RealSoftMax(λa,λb)>b\lambda^{-1} \mathrm{RealSoftMax}(\lambda a, \lambda b) > b

因此:

λ1RealSoftMax(λa,λb)>max(a,b)\lambda^{-1} \mathrm{RealSoftMax}(\lambda a, \lambda b) > \mathrm{max}(a, b)

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

λ\lambda 趋向于无穷大时:

如果 a>ba > b,则 λaλb\lambda a \gg \lambda b,所以:

exp(λa)exp(λb)\exp(\lambda a) \gg \exp(\lambda b)

RealSoftMax(λa,λb)log(exp(λa))=λa\mathrm{RealSoftMax}(\lambda a, \lambda b) \approx \log(\exp(\lambda a)) = \lambda a

因此:

λ1RealSoftMax(λa,λb)a\lambda^{-1} \mathrm{RealSoftMax}(\lambda a, \lambda b) \approx a

同理,如果 b>ab > a,则:

λ1RealSoftMax(λa,λb)b\lambda^{-1} \mathrm{RealSoftMax}(\lambda a, \lambda b) \approx b

所以,无论 aabb 的值如何,当 λ\lambda 趋向于无穷大时:

limλλ1RealSoftMax(λa,λb)=max(a,b)\lim_{\lambda \to \infty} \lambda^{-1} \mathrm{RealSoftMax}(\lambda a, \lambda b) = \mathrm{max}(a, b)

4. Soft-min会是什么样子?

Soft-min函数可以看作是Softmax函数的逆过程,它将概率分布转换回原始的实数向量。Soft-min函数可以定义为:

Soft-min(p)=log(ipiezi)log(iezi)\text{Soft-min}(\mathbf{p}) = \log \left( \sum_{i} p_i \cdot e^{\mathbf{z}_i} \right) - \log \left( \sum_{i} e^{\mathbf{z}_i} \right)

其中 p\mathbf{p} 是由Softmax函数计算出的概率分布,z\mathbf{z} 是原始的实数向量。

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

对于两个以上的数字 a1,a2,,ana_1, a_2, \ldots, a_n,RealSoftMax函数可以递归定义为:

RealSoftMax(a1,a2,,an)=log(i=1nexp(ai))\mathrm{RealSoftMax}(a_1, a_2, \ldots, a_n) = \log \left( \sum_{i=1}^{n} \exp(a_i) \right)

这个扩展保持了RealSoftMax函数的性质,即对于任意 λ>0\lambda > 0nn 个数 a1,a2,,ana_1, a_2, \ldots, a_n

λ1RealSoftMax(λa1,λa2,,λan)>max(a1,a2,,an)\lambda^{-1} \mathrm{RealSoftMax}(\lambda a_1, \lambda a_2, \ldots, \lambda a_n) > \mathrm{max}(a_1, a_2, \ldots, a_n)

并且当 λ\lambda \to \infty 时:

limλλ1RealSoftMax(λa1,λa2,,λan)=max(a1,a2,,an)\lim_{\lambda \to \infty} \lambda^{-1} \mathrm{RealSoftMax}(\lambda a_1, \lambda a_2, \ldots, \lambda a_n) = \mathrm{max}(a_1, a_2, \ldots, a_n)