损失函数是神经网络设计中的重要一环。在神经网络的设计中,输出层的使用的激活函数和模型损失函数是根据实际问题设计的。本文以最大似然估计为理论基础,阐述回归问题、二分类问题和多分类问题中输出层的激活函数和模型损失函数的选择。
符号定义:
训练集特征$\matrix {X}=\{x^{(1)},x^{(2)} \dots x^{(N)} \}$ ,第$n$个样本的属性特征向量为$x^{(n)}$ ;
训练集目标值 $T=\{t^{(1)}, t^{(2)} \dots t^{(N)} \}$ ,第$n$个样本的label值为$t^{(n)}$ ;
如果是回归问题:$t^{(n)}$为一个实数;
如果是分类问题:$t^{(n)}$为一个one-hot编码向量,如二分类中第$i$个样本属于第0个类别时$t^{(n)}=(1, 0)$ 或者$t_0^{(n)}=1, t_1^{(n)}=0$ 。$X$和$T$共同组成了训练集。
通过一个模型$y=y(x, w)$ 进行预测:根据样本的属性特征$x^{(n)}$预测样本的label值,预测值为$y$ ,预测值的集合为$Y=\{y^{(1)},y^{(2)} \dots y^{(N)} \}$
如果是回归问题:预测值$y$为一个实数;
如果是分类问题,预测值$y$为一个向量,各维度通常为概率值。如逻辑回归(二分类)(0.3, 0.7)、softmax(多分类)(0.1, 0.2, 0.7)。损失函数$E(\theta) = g(T, Y)$ 是用来衡量模型预测值和样本真实值相近程度的,模型预测值和样本真实值越相近,则模型越好。其中$Y$ 是通过参数为$\theta$的模型预测得到的。(当然还有正则化问题,本文先不考虑正则化)
note: 下文中的上标表示样本在样本在样本集中的序号,下标表示向量的序号。在必要的时候为了使公式简洁会省略上标
1. Maximum Likehook Estimator
最大似然函数应该是机器学习中最为常见的损失函数了。
最大似然理论认为,样本从服从分布$p(\theta)$ 的总体随机抽取的($\theta$是分布的参数,未知的):
那么样本集中的每个样本也服从于分布$p(\theta)$ 。 即:
$$
p(t) = p(t|\theta)
$$
这个分布$p(\theta)$是能够使样本的联合分布最大的分布。 即:
$$
p(T| \theta) =\prod_{n=1}^N {p(t^{(n)}|\theta)}
$$
该公式称为似然函数(Likehook Function)。由于分布$p(\theta)$是以$\theta$为参数的,也就是说未知数$\theta$是能够使似然函数最大的$\theta_{ML}$:
$$
\theta_{ML}={\arg\max}_\theta \prod_{n=1}^N {p(t^{(n)}|\theta)}
$$
对两边取对数得 对数似然函数 (Log Likehook Function):
$$
\begin {aligned}
\ln p(T| \theta) &=\sum_{n=1}^N \ln{p(t^{(n)}|\theta)} \\
\theta_{ML} &={\arg\max}_\theta \sum_{n=1}^N \ln{p(t^{(n)}|\theta)}
\end {aligned}
$$
我们常见的多种损失函数都可以通过这个最大似然理论推导获得。其区别在于对$p(\theta)$的不同解释方式。
2. 回归问题
在回归问题中,可以认为$\theta$是由变量$x^{(i)}$和回归模型参数$w$组成的。并且目标值$t$服从高斯分布。
$$
p(t|x,w)=N(t|y(x,w),\beta^{-1})
$$
$\beta$为高斯噪声。
那么其似然函数和对数似然函数为:
$$
\begin {aligned}
p(T|X,w) &=\prod_{n=1}^N N(t^{(n)}|y(x^{(n)},w),\beta^{-1}) \\
\\
\ln p(T|X,w)&=\sum_{n=1}^N \ln N(t^{(n)}|y(x^{(n)},w),\beta^{-1}) \\
&=\frac N2 \ln \beta -\frac N2 \ln(2\pi) - \beta E_D(w) \\
&=\frac N2 \ln \beta -\frac N2 \ln(2\pi) - N \beta E_{MSE}(w) \\
\\
E_D(w) &=\frac 12 \sum_{n=1}^N (t^{(n)} - y(x^{(n)} ,w))^2 \\
\\
E_{MSE}(w) &=\frac 1N \sum_{n=1}^N (t^{(n)} - y(x^{(n)} ,w))^2
\end {aligned}
$$
$E_D$就是被称为sum-of-squares error function的一种损失函数,$E_{MSE}$就是被称为mean squared error function(MSE)的一种损失函数 。使对数似然函数最大值$w$就是使$E_D$或$E_{MSE}$最小的$w$ 。(在模型训练过程中,我们更关心的是模型参数$w$,$\beta$也可以求解,此处就不提了,有需要的话可以参考PRML 3.1.1或5.2)
使似然函数或者$E_D$对$w$的导数为0,求得:
$$
w_{ML} = (X^TX)^{-1}X^TT
$$
这个公式就是最小二乘法的公式。
3. 二分类问题
在二分类问题中,可以认为$\theta$是由变量$x^{(i)}$和模型参数$w$组成的。并且目标值$t^{(i)}$服从Bernoulli distribution(伯努力分布,0-1分布)。$t^{(i)}$的取值为0或1。
使用神经网络处理二分类问题时,输出层通常使用sigmoid函数作为激活函数。而在传统的逻辑回归模型中也是使用的sigmoid函数。即:
$$
y = \sigma(a) \equiv \frac 1{1+exp(-a)}
$$
sigmoid函数的一个重要特性就是其输出值表示的是概率,即:$y(x,w)$表示取$t=1$的概率,而$(1-y(x,w))$表示取$t=0$的概率。所以对于任何一个样本$\{ x,t \}$ 满足参数为$y(x,w)$的伯努力分布:
$$
p(t|x,w)=y(x,w)^t \{1-y(x,w)\}^{(1-t)}
$$
那么其似然函数和对数似然函数为:
$$
\begin {aligned}
p(T|X,w) &= \prod_{n=1}^N y(x^{(n)},w)^{t^{(n)}} \{1-y(x^{(n)},w)\}^{(1-t^{(n)})} \\
\\
\ln p(T|X,w)&= \sum_{n=1}^N \{ t^{(n)} \ln y(x^{(n)},w) + (1-t^{(n)}) \ln [1-y(x^{(n)},w)]\} \\
\\
E(w) &= - \ln p(T|X,w) \\
&= - \sum_{n=1}^N \{ t^{(n)} \ln y(x^{(n)},w) + (1-t^{(n)}) \ln [1-y(x^{(n)},w)]\}
\end {aligned}
$$
此处的$E(w)$就是我们常用到的交叉熵损失函数(cross-entropy error function) ,是对数似然函数的负数。
4. 多分类问题
首先介绍一下Multinoulli分布。在多分类问题中,样本的目标值有$K$种可能的互斥取值,所以每个目标值$t^{(n)}$可以使用$K$维向量的one-hot编码。如$K=6$,一个样本属于第3个类别,则$t_3=1, t_k=0,(1 \le k \le K ,k \ne 3)$,即:
$$
\begin {aligned}
& t =(0,0,1,0,0,0) \\
& \sum_{k=1}^K t_k = 1
\end {aligned}
$$
那么从总体抽样时,一个样本属于每个类别的概率也可以使用一个$K$维向量$\mu$表示,$\mu_k$表示$t_k = 1$的概率,且$\sum_{k=1}^K\mu_k =1$ 。
那么一个样本$t$服从的分布就是:
$$
\begin {aligned}
p(t) &= p(t | \mu) \\
&= \prod_{k=1}^K p(t_k= 1 | \mu_k) \\
&=\prod_{k=1}^K \mu_k^{ t_k}
\end {aligned}
$$
其中:
$$
\begin {aligned}
t &= (t_1,t_2 \dots t_K)^T \\
\mu &= (\mu_1,\mu_2 \dots \mu_K)^T
\end {aligned}
$$
使用神经网络处理多分类问题时,输出层通常使用softmax函数作为激活函数。即:
$$
y_k(x,w) = \frac {\exp(a_k(x,w))}{\sum_j^K \exp(a_j(x,w))} , (1 \le k \le K)
$$
softmax函数的一个重要特性就是其输出值表示的是概率,即:$y_k(x,w)$ 和上文的离散型分布中的$\mu_k$ 的意义是一样,都表示$t_k=1$的概率。所以对于任何一个样本$\{ x,t \}$ :
$$
\begin {aligned}
p(t|x,w) &=\prod_{k=1}^K y_k^{ t_k} \\
&=\prod_{k=1}^K y_k(x,w)^{ t_k}
\end {aligned}
$$
那么其似然函数和对数似然函数为:
$$
\begin {aligned}
p(T|X,w) & = \prod_{n=1}^N \prod_{k=1}^K y_k(x^{(n)},w)^{ t_k^{(n)}} \\
\\
\ln p(T|X,w) & = \sum_{n=1}^N \sum_{k=1}^K t_k^{(n)} \ln y_k(x^{(n)},w)\\
\\
E(w) & = - \ln p(T|X,w) \\
& = - \sum_{n=1}^N \sum_{k=1}^K t_k^{(n)} \ln y_k(x^{(n)},w)
\end {aligned}
$$
此处的$E(w)$就是我们常用到的交叉熵损失函数(cross-entropy error function) ,是对数似然函数的负数。
二分类问题可以看做是一种特殊的多分类问题,所以在神经网络中也可以使用softmax函数作为二分类问题的输出层激活函数。
5. 总结
以上损失函数都是基于最大似然估计推导的,最大似然估计最吸引人的地方在于,它被证明当样本数目$N \to \infty$ 时,就收敛率而言是最好的渐近估计。在合适的条件下,当训练样本数目趋向于无穷大时,参数的最大似然估计会收敛到参数的真实值,这个条件就是:
- 真实分布必须在模型分布族中,否则无法估计正式分布。如在处理回归问题是,我们假设真实分布是一个高斯分布,求解过程就是估计高斯分布的参数的,但是如果真实分布不是高斯分布,那么我们按照高斯分布来求解,得到的结果肯定就是错误的。
- 真实分布必须刚好对应一个模型分布的$\theta$值,
神经网络中针对于不同问题使用的输出层激活函数是不同的,进而使用不同的损失函数:
输出层分布 | 输出层激活函数 | 输出层神经元数量 | 损失函数 | |
---|---|---|---|---|
回归 | Gaussian | identity | 1 | sum-of-squares error function / MSE |
二分类 | Bernoulli | sigmoid | 1 | cross-entropy error function |
多分类 | Multinoulli | softmax | K | cross-entropy error function |
二分类问题可以看做是一种特殊的多分类问题,所以输出层激活函数也可以使用softmax,损失函数使用多分类的 cross-entropy error function。
其他:
还有针对于其他问题的设计,如:multiple target variables。当遇到的时候再补充
参看资料
Deep Leaning
Pattern Recognition and Machine Learning