从后验概率到逻辑回归,从逻辑回归到神经网络

1. 后验概率

对于给定数据,我们首先假设数据是由某种分布产生的,这样,根据贝叶斯公式我们可以得到后验概率分布,将后验概率最大的类作为xx的类输出。后验概率计算根据贝叶斯定理进行:

(1)P(Y=ckX=x)=p(X=xY=ck)P(Y=ck)kp(X=xY=ck)P(Y=ck)P(Y=c_k|X=x) = {p(X=x|Y=c_k)P(Y=c_k) \over \sum_k p(X=x|Y=c_k)P(Y=c_k)} \tag 1

假设给定数据是由高斯分布生成的,我们希望对这组数据进行分类,首先考虑二分类的情况:

为什么使用高斯分布?

由于我们并不知道数据的真实分布,实际上我们可以假设任何一种分布。另外,根据中心极限定理,当数据量n足够大时,可以用正态分布逼近其它分布,这也是参数估计的理论基础。

我们知道,从一个高斯分布里面可以采样到空间内的任何一个点,但是在不同的高斯分布里,采样到这个点的几率是不同的。

比如:下图中的79个点分别属于两个分类,我们假设这些点可以从图中的两个高斯分布中采样得到,但是每个点从不同分布中采样出来的概率是不同的。

从后验概率到逻辑回归,从逻辑回归到神经网络

我们首先假设数据的分布,然后根据数据估计该分布的参数,得到数据的生成机制,叫做生成模型。

因为高斯分布是由μ\muΣ\Sigma确定的,我们想要得到数据的生成机制,就要考虑如何求出这两个参数?

这里就要用到概率论与数理统计中的参数估计方法,其中最常用的是极大似然估计:极大似然估计,简单来说,就是在已知观测数据的条件下,估计使得当前数据出现可能性最大的分布。如果我们认为当前观测到的数据是独立同分布的,并且每个样本出现的可能性为pip_i,那么当前数据出现的可能性最大,就是所有样本出现的概率之积最大(由于数据独立,所以用乘法公式),使这个概率达到最大的方法就是极大似然估计。针对本例中的79个点(x1,x2,...,x79x^1, x^2, ..., x^{79}),我们定义似然概率如下:

(2)L(μ,)=fμ,(x1)fμ,(x2)fμ,(x3)......fμ,(x79)L(\mu, \sum) = f_{\mu, \sum}(x^1) f_{\mu, \sum}(x^2) f_{\mu, \sum}(x^3)... ... f_{\mu, \sum}(x^{79}) \tag 2

其中:fμ,(x)=1(2π)D/211/2exp{12(xμ)T1(xμ)}f_{\mu, \sum}(x) = {1 \over (2\pi)^{D/2}}{1 \over |\sum|^{1/2}}exp \{-{1 \over 2}(x - \mu)^T \sum^{-1}(x - \mu)\}

注:

  • 其实这里的fμ,(x)f_{\mu, \sum}(x)并不是概率,而是概率密度,与概率成正比(对概率密度积分可以得到概率),由于这里只是对似然函数求极值,为简化计算,直接使用概率密度。

  • 如果我们做条件独立性假设,认为数据在不同特征上是独立的,那么,我们其实并不用对数据的分布机制做假设,求出分布的参数,只要利用条件独立性假设,从数据中统计出不同特征下的概率,然后使用乘法公式便可得到p(X=xY=ck)p(X=x|Y=c_k),这就是朴素贝叶斯法。实际不同特征之间基本不会是独立的,这样我们对数据的分布作出假设,利用统计学中的估计方法求出其参数。

下面我们就要求使似然函数L(μ,)L(\mu, \sum)达到最大的参数值μ\mu^*Σ\Sigma^*

μ,Σ=argmaxμ,L(μ,)\mu^*, \Sigma^* = argmax_{\mu, \sum} L(\mu, \sum)

对于高斯分布,μ\muΣ\Sigma分别代表均值和方差,所以可以直接用统计量求出(其实我们可以采用极大似然估计法,对似然函数求导得出参数):

μ=179n=179xn=179n=179(xnμ)(xnμ)T\mu^* = {1 \over 79} \sum^{79}_{n=1} x^n \qquad \sum^* = {1 \over 79} \sum^{79}_{n=1} (x^n - \mu^*)(x^n - \mu^*)^T

既然我们从数据出发,得到了生成数据的分布,接下来我们就可以采用贝叶斯公式计算出给定输入的后验概率:

从后验概率到逻辑回归,从逻辑回归到神经网络

计算几率后验概率)来进行分类的方法作如下理解:

不同的分类具有不同的高斯分布,如果我们想要知道当前样本属于C1的概率,其实就是当前样本从C1的分布中采样到的概率,在所有可能的分布中采样到的概率之和所占的比重(简单来理解,就是对其中一类的概率做归一化),写成表达式如下:

C1=C1当前样本属于C1的概率 = {C1的分布中采样到当前样本的概率 \over 所有可能的分布中采样到当前样本的概率之和}

通常情况下我们一般是不采用这种方法的,其结果不太好,因为参数过多,容易过拟合。对于不同的分类,我们一般使用相同的covariance matrix,这样会使模型具有更少的参数,不那么容易过拟合。如下图所示,我们调整模型,让Class1和Class2使用相同的协方差矩阵\sum

从后验概率到逻辑回归,从逻辑回归到神经网络

那么,如果采用相同的协方差矩阵,我们应该如何去求解参数呢?如下图所示,也是一种很直观的方式,用每个分类的样本个数去加权求和:

从后验概率到逻辑回归,从逻辑回归到神经网络

这样的话会提升最终模型的预测效果。

接下来,我们对后验概率做一些简单的变化,如下:
从后验概率到逻辑回归,从逻辑回归到神经网络

如上图所示,我们将后验概率转化为对zz求sigmoid函数的形式,那么这里的zz有什么意义呢?我们对zz做进一步数学推导,如下:

从后验概率到逻辑回归,从逻辑回归到神经网络
从后验概率到逻辑回归,从逻辑回归到神经网络
从后验概率到逻辑回归,从逻辑回归到神经网络
从后验概率到逻辑回归,从逻辑回归到神经网络

通过上面的数学推导,我们发现zz可以写成wx+bw·x+b的形式,那么我们就要想了,既然直接求w和b就可以得到分类结果,那么就没必要舍近求远去估计这么多参数,因而便将其转化为我们熟知的逻辑回归的形式。

2. 逻辑回归

2.1 Function Set:Model

通过上面的推导过程,我们知道逻辑回归最终得到的就是后验概率,当某个样本属于C1的后验概率大于0.5时,则将其分类为C1,否则划分为C2。逻辑回归的function set如下所示,包括所有不同的wwbb构成的总体,我们训练模型就是要找到对数据分类最好的那个function:

从后验概率到逻辑回归,从逻辑回归到神经网络

逻辑回归的结构可以写成如下的形式,包括一个线性单元和一个非线性单元,处理过程类似于神经网络的单个神经元,其中非线性部分采用的**函数是sigmoid函数。

从后验概率到逻辑回归,从逻辑回归到神经网络

比较逻辑回归和线性回归的function set的区别:

从后验概率到逻辑回归,从逻辑回归到神经网络

我们发现逻辑回归与线性回归相比,只是在线性单元上加个sigmoid函数,将输出变成分类的后验概率,本质上还是线性模型,使用直线来对数据分类。

2.2 Goodness of a Function:确定损失函数

既然逻辑回归模型就是由wwbb确定的function set,那么如何选择一个最好的function呢?

我们同样采用极大似然估计,让当前数据出现的可能性最大,定义所有数据的似然概率L(w,b)L(w,b),让其最大化,如下:

从后验概率到逻辑回归,从逻辑回归到神经网络

我们认为不同数据是独立采样出来的,因此采用乘法公式,似然概率L(w,b)L(w,b)如上所示。

不同分类的概率如下:

p(x)={fw,b(x),if y = 11fw,b(x),if y = 0p(x) =\begin{cases}f_{w,b}(x), & \text{if y = 1} \\1-f_{w,b}(x), & \text{if y = 0} \end{cases}

由于不同类别使用不同的概率来表示,不好处理,因此做等价转换,将概率写成yf(x)+(1y)(1f(x))yf(x) + (1-y)(1-f(x))的形式,下图是一个例子:

从后验概率到逻辑回归,从逻辑回归到神经网络

对似然函数求负对数,得到最终的损失函数:

从后验概率到逻辑回归,从逻辑回归到神经网络

虽然最终推导出的这个结果与信息论没什么关系,但是形式上是一致的,故可以将其理解为两个伯努利分布的交叉熵。

交叉熵反映两个概率分布有多接近,交叉熵越小表明两个分布越接近,我们希望预测值与实际值尽可能接近,也就是他们的分布的交叉熵尽可能小,这与对损失函数求极小是一致的。

比较逻辑回归和线性回归的损失函数:

从后验概率到逻辑回归,从逻辑回归到神经网络

逻辑回归的损失函数采用交叉熵,我们希望损失函数越小越好,即两个分布越接近越好,这样估测值便可以反映真实值。

2.3 Find the best function:梯度下降

我们想到找到最好的function,就要使损失函数最小。下面对损失函数求导,求其最小值:

从后验概率到逻辑回归,从逻辑回归到神经网络
从后验概率到逻辑回归,从逻辑回归到神经网络
从后验概率到逻辑回归,从逻辑回归到神经网络
由求解结果可知,预测值离目标越远,参数的update量就越大。

比较逻辑回归和线性回归的参数更新:

从后验概率到逻辑回归,从逻辑回归到神经网络

我们发现逻辑回归和线性回归的参数更新公式是一样的,说明这两种线性方法是统一的,只不过分别用在分类和回归。

Question:既然逻辑回归和线性回归存在一致性,那么我们就要考虑,为什么逻辑回归不同样采用更简单的平方损失来作为损失函数呢?

下面我们对逻辑回归使用平方损失,看一下会出现什么情况?

从后验概率到逻辑回归,从逻辑回归到神经网络

从后验概率到逻辑回归,从逻辑回归到神经网络

其中,y^n\hat y^n为实际值,fw,b(xn)f_{w,b}(x^n)为预测值。

从上面两张图我们看到:当模型预测正确时,损失函数的梯度为0,这个没有问题;但是当模型预测错误时,损失函数的梯度仍旧是0,这样就没法采用梯度下降来更新参数了,所以逻辑回归不能使用平方损失。

再结合下面的Loss surface来比较交叉熵和平方误差:

从后验概率到逻辑回归,从逻辑回归到神经网络

由上图可知:

  • 使用交叉熵作为损失函数,距离目标点远的地方梯度较大,参数更新较快,距离目标点近的地方梯度较小,参数更新较慢,这是很合理的;
  • 使用平方损失作为损失函数,距离目标点远的地方梯度也很小,导致参数更新很缓慢,无法收敛;

3. 判别模型和生成模型

从后验概率到逻辑回归,从逻辑回归到神经网络

  • 判别模型中没有对模型做任何假设,一切都是从数据出发,找到最好的w和b;
  • 生成模型对数据的分布做假设,假设数据的分布是高斯分布、伯努利分布等,根据假设的分布找到一组w和b;
  • 虽然看起来差不多,但是这两组w和b是不一样的,那么,哪种模型更好呢?

从后验概率到逻辑回归,从逻辑回归到神经网络

上图是前面的例子的分类结果,这里可以看到:判别模型分类结果更好。一般情况下,判别模型会优于生成模型。

下面再看个简单的例子,来理解为什么是这样:

从后验概率到逻辑回归,从逻辑回归到神经网络
从后验概率到逻辑回归,从逻辑回归到神经网络
从后验概率到逻辑回归,从逻辑回归到神经网络

对于这个例子,我们直观上应该觉得测试数据应该分类到class1,但是生成模型(NB)却将其分类为class2。这是因为生成模型自己做了某些假设(假设生成数据的分布),自己脑补出来某些数据中没有观测到的情况,认为在当前假设下,有些样本虽然没有观测到,但是也是有可能发生的。

判别模型却是完全从数据本身出发,从数据中学习到存在的模式。

其实,生成模型也有一些优点:

  • 比如数据很少的情况下,假设数据的分布可以得到比较好的结果;
  • 假设数据的分布可以使模型更加鲁棒,不容易受噪声的影响;
  • Priors和class-dependent probabilities可以从不同的数据源估计;

4. 多分类

下面是一个三分类的例子:

从后验概率到逻辑回归,从逻辑回归到神经网络

从后验概率到逻辑回归,从逻辑回归到神经网络

多分类实际同二分类一样,采用相同推导方式可以得到softmax函数,同时多分类的损失函数也是交叉熵的形式,其中y值是one-hot的形式。

5. 逻辑回归的限制

由于逻辑回归是线性模型,所以模型存在一定的限制,比如:我们使用逻辑回归去分类下面四个点。

从后验概率到逻辑回归,从逻辑回归到神经网络

我们发现,即使是简单的四个点,逻辑回归也是无法进行分类的,因为图中的点不是线性可分的:

从后验概率到逻辑回归,从逻辑回归到神经网络

由于逻辑回归本质还是线性分类,所以无法对不能线性可分的点做划分。

如果坚持要用逻辑回归,可以对数据做特征转换,也就是将数据从一个特征空间转换到另一个特征空间。转换后点的分布如下图所示:

从后验概率到逻辑回归,从逻辑回归到神经网络

通过特征转换,我们发现数据变得线性可分,逻辑回归便可以work了。

但是,这里还有一个问题,通常情况下,我们很难自己找到一个好的transformation。

因此,我们便希望机器学习能帮我们找到这样的transformation。那么,机器学习如何找到这样的transformation呢?

我们通过串联逻辑回归模型来做到:

从后验概率到逻辑回归,从逻辑回归到神经网络

  • 这里忽略bias;
  • 使用串联的逻辑回归:第一层逻辑回归进行自动的特征转换,第二层对转换后的点进行分类;

同样使用前面的四个点,具体执行过程如下:

(1)首先,第一层对原始数据做特征转换;

从后验概率到逻辑回归,从逻辑回归到神经网络

(2)转换后的特征输入第二层逻辑回归,得到预测结果y;

从后验概率到逻辑回归,从逻辑回归到神经网络
我们发现,通过串联逻辑回归模型确实可以做到特征转换,实现分类。

这里串联的逻辑回归模型就类似于深度学习里的神经网络:

从后验概率到逻辑回归,从逻辑回归到神经网络
这里就非常自然的从逻辑回归进化到神经网络。

对于深度学习,也就是使用了多个hidden layer实现特征转换,然后采用线性分类器实现分类。
从后验概率到逻辑回归,从逻辑回归到神经网络

注:
这里说明的feature transformation + Linear Model的过程,体现了机器学习方法内在的一致性。