似然估计

对于一个神经网络,损失函数是整个反向传播过程的起点。也是网络训练任务的核心,然而我们得到均方误差、交叉熵等损失函数的过程,本质上都可以看成是最最大似然估计的过程。

假设我们一直抛掷一枚硬币时正面朝上的概率为 0.5,反面朝上的概率也为 0.5。现在连续抛 10 次影片,求出现 7 次正面朝上,3 次反面朝上的可能性。

在这个描述中,我们可以把整个抛硬币的环境看作一个模型,硬币正反面出现的概率看作为模型的参数,抛 10 次硬币得到的结果看作是实际发生的事件。这种已知模型参数预测事件发生可能性的过程,为求概率过程。

假如我们不知道硬币正面反面朝上的概率,但是通过随机抛 10 枚硬币,发现其中有 7 次正面朝上,3 次反面朝上,可以尝试根据抛硬币的结果,预测出硬币正反面出现的概率值。这种已知事件发生的结果,反向推理出模型的参数值的过程,为求似然的过程。

假设硬币正面朝上的概率为 \(\theta\),则反面朝上的概率为 \(1-\theta\),假设抛硬币为独立同分布的事件,那么事件发生的联合概率可以写作\(L(\theta)=\theta^7\times(1-\theta)^3\),将得到的这个关于\(\theta\)的函数称为似然函数。

找到一个\(\theta\)使得似然函数取最大值的过程,就是求得最大似然估计得过程。对于\(L(\theta)\),可以发现当\(\theta==0.7\)时,获得最大似然估计值。

\[ \theta^*=\arg \max_{\theta}L(\theta) \]

当我们想要取得更为准确的估计结果,可以增加抛硬币的次数,数据越多,得到的最大自然估计值就越接近真实值。

总结:求概率的过程是已知模型参数,计算数据发生的可能性,求似然的过程是已知数据发生的情况,去评估不同模型参数的可能性。其中,求出特定参数,是的数据发生可能性最大的过程,为求去最大似然估计的过程。

但是,观察到我们的似然看书可以看到,似然函数是一些列概率的连乘,由于每个概率值的取值范围均为0~1。故当多个概率连乘时,会使得结果值逐渐下溢到 0,且由于原始乘法链条再求解最大似然估计过程中,求导较为麻烦,通常会对似然函数进行对数操作,将乘法链条转化为加法链条。这样既保证了数值的稳定,避免了连乘效应导致的下溢问题,又大大简化了似然函数的求导过程。

\[ \begin{aligned} \log(L(\theta)) &= \log(\theta^m(1-\theta)^n)\\ &=m\log(\theta)+n\log(1-\theta) \end{aligned} \]

此外,由于对数函数为单调递增函数,当\(\theta_1>\theta_2\)时,\(L(\theta_1)>L(\theta_2)\)

\[ \begin{aligned} L(\theta_1)&>L(\theta_2)\\ \log(L(\theta_1))&>\log(L(\theta_2)) \end{aligned} \]

因此对似然函数取对数,并不会改变最大值的位置。

\[ \arg\max_{\theta}L(\theta) = \arg\max_{\theta}logL(\theta) \]

似然估计推导损失函数

假如有一个神经网络,令输入值为\(x_i\),模型的参数为\(\theta\)

\[ \theta=(w^1_{11},...,b^1_{1},...,w^2_{11},...,b^2_1,...,w^3_{11},...,b^3_1) \]

输出的预测值为\(y\),真实值为\(y_i\)。那么模型成功预测出真实值的条件概率可以用这个公式进行表示:

\[ p(y_i|x_i;\theta) \]

即输入为\(x_i\),参数为\(\theta\)的条件下得到真实值\(y_i\)的概率。

假如数据时独立同分布的,对所有的训练数据写出似然函数:

\[ L(\theta)=\prod_{i=1}^{n}P(y_i|x_i;\theta) \]

对似然函数取对数则得到对数似然表达式:

\[ \log{L(\theta)} = \sum_i^n \log P(y_i|x_i;\theta) \]

最大似然估计的目标是求当 \(\theta\) 取何值之时对数似然函数的值最大。我们假设神经网络处理的是一个回归任务,\(y_i\)为连续变量,假设预测出\(y_i\)的条件概率,在给定输入\(x_i\)\(\theta\)时,服从一个以预测值\(\hat{y}\)为均值,\(\sigma^2\)为方差的高斯分布。

\[ \begin{aligned} P(y_i|x_i;\theta) &= P(y_i|\hat{y_i};\sigma^2)\\ &=\frac{1}{\sqrt{2\pi \sigma^2}}\exp(-\frac{(y_i-\hat{y_i})^2}{2\sigma^2}) \end{aligned} \]

则对数似然函数可以写成如下的形式:

\[ \begin{aligned} \log{L(\theta)} &= \sum_{i=1}^n\log P(y_i|x_i;\theta)\\ &=\sum_{i=1}^n(-\frac{1}{2}\log(2\pi \sigma^2)-\frac{(y_i-\hat{y_i})^2}{2\sigma^2})\\ &=-\frac{n}{2}\log(2\pi \sigma^2)-\frac{1}{2\sigma^2}\sum_{i=1}^n(y_i-\hat{y_i})^2 \end{aligned} \]

其中,\(-\frac{n}{2}\log(2\pi \sigma^2)\)是常数项,第二项的系数\(\frac{1}{2\sigma^2}\)也是常数,可以忽略,故简化后的对数似然函数可以写成如下的形式:

\[ \log{L(\theta)} = -\sum_{i=1}^n(y_i-\hat{y_i})^2 \]

因为最大化似然函数可以等价于最小化似然函数的负数,因此,可以将前面的负号省去,将整个式子改写成如下的形式:

\[ \arg \max_\theta \log L(\theta) = \arg \min_\theta - \log (L(\theta)) \\ -\log{L(\theta)} = \sum_{i=1}^n(y_i-\hat{y_i})^2 \]

而这个式子即我们平时常用的均方误差损失函数(MSE):

\[ Loss_{MSE} = \sum_{i=1}^n(y_i-\hat{y_i})^2 \]

对于二分类的逻辑回归问题,比如输入一张图片,图片分为猫和狗两类,用标签 1 表示图片为猫,用标签0表示图片为狗。对于网络输出值,我们通常会使用sigmoid函数进行一次后处理,讲网络的输出值限定在以0.5为中心,0~1的范围内。方便我们后续以该值作为分类的依据,当输出值越接近1时,认为图片属于猫的置信度越高,月接近0,图片属于狗的置信度越高。

\[ \hat{y}=f(z)=\frac{1}{1+e^{-z}} \]

由于在二分类任务中,\(y_i\)的期望值只有0和1,我们可以写出单次预测的概率表达式:

\[ P(y_i|x_i;\theta) \\ P(y_i=1|x_i;\theta)=\hat{y_i}\\ P(y_i=0|x_i;\theta)=1-\hat{y_i} \\ \]

其分别表示,当给定输入\(x\)和参数\(\theta\)时,输出类别为1的概率于输出类别为0的概率。将上面两个式子统一起来,每个样本的预测概率表达式可以写作以下形式:

\[ P(y_i|x_i;\theta)=\hat{y_i}^{y_i}(1-\hat{y_i})^{1-y_i} \]

实际上就是当\(y_i\)服从播努利分布时概率的表达,将单个样本的概率带入到对数似然函数。

\[ \begin{aligned} \log L(\theta)&=\sum^n_{i=1}\log P(y_i|x_i;\theta) \\ &=\sum^n_{i=1}\log (\hat{y_i}^{y_i}(1-\hat{y_i})^{1-y_i})\\ &=\sum^n_{i=1}y_i \log \hat{y_i}+(1-y_i)\log(1-\hat{y_i}) \end{aligned} \]

添加负号,将最大值问题转为求最小值,就得到了我们熟悉的交叉熵损失函数在二分类问题中的表达形式了

\[ \arg\max_{\theta}\log L(\theta) = \arg\min_{\theta}-\log L(\theta) \]

\[ \begin{aligned} Loss_{BCE}&=-\log L(\theta)\\ &= -\sum^n_{i=1}y_i \log \hat{y_i}+(1-y_i)\log(1-\hat{y_i}) \end{aligned} \]

进一步将二分类任务拓展到多分类问题,例如四分类,可以使用softmax函数,将网络输出值转换为概率值

\[ \hat{y}=f(z)=\frac{e^j}{\sum^K_je^j} \]

我们可以写出第 i 个样本属于第 k 类的表达式:

\[ P(y_i==k|x_i;\theta)=\hat{y_{ik}}=\frac{e^j}{\sum^K_je^j} \]

当我们使用one-hot标签时,如果第 i 个样本属于第 k 类,则仅有\(y_{ik}\)为1,其他为0。因此,对单个样本的概率表达式可以改写成以下形式,其保证了只有正确的类别k会被激活:

\[ P(y_i|x_i;\theta) = \prod^{K}_{k=1}\hat{y_{ik}}^{y}_{ik} \]

根据上式写出对数似然函数:

\[ \begin{aligned} \log L(\theta)&=\sum^n_{i=1}\log P(y_i|x_i;\theta) \\ &=\sum^n_{i=1}\sum^K_{k=1}y_{ik}log\hat{y}_{ik} \end{aligned} \]

将最大值问题转化为求最小值,就可以得到一般形式的交叉熵损失函数了

\[ \arg\max_{\theta}\log L(\theta) = \arg\min_{\theta}-\log L(\theta)\\ \begin{aligned} Loss_{CE}&=-\log L(\theta) \\ &=\sum^n_{i=1}\sum^K_{k=1}y_{ik}log\hat{y}_{ik} \end{aligned} \]

总结,本篇博客完成了最大似然统计及其对损失函数的推理内容。