从后验概率到逻辑回归,从逻辑回归到神经网络
1. 后验概率
对于给定数据,我们首先假设数据是由某种分布产生的,这样,根据贝叶斯公式我们可以得到后验概率分布,将后验概率最大的类作为的类输出。后验概率计算根据贝叶斯定理进行:
假设给定数据是由高斯分布生成的,我们希望对这组数据进行分类,首先考虑二分类的情况:
为什么使用高斯分布?
由于我们并不知道数据的真实分布,实际上我们可以假设任何一种分布。另外,根据中心极限定理,当数据量n足够大时,可以用正态分布逼近其它分布,这也是参数估计的理论基础。
我们知道,从一个高斯分布里面可以采样到空间内的任何一个点,但是在不同的高斯分布里,采样到这个点的几率是不同的。
比如:下图中的79个点分别属于两个分类,我们假设这些点可以从图中的两个高斯分布中采样得到,但是每个点从不同分布中采样出来的概率是不同的。
我们首先假设数据的分布,然后根据数据估计该分布的参数,得到数据的生成机制,叫做生成模型。
因为高斯分布是由和确定的,我们想要得到数据的生成机制,就要考虑如何求出这两个参数?
这里就要用到概率论与数理统计中的参数估计方法,其中最常用的是极大似然估计:极大似然估计,简单来说,就是在已知观测数据的条件下,估计使得当前数据出现可能性最大的分布。如果我们认为当前观测到的数据是独立同分布的,并且每个样本出现的可能性为,那么当前数据出现的可能性最大,就是所有样本出现的概率之积最大(由于数据独立,所以用乘法公式),使这个概率达到最大的方法就是极大似然估计。针对本例中的79个点(),我们定义似然概率如下:
其中:
注:
其实这里的并不是概率,而是概率密度,与概率成正比(对概率密度积分可以得到概率),由于这里只是对似然函数求极值,为简化计算,直接使用概率密度。
如果我们做条件独立性假设,认为数据在不同特征上是独立的,那么,我们其实并不用对数据的分布机制做假设,求出分布的参数,只要利用条件独立性假设,从数据中统计出不同特征下的概率,然后使用乘法公式便可得到,这就是朴素贝叶斯法。实际不同特征之间基本不会是独立的,这样我们对数据的分布作出假设,利用统计学中的估计方法求出其参数。
下面我们就要求使似然函数达到最大的参数值和:
对于高斯分布,和分别代表均值和方差,所以可以直接用统计量求出(其实我们可以采用极大似然估计法,对似然函数求导得出参数):
既然我们从数据出发,得到了生成数据的分布,接下来我们就可以采用贝叶斯公式计算出给定输入的后验概率:
计算几率(后验概率)来进行分类的方法作如下理解:
不同的分类具有不同的高斯分布,如果我们想要知道当前样本属于C1的概率,其实就是当前样本从C1的分布中采样到的概率,在所有可能的分布中采样到的概率之和所占的比重(简单来理解,就是对其中一类的概率做归一化),写成表达式如下:
通常情况下我们一般是不采用这种方法的,其结果不太好,因为参数过多,容易过拟合。对于不同的分类,我们一般使用相同的covariance matrix,这样会使模型具有更少的参数,不那么容易过拟合。如下图所示,我们调整模型,让Class1和Class2使用相同的协方差矩阵。
那么,如果采用相同的协方差矩阵,我们应该如何去求解参数呢?如下图所示,也是一种很直观的方式,用每个分类的样本个数去加权求和:
这样的话会提升最终模型的预测效果。
接下来,我们对后验概率做一些简单的变化,如下:
如上图所示,我们将后验概率转化为对求sigmoid函数的形式,那么这里的有什么意义呢?我们对做进一步数学推导,如下:
通过上面的数学推导,我们发现可以写成的形式,那么我们就要想了,既然直接求w和b就可以得到分类结果,那么就没必要舍近求远去估计这么多参数,因而便将其转化为我们熟知的逻辑回归的形式。
2. 逻辑回归
2.1 Function Set:Model
通过上面的推导过程,我们知道逻辑回归最终得到的就是后验概率,当某个样本属于C1的后验概率大于0.5时,则将其分类为C1,否则划分为C2。逻辑回归的function set如下所示,包括所有不同的和构成的总体,我们训练模型就是要找到对数据分类最好的那个function:
逻辑回归的结构可以写成如下的形式,包括一个线性单元和一个非线性单元,处理过程类似于神经网络的单个神经元,其中非线性部分采用的**函数是sigmoid函数。
比较逻辑回归和线性回归的function set的区别:
我们发现逻辑回归与线性回归相比,只是在线性单元上加个sigmoid函数,将输出变成分类的后验概率,本质上还是线性模型,使用直线来对数据分类。
2.2 Goodness of a Function:确定损失函数
既然逻辑回归模型就是由和确定的function set,那么如何选择一个最好的function呢?
我们同样采用极大似然估计,让当前数据出现的可能性最大,定义所有数据的似然概率,让其最大化,如下:
我们认为不同数据是独立采样出来的,因此采用乘法公式,似然概率如上所示。
不同分类的概率如下:
由于不同类别使用不同的概率来表示,不好处理,因此做等价转换,将概率写成的形式,下图是一个例子:
对似然函数求负对数,得到最终的损失函数:
虽然最终推导出的这个结果与信息论没什么关系,但是形式上是一致的,故可以将其理解为两个伯努利分布的交叉熵。
交叉熵反映两个概率分布有多接近,交叉熵越小表明两个分布越接近,我们希望预测值与实际值尽可能接近,也就是他们的分布的交叉熵尽可能小,这与对损失函数求极小是一致的。
比较逻辑回归和线性回归的损失函数:
逻辑回归的损失函数采用交叉熵,我们希望损失函数越小越好,即两个分布越接近越好,这样估测值便可以反映真实值。
2.3 Find the best function:梯度下降
我们想到找到最好的function,就要使损失函数最小。下面对损失函数求导,求其最小值:
由求解结果可知,预测值离目标越远,参数的update量就越大。
比较逻辑回归和线性回归的参数更新:
我们发现逻辑回归和线性回归的参数更新公式是一样的,说明这两种线性方法是统一的,只不过分别用在分类和回归。
Question:既然逻辑回归和线性回归存在一致性,那么我们就要考虑,为什么逻辑回归不同样采用更简单的平方损失来作为损失函数呢?
下面我们对逻辑回归使用平方损失,看一下会出现什么情况?
其中,为实际值,为预测值。
从上面两张图我们看到:当模型预测正确时,损失函数的梯度为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的过程,体现了机器学习方法内在的一致性。