熵、softmax以及泛化误差。

从熵的最原始定义出发,解释softmax函数以及泛化误差公式背后的原理,并分析机器学习为什么要将这些限制条件视为刚需。
\[\]
首先考虑这样一个场景:
你有一个质量=1克的球,将该球以速度v扔进一个机器,机器的内部原理不可见,但随后机器会自动将该球投入K个篮筐之中的一个。这样就构成了一个 输入x=(质量, 速度),输出y=f(x)的模型。
假设宇宙中所有质量=1的球的数量固定,一共N个。如果把它们都以相同的速度往机器里扔一次,那么你可以获得一个维度=K的概率分布$(p_k=p(y=k)$。之所以是概率分布,是因为你不知道黑箱机器里是否有一些机制能对不同表面材质或不同电荷数的球产生不同的影响。材质与电荷都不在你的可观测输入里,所以它们在输出y上产生了一些噪音。
\[\]
熵的最原始定义,就是描述一个体系内的混乱程度N个球分配进K个篮筐,假设每个篮筐包含的球个数分别是$\{n_1, n_2, …n_K\}$,且球与球之间的结果相互独立,那么要如何描述该系统的熵呢?热力统计学里给出的熵的标准定义,源头使用到了“系统内的状态排列组合数量”,用$\Omega$表示,这里$\Omega_{sys}=\frac{N!} {n_1!n_2!…n_K!}$,即把N个输入相同的样本放进K个篮筐并且获得等同于目标概率分布的排列组合数量。这些状态中的每一种,在输出y的表征层内,都是等价的K维概率分布,区别可能只在于2号篮筐的31号球与8号篮筐的142号球交换了一下位置,并不影响可观测的概率分布。系统的混乱程度,是由系统内满足约束条件的排列组合数量决定的,数量越多,系统越混乱
\[\]
由于我们无法真正找到所有质量=1的球来做实验,即使找来了所有的球,也不可能重复几乎无限次实验来找到所有的排列组合并统计数量。这种无法集齐的系统状态的集合,被叫做微正则系统(microcanonical ensemble)。我们能观测到的只是这N个样本的概率分布,在均匀采样情况下的近似。我们相信N是有限个且数量非常大。所以可以使用Stirling近似来展开上面排列组合的式子:
$$ln\Omega_{sys}=lnN!-ln\prod_{k=1}^Kn_k! \approx NlnN-N – \sum\limits_{k=1}^K (n_klnn_k – n_k)$$
$O(lnN)$与$-\sum O(ln n_k)$部分在大数条件下已经相互抵消,式子中$-N$与$\sum\limits_{k=1}^K n_k$也可以抵消,所以剩下
$$left = NlnN- \sum\limits_{k=1}^K n_klnn_k = NlnN – \sum\limits_{k=1}^K n_k ln \frac {n_k} {N} – \sum\limits_{k=1}^K n_k ln N$$
第一项与第三项又再次抵消,只剩下第二项
$$ln\Omega_{sys} = – N \sum\limits_{k=1}^K \frac {n_k} {N} ln \frac {n_k} {N} = -N \sum\limits_{k=1}^K p_klnp_k$$
左边是整个系统的热力统计学定义的熵,排列组合数量取ln。右边是N个样本乘以每个样本平均拥有的熵,以概率这种最常见的形式表现。
\[\]
为什么要把常见的还原成更加基础的热力统计学定义的形态呢?因为这玩意根据热力学第二定律,在封闭系统处于热平衡状态时是会被最大化的。这正是能量模型的优化目标
\[\]
首先说明一下原先约束条件有哪些:
  1. 所有具有相同输入的样本,不管是能搜集到的还是无法搜集到的,存在一个固定的总数量N
  2. K个分类下的概率被归一化,每个分类下概率大小正比于该分类下的样本数$n_k$

基于以上的假设,新增以下这些约束,从而补全成为了能量模型的假设条件:

  1. 必须解除每个篮筐内的小球个数$n_k$的约束,允许小球自由在不同篮筐内“跳槽”,否则$p_k$分布锁定了,熵也就被固定了无法最大化了。
  2. 将约束替换为每个篮筐内的能量,且规定K个篮筐内总能量守恒$const=U=\sum\limits_{k=1}^KE_k$
  3. 每个k分类下的小球,在跳槽时都会携带属于他的一份能量$\epsilon_k = E_k / n_k$去往新篮筐,以维持能量守恒。

前面我们分析离散排列组合时,将$\Omega_{sys}(n_1, n_2, …n_K)$写成了组合C的公式的形式,然而要使用求导的方式最大化$\Omega_{sys}$,离散的$n_k$不太方便,于是我们利用上了N以及$n_k$非常大的特性,让$\epsilon_k$足够小,使得$\Omega_{sys}=\Omega_{sys}(\epsilon_1n_1, \epsilon_2n_2, …\epsilon_Kn_K)=\Omega_{sys}(E_1,E_2,…E_K)$足够连续。变量从n变成了E,所以约束就必须从概率分布转为能量分布。

\[\]

当$\Omega_{sys}$被最大化时的能量分布$E_k$,实际上是可以观测的,深度学习里我们经常使用神经网络来拟合出这个能量分布。熵被最大化时达到了热平衡状态,于是这种具有可观测的稳定能量分布的,且能量与概率都守恒的封闭系统,被叫做巨正则系统(macrocanonical ensemble)。

\[\]

能量模型最后一条假设,也是最关键的一条,就是:
一个巨正则系统中,只要是满足能量约束的小球跳槽行为,就是随机无偏的。一个3号篮筐的小球,跳槽到4号篮筐与5号篮筐的倾向程度是一样的,不同的是“能量汇率”$\frac {\epsilon_3} {\epsilon_4} \neq \frac {\epsilon_3} {\epsilon_5}$不相等的情况下,为了保证能量约束而从4号与5号篮筐分别置换回来的小球数量也会有不同。然后导致$n_3$的小球数量发生改变,从而影响3号篮筐与其他篮筐的汇率。
\[\]
上面的一整套看起来十分复杂的规则,想要达成的目的实际上只有一个,那就是无论你已经获取了什么输入信息,即使你已经搜集齐了宇宙里所有质量=1的小球,并且都以相同精确的速度扔进模型里,完全掌握了质量和速度的输入信息之后,能量模型依然假设哪些未知的信息,例如电荷和材质,会给你的模型输出带来最大的不确定性,且这种不确定性的方向是公平无偏的。你使用质量和速度计算出了每个篮筐内的能量约束,但是模型依旧会在满足你的约束的条件下让这批样本在篮框内的“合法”排列组合数尽可能多。
\[\]
接下来就让我们推导一下$\Omega_{sys}(E_1,E_2,…E_K)$的模样吧。
选出一个篮筐i,只看i里面的组合数量$\Omega_{i}(E_i)=C_{N}^{E_i/\epsilon_i}<< \Omega_{sys}$应该是远小于整个系统的排列组合数量的,所以可以将篮筐i内的排列组合与i以外的排列组合数量拆分一下:
$\Omega_{sys}=\Omega_{i}(E_i) \Omega_{\neg i}(E_{\neg i})$,其中$ \Omega_{\neg i}(E_{\neg i})$是i以外的篮筐的排列组合数,能量满足$E_i = U – E_{\neg i} \Rightarrow \frac {\partial E_i} {\partial E_{\neg i}}=-1$
$$\frac {\partial \Omega_{sys}} {\partial E_i} = \Omega_{\neg i}\frac {\partial \Omega_{i}} {\partial E_i} + \Omega_i \frac {\partial E_{\neg i}} {\partial E_i} \frac {\partial \Omega_{\neg i}} {\partial E_{\neg i}} $$
使用分离变量法即可得到
$\frac {1} {\Omega_i} \frac {\partial \Omega_{i}}{\partial E_i} = const = \frac {1}{T_{eq}}$

注意到$\frac {\partial ln \Omega_i} {\partial E_i} = \frac {1} {T_{eq}} $,所以$T_{eq}$

正是能量与篮筐内排列组合数(熵)转化的比值。我们把这个叫做温度。eq代表了它正处于热平衡状态,所以每个篮筐的温度的温度都是一样的。只有当温度相同时,1个3号筐小球跳槽到4号筐后,如果再跳回来,才不会因为“能量汇率”的存在而实现熵的“套现”。这也就是为什么到达了热平衡后K个篮筐构成的封闭系统内总熵无法继续增加的原因。
\[\]
解得$\Omega_i \propto e^{-E_i/T_{eq}}$
之前说到能量函数的最重要的假设是“跳槽”无偏,所以每种符合约束的微正则系统的排列组合都会以相等的概率出现,且这批合法的微正则的概率会被归一化为1。
于是系统在$\Omega_{sys}$种状态中,能够呈现出$\Omega_i $中的任意一种概率就是$\frac {\Omega_i} {\sum\limits_{j=1}^{K}\Omega_{j}}$,而这时第i个篮筐内的样本数量就会是构成了$\Omega_i $种排列组合的$n_i$,尽管我们无法观测并测量到$n_i$,我们还是通过能量模型的能量约束,间接地求出了$n_i$占总量的比例,也就得到了概率
$$p_i=p_i(E_i) =\frac {e^{-E_i/T_{eq}}} {\sum\limits_{j=1}^K e^{-E_j/T_{eq}}}$$
上面的能量模型就是softmax函数的根本原理,在满足已知信息输入的能量向量编码已经给定的约束条件下,让宇宙中所有未知的但是被部分采样输入到模型里的其他信息,对输出结果的不确定性能够无偏最大化的一种模型。

\[\]
我们的分类模型输入x=(速度, 质量),输出$y \in \{L_0, L_1, L_2,… L_K\}$ 一共K种离散化的值。所以一共有K种可能的函数映射$g_i: x \rightarrow L_i \forall i \in \{1, 2, …,K\}$,这K种函数构成了一个描述了“有限的假设空间”的集合G,$g_i \in G$,空间大小$|G|=K$。如果去研究中间的隐藏层,而非最终输出层,那么隐藏层$f_i: x \rightarrow h_i$中涉及到的所有可能出现的$h_i$表征的值的数量会非常大,因为当h是连续表征向量的时候,我们只能按照最小精度$\Delta \rightarrow 0$将其离散化,得到的有限假设空间大小$|F| \gg |G|$。很多操作都可以限制h的取值范围,例如使用Relu删除F集合中所有h小于0的映射f、又例如离散化让一维变量中$\frac {h_{max} – f_{min}} {\Delta}$种可能的h值近似成K种g值。总之不管在哪一层,你总能用有限个映射函数,把一个输入映射到$|G|$种不同的特征值上。
\[\]
任选任意一种特征值$g_i$出来,之后假设训练集$\{x_1, x_2, …x_n\}$里一共包含n个样本,$n \ll N$,它们经过$g_i$后分别得到特征值$\{y_{i1}, y_{i2}, …y_{in}\}$。
使用Hoeffding不等式来描述特征值标量的risk:
$$Pr[|\frac {1} {n} \sum\limits_{j=1}^n y_{ij}-\mathbb{E}[y_i]| \gt \epsilon] \le \delta = 2e^{-\frac {2n\epsilon^2} {(a-b)^2}}$$
公式实际上就是中心极限定理,变量范围$a \le y_{ij} \le b$,一般可以把特征值normalize到a=0, b=1的区间从而忽视掉(a-b)的部分。
\[\]
中心极限定理在这里的声明就是:无论$y_i$是什么分布,只要是从该分布中均匀采样的n个$y_{ij}$,其n个样本计算的平均值与真实分布下的预期值的相差的绝对值,超过某个门槛$\epsilon$的概率就是正态分布曲线下积分得到的风险概率$\delta$。
稍微转换一下公式,当我们限定了风险概率为一个固定数值后,就可以转化为
$n\ge \frac {1}{2\epsilon^2} log \frac {2} {\delta}$
要想让$|\frac {1} {n} \sum\limits_{j=1}^n y_{ij}-\mathbb{E}[y_i]| \gt \epsilon$有不超过$\delta$的概率发生,就需要采样数量n满足上面的条件。
\[\]
再转换一下说法:
要想让n个样本的训练集里$|\frac {1} {n} \sum\limits_{j=1}^n y_{ij}-\mathbb{E}[y_i]| < \epsilon$以超过$1-\delta$的置信度发生,那么risk最大值门槛就满足$\epsilon \le \sqrt{ \frac {1} {2n} log \frac {2}{\delta}}$
最坏的情况下,仅仅在映射函数$g_i$中,我们会有$\delta$概率发生一次batch采样不满足$|\frac {1} {n} \sum\limits_{j=1}^n y_{ij}-\mathbb{E}[y_i]| \le \sqrt{ \frac {1} {2n} log \frac {2}{\delta}}$的误差门槛。
而整个模型里,我们一共有$|G|$个映射函数,要确保没有一个函数$g_i$会违反上面的“超过risk门槛”现象,就需要让每个函数“越界”的概率变成原本的$|G|$分之一,即$\delta := \frac {\delta} {|G|}$所以带入回上面的式子,得到无论y=g(x)被映射到了任何值时,都有$1-\delta$的置信度满足泛化误差小于等于门槛:
$$|\frac {1} {n} \sum\limits_{j=1}^n y_{j}-\mathbb{E}[y]| \le \sqrt{ \frac {1} {2n} log \frac {2|G|}{\delta}}$$
\[\]
$\delta$在不同的训练任务里基本上不会改变多少,能改变的只有$\sqrt{\frac {log|G|} {2n}}$。

要减少泛化误差,要么增加样本数量n,要么减少表征y的可取值种类数量$|G|$。如果是隐藏层h而非输出层y,那么就要减少$|F|$,原理是一样的。

注意到最开始我们定义熵的排列组合形式:

$S_{sys}=log\Omega_{sys}= log\frac{N!} {n_1!n_2!…n_K!}$,然后让n从N中均匀采样且数量固定,这样就可以把n当作N了。很明显降低$|G|=K$

会导致降低系统的熵,因为没有那么多篮筐来提供给n个样本进行各种排列组合了。
从另一个方向来讲,表征层的熵减,也会导致“有限的假设空间”大小$|G|$的减少,在相同的样本数量下提升模型的泛化能力。

\[\]
回想起前面的softmax,或许你开始有些奇怪了。缩小泛化误差要求熵减,但使用softmax又要让熵最大化,这两者的目的是不是冲突了?
实际上softmax的能量分布约束限制了熵最大化的空间。它必须遵照能够满足target分布的能量约束,换言之其实交叉熵损失函数最大化的并不是系统(神经网络)在第L层的表征的的熵$H(X^{(L)})$,而是系统与目标分布的互信息$I(X^{(L)}, Y)$。
然后泛化误差的需求的确是要降低$H(X^{(L)})$,所以两者并不是完全冲突,能够通过训练,收敛到一个平衡点的位置。具体的内容就要参照信息瓶颈理论了,另一篇文章会详细讲述,这里不过多赘述了。

发表评论

邮箱地址不会被公开。 必填项已用*标注