本次笔记主要是对《深度学习》一书第六章的一些知识点做一定程度的补充说明。这些知识点大部分都来自6.2节
最大似然与交叉熵的关系
本节是参照一些概念定义对教材5.5节的扩展
电子版154页提到:
大多数现代的神经网络使用最大似然来训练。这意味着代价函数就是负的对数似然,它与训练数据和模型分布间的交叉熵等价
这个推导实际上出现在书的第5.5节“最大似然估计”。在书的第3.13节“信息论”中,曾经给出了交叉熵的一个定义:假设对同一个随机变量\(\rm x\)有两个单独的概率分布\(P({\bf x})\)和\(Q({\rm x})\),则交叉熵的定义为 \[ H(P, Q) = -\mathbb{E}_{ {\rm x} \sim P}\log Q(x) \] 具体应用到最大似然上,首先,假设有一个真实的数据分布\(p_{\rm data}({\bf x})\),根据这个分布,可以生成一些可以观测到的样本\(\boldsymbol{x}^{(i)}\)。这些被观测到的样本组成了数据集\(\mathbb{X}\),但是并不知道真实的数据分布是什么样的。因此,对每个样本\(\boldsymbol{x}\),也就不知道其真实的概率\(p_{\rm data}(\boldsymbol{x})\)。但是,可以对这个值进行估计,做法就是在相同的空间上定义一个由参数\(\boldsymbol{\theta}\)指定的分布族。当分布族确定,分布族的参数\(\boldsymbol{\theta}\)确定以后,就可以说这时候确定了一个模型(注意这个模型是一个概率模型,不能与其它机器学习模型,例如决策树等等,相混淆)。有了模型,就可以对每个样本\(\boldsymbol{x}\)计算其在这个模型中出现的概率\(p_{\rm model}(\boldsymbol{x};\boldsymbol{\theta})\),进而用这个模型概率去估计真实概率
在有了分布族和已知样本以后,反过来如何求解合适的参数\(\boldsymbol{\theta}\)就成了最关键的问题。这里,需要引入似然函数的概念。所谓似然函数,就是一种关于统计模型中的参数的函数,通常定义为 \[ {\rm lik}(\boldsymbol{\theta}) = f_D(\boldsymbol{x}_1, \ldots, \boldsymbol{x}_m|\boldsymbol{\theta}) = p_{\rm model}(\mathbb{X}; \boldsymbol{\theta}) \] 求似然函数对参数\(\boldsymbol{\theta}\)的一阶导数,令其等于0,可以使似然函数取最大值。这个使似然函数取得最大值的\(\hat{\boldsymbol{\theta}}\)就是\(\boldsymbol{\theta}\)的最大似然估计。通常做法为 \[ \begin{align*} \boldsymbol{\theta}_{\rm ML} &= \mathop{\rm arg max}_\boldsymbol{\theta} p_{\rm model}(\mathbb{X};\boldsymbol{\theta}) \\ &= \mathop{\rm arg max}_\boldsymbol{\theta} \prod_{i=1}^m p_{\rm model}(\boldsymbol{x}^{(i)};\boldsymbol{\theta}) \end{align*} \] 由于通常情况下,\(p_{\rm model}(\boldsymbol{x}^{(i)};\boldsymbol{\theta})\)都是一个非常小的值,而\(m\)一般会非常大,因此连乘就会出现计算下溢,很快被近似为0。为了避免这种现象,可以对整个连乘项求对数,这样就把原来的小数连乘问题转化成了一些负数的连加问题,降低了计算下溢的风险。因此 \[ \boldsymbol{\theta}_{\rm ML} = \mathop{\rm arg max}_{\boldsymbol{\theta}}\sum_{i=1}^m \log p_{\rm model}(\boldsymbol{x}^{(i)};\boldsymbol{\theta}) \] 将上式除以\(m\)并不会改变最后的结果,而且会得到一个与期望相关的式子 \[ \boldsymbol{\theta}_{\rm ML} = \mathop{\rm arg max}_{\boldsymbol{\theta}}\mathbb{E}_{ {\bf x} \sim \hat{p}_{\rm data}} \log p_{\rm model}(\boldsymbol{x};\boldsymbol{\theta}) \] 注意这里还不能说\({\bf x} \sim p_{\rm data}\),因为真实数据集可能是无限的,只能通过有限的取样,用有限来近似无限。所以这里\(\bf x\)服从的分布是来自训练数据的经验分布。由于使\(f(x)\)取最大值的\(x\)也会使\(-f(x)\)取最小值,因此 \[ \boldsymbol{\theta}_{\rm ML} = \mathop{\rm arg min}_{\boldsymbol{\theta}}-\mathbb{E}_{ {\bf x} \sim \hat{p}_{\rm data}} \log p_{\rm model}(\boldsymbol{x};\boldsymbol{\theta}) \] 上式可以很容易地扩展到估计条件概率\(P({\bf y}|{\bf x};\boldsymbol{\theta})\),从而根据给定的\(\bf x\)预测\(\bf y\)。如果假设样本独立同分布,将训练数据的经验分布\(\hat{p}_{\rm data}\)看作是分布\(P\),模型定义的分布\(p_{\rm model}(\boldsymbol{y} |\boldsymbol{x};\boldsymbol{\theta})\)看作是分布\(Q\),就得到了最开始交叉熵的定义。因此“负的对数似然与训练数据和模型分布间的交叉熵等价”,得到6.12式所示的代价函数 \[ J(\boldsymbol{\theta}) = -\mathbb{E}_{ {\bf x, y} \sim \hat{p}_{\rm data}}\log p_{\rm model}(\boldsymbol{y}|\boldsymbol{x}) \] 这里模型的分布\(p_{\rm model}\)是根据要解决的问题而定义。常见的包括正态分布、伯努利分布和多元伯努利分布等
关于softmax一些性质的具体解释
softmax与max之间的关系
电子版教材第160页提到:
为了对第二项\(\log \sum_j \exp(z_j)\)有一个直观的理解,注意到这一项可以大致近似为\(\max_jz_j\)
对于这个结论,我一直想找一个更严谨的证明,但是却没有成功。根据维基百科的说法,更严格地说,\(\log \sum_j \exp(z_j)\)这个函数(记为\(\rm LSE\))有上界和下界 \[ \max z_j \le {\rm LSE}(z_j) \le \max z_j + \log(n) \] 其中\(n\)是变量的个数
当然,从直观上,这个结论也可以理解。当\(z_j\)很大的时候,\(\exp(z_j)\)会变得更大,同时使\(\exp(z_i), i \not= j\)变得很小,这样\(\exp(z_j)\)会为求和项做出大量贡献,使得\(\rm LSE\)的结果偏向\(z_j\)。不过笔者做了一些实验,发现\(\rm LSE\)的值和\(\max z_j\)之间的差距还不太能忽略
softmax的不变性
电子版教材6.32式给出了softmax函数的一个性质
\[ {\rm softmax}(\boldsymbol{z}) = {\rm softmax}(\boldsymbol{z} + c) \]
这个性质可以如下证明 \[ \begin{aligned} {\rm softmax}(\boldsymbol{z} + c) &= \frac{e^{\boldsymbol{z}_i+c}}{\sum_j e^{\boldsymbol{z}_j+c}} = \frac{e^{\boldsymbol{z}_i}e^c}{\sum_j e^{\boldsymbol{z}_j}e^c} = \frac{e^ce^{\boldsymbol{z}_i}}{e^c\sum_j e^{\boldsymbol{z}_j}} \\ &= \frac{e^{\boldsymbol{z}_i}}{\sum_j e^{\boldsymbol{z}_j}} = {\rm softmax}(\boldsymbol{z}) \ \ \ \blacksquare \end{aligned} \]