目录
摘要
本周以宝可梦为例,学习了回归和分类两大任务的步骤。在预测宝可梦CP值的线性回归任务中,学习了改进模型的常用方法,并学会了用正则化的方法来解决模型过拟合问题;在概率生成模型中,学习了高斯分布和极大似然估计在模型中的应用;在逻辑回归模型中,学习了一种新的损失函数:交叉熵。将逻辑回归与线性回归进行了比较,并对比了均方差和交叉熵,又将概率生成模型和逻辑回归模型进行了对比,分析了各自优势场景。最后,学习了多分类和Softmax的应用,并学习了用特征转换和连接多个逻辑回归的方法来解决逻辑回归的局限性问题。
Abstract
This week, taking Pokémon as an example, we studied the steps of regression and classification tasks. In the linear regression task of predicting Pokémon CP values, we learned common methods to improve the model and how to use regularization to address model overfitting. In the probability generative models, we studied the application of Gaussian distribution and maximum likelihood estimation in models. In the logistic regression model, we learned a new loss function: cross-entropy. We compared logistic regression with linear regression, contrasted mean squared error and cross-entropy, and also compared probabilistic generative models with logistic regression models, analyzing the advantageous scenarios for each. Finally, we learned about multi-class classification and the application of Softmax, and studied methods to address the limitations of logistic regression by using feature transformation and connecting multiple logistic regressions.
一、线性回归
Regression:regression就是找到一个函数Function,通过输入特征x,输出预测的数值Scalar,比如预测价格、温度等。
接下来将以宝可梦为例来说明回归。想要预测进化后的宝可梦CP值,输入为宝可梦的各种信息数据。输入中:x代表某一只宝可梦, 代表宝可梦x当前的cp值, 代表宝可梦x的种类, 代表生命值 , 代表重量, 代表高度,输出y 是预测的进化后的cp值。
1、初始模型的设定
step 1、定义带有参数的初始模型
初始定义模型为: ,其中 b 和 w 为参数,需要通过训练集的训练来确定。
step 2、定义损失函数
首先,我们先收集训练数据并分析:
图中 表示第 i 只宝可梦, 表示第 n 只宝可梦的 cp 值, 表示第 n 只宝可梦进化后的真实 cp 值。从点状关系图中可以看出,输入的 和输出值 呈现了一定的线性关系。
接下来定义损失函数:
这里的损失函数是自定义的,这只是一种常见的损失函数 。
有了损失函数和训练数据,就可以直观的画出损失函数的形状,如下图:
上图中,颜色越亮,代表所取参数带来的 Loss 越大,颜色越暗代表 Loss 越小。
step 3、最优化
最优化就是要找到一组参数使得Loss最小,此时的模型是最好的,即:
对于最优化的求解,只要Loss函数是可微分的,都可以用梯度下降的方法。
梯度下降的具体步骤上周已经叙述,见http://t.csdnimg.cn/22fnc
梯度下降的一个问题是可能找到的是局部最小值点而不是全局最小值点,但这个问题在线性模型的损失函数中是不存在的,因为线性回归的损失函数是convex(凸的),严格来说是向下凸,这就决定了线性模型的损失函数是没有局部最小值点的。下面以上面的十个数据来证明一下损失函数是下凸函数(用到了高等数学中二元函数凸凹性的判定定理):
下图为可视化的损失函数 :
结果分析:
真正判断一个模型的好坏,不是看训练集上的损失,而是要考虑测试集上的损失。
左图是在训练集上的表现,有图实是在测试集上的表现。很明显在此模型在测试集上的损失大于在训练集上的损失 。此时观察到当初始cp值较大时预测的进化后cp值损失较大,说明此线性模型不好。实际模型可能不是简单的线性函数。所以需要改进模型。
2、改进模型
根据原始cp值较大时,预测的进化后的cp值比真实的cp值小,所以考虑引入高次项。
改进1:引入高次项使模型复杂化
如图,依次在现有模型的基础上引进更高次项,则引进后的模型会包含现在的模型,从理论上来看引进高次项后的模型肯定比现有模型要好,从训练集的损失函数上看也是如此。但这意味着在测试集上的表现也是越高次的模型效果越好吗?如下图:
随着模型复杂性不断增加,在训练集上的表现是越来越好,但在测试集上的却出现了“过拟合”显现现象,而我们真正想要的是在测试集上表现好的模型,所以模型不能过于复杂。至于解决过拟合问题的方法,稍后会介绍。
十个训练数据太少,当收集多一些训练数据后会发现影响模型的隐藏因素:
改进2:引入新的特征
当分析更多的数据的时候,会发现原来的模型无法模拟现在的数据,这里的隐藏因素是宝可梦的种类,所以需要修改模型,将宝可梦的种类也当做输入的特征。具体改进如下:
以上是将宝可梦种类当做特征后的线性模型, 的解释是,当输入的宝可梦的种类为Pidgey时,此式的结果为1,否则结果为0,以上线性模型具体解释如下:
下图是新模型的效果:
新模型的损失是目前来说最好的 ,但还可以继续改进。
改进3:结合以上两次改进
此时在训练数据集上的表现非常好,但在测试集上的表现却非常差,出现了“过拟合”现象。下面来说明解决过拟合问题的方法。
改进4:正则化
正则化:用于控制模型的复杂度,减少“过拟合”的风险。它通过在损失函数中引入额外的项来对模型的参数进行约束或惩罚,使模型更加简单、平滑或稀疏。加入正则化项可以限制模型的复杂度、提高泛化能力,并控制模型参数的更新,从而有效地缓解过拟合问题。
如上图对损失函数加上了正则化项 ,这里 越小代表模型越平滑,能减小训练数据中噪声对模型的影响,模型就越好。但 不能过小,过小的话会体现不出本来对模型贡献大的特征的作用,反而会使模型变差。这里就需要设定一个较为合适的 。
注意:正则化项中只考虑了W,并未考虑 b,因为 b 决定某特征对模型的作用大小。
其他解决过拟合问题的方法:增加数据集、加入动量、调整学习率、dropout机制、早停法、随机梯度下降等
二、分类(Classification)
在深度学习中,分类(Classification)是一种监督学习任务,其目标是预测输入数据所属的类别或标签。分类任务通常用于处理离散的输出,即每个输入样本被分配到一个预先定义的类别中。
1、分类与回归
假设类别只有两类,尝试用回归的方法来解决分类的问题,如下图:
假设类别1的 target 是 1,类别2的 target 是 -1 ,那么输入经过模型后的输出离哪个target越近,那么这个输入就属于哪个target对应的类别。
实际上用回归来分类的话,用绿色模型才是此分类问题的最优解,但若如右图中的情况,希望右下角的蓝色输出值越接近1越好,这也是线性回归中为了减小损失的思想,所以真正在右图中做回归的时候,得到模型为紫色的线,但实际上的最佳模型为绿色的线,这就说明了回归不适合用在分类问题中。针对上面的问题,有一个理想的方法:
模型的输出为类别,损失函数定义为预测类别错误的次数,很显然损失函数是离散的,不可微分,不能用梯度下降来最优化,其最优化的方法有:感知机、SVM、概率生成。
2、概率生成模型
贝叶斯公式:
贝叶斯公式描述了在已知其他条件概率的情况下,如何计算某一事件的条件概率。 它是生成式模型Generative。
贝叶斯的一般形式是:
其中:
- P(A∣B) 是在事件B发生的条件下事件A发生的概率(后验概率)。
- P(B∣A) 是在事件A发生的条件下事件B发生的概率。
- P(A) 和 P(B)P(B) 分别是事件A和事件B的边缘概率。
举例来说明贝叶斯公式:
如图有两个类别,类别1和类别2的先验概率分别为 和,若给出一个x,如何计算x属于类别1和类别2的概率呢? 根据贝叶斯公式计算如下:
如果将宝可梦分为两个类别,类别1为水系,类别2为一般系。若给定的训练数据中有79只水系,61只一般系的宝可梦,则
每一只宝可梦用自身的特征组成的向量来表示,为简单描述,用两个特征来描述一只宝可梦,79只水系宝可梦的训练数据如下:
右下角的龟并不属于这79个训练数据,但它的特征决定它可能是水系的,所以在水系里面找到此种龟的概率不是0,那么怎么计算这个概率呢?
首先,假设79个训练数据是高斯分布里的点,根据这79个点可以找到一个最有可能的高斯分布函数,这就需要用到最大似然估计来找到可能性最大的高斯函数。
高斯分布也是正态分布,是连续概率分布的一种,其图形呈钟形。高斯函数关于均值对称,其参数为均值和方差。
对于本例,输入为宝可梦的特征组成的向量,所以均值是一个向量,方差为矩阵,高斯分布的概率密度如下:
此高斯函数的形状由均值向量和方差矩阵来决定,如下图的两组不同参数对应的高斯分布
下面来用极大似然估计的方法来求高斯函数:
极大似然估计(Maximum Likelihood Estimation, MLE)是一种在统计学中用于估计模型参数的方法。它基于这样的思想:给定一组样本数据,我们选择那些使得这些数据出现概率(似然性)最大的参数值作为参数的估计值。
同理类推本例中的均值向量和方差矩阵:
根据以上步骤和两类别的训练数据可以算出各自对应的高斯分布的参数:
有了确定的概率密度函数之后就可以做分类任务了
结果如下图:
在测试集上的结果并不好,在增加特征是模型变复杂后的结果提升也不大。
改进模型:这里常见的做法为将两个正态分布的方差矩阵取成一样的,这样可以减少模型的参数个数。
此时对于各类别的均值向量和共同的方差矩阵的计算如下:
其中 和 看做两个独立的参数向量来计算,而对于 的计算结果如下:
修改后的分类结果如下:
修改后的分类线变成了直线,这样的模型也叫线性模型,当增加特征后,分类正确率有所提升。
在选择分布函数的时候,不一定非要选择高斯分布,也可以选择其他分布函数,根据实际问题而定,例如,若所有特征间相互独立,则可用朴素贝叶斯分类(Naive Bayes Classifier)。
3、后验概率
后验概率是指在获得新的证据或信息之后,我们对某个事件发生的概率的重新评估。在贝叶斯公式中,后验概率是用 P(A∣B)P(A∣B) 表示的,即在事件B已经发生的条件下,事件A发生的概率。后验概率是基于先验概率和新证据(通过似然性 P(B∣A)P(B∣A) 表示)来计算的。
在本文概率生成模型中,传统的做法需要计算 ,,,,,再得到参数矩阵 w 和参数 b,而现在只需要直接找参数矩阵 w 和参数 b,减少了计算步骤,这也是公用 带来的便利。这种做法就是逻辑回归。
三、逻辑回归
逻辑回归通过使用逻辑函数(或称Sigmoid函数),将线性回归的输出值映射到0和1之间,从而表示为特定类别的概率。是判别式模型Discriminative,逻辑函数的公式为:
其中,是输入特征的线性组合,即 , 是模型参数, 是特征向量。
可以将逻辑回归理解为线性回归与 Sigmoid 函数的组合。
1、回归步骤
step1:定义函数
step2:找损失函数
这里做一下符号上的转换,如果 类别为 ,则将它的 target 记为 1 ,即 =1, 若 的类别为,就将它的 target 记为 0 ,即 =0 。则有如下转换:
转化后的形式其实就是交叉熵:
step3:最优化
上图中紫线的意义为预测情况与真实情况的差距 ,其值越大,更新越大。
比较一下逻辑回归与线性回归的步骤:
两种回归的步骤基本一样,差别在对 的取值和损失函数的定义上
逻辑回归中的交叉熵损失函数能否用线性回归中的均方差损失韩式来替代,下面举一个具体的例子来说明。
根据逻辑回归的步骤依次进行,在第三步的时候出现了问题,如图,当 时,如果 ,算得的偏微分为0,表示预测值与真实值差距极小,但事实上二者差距很大,偏微分不应是0 。
下图为参数的变化及损失的三维图:
图中中心平缓的位置为目标位置,对于Cross entropy来说,距离目标值越远,微分值越大,参数更新速度越快。 而对于Square Error来说,在距离目标远的位置微分值也很小,参数更新的速度很小,由此可见方差损失不适用于逻辑回归。
2、判别模型与生成模型
即使使用相同的训练数据,两种模型找到的参数也不会一样 。Generative与Discriminative差别就在于,Generative做了某种假设,它假设该组Data来自于某几率模型。而Discriminative是完全依赖给出的Training Data进行判断的,Data越多,正确率会越高。一般训练数据集较少或者有噪音时,Generative的效果更好一些。
3、多分类
本文以上讨论的都是二分类,现在讨论多分类,以三分类为例。
假设有三个分类,每个类别的参数都已知,则三分类相较于二分类的特别之处在于对 z 做softmax处理,处理后的值作为输出,具体为: ,Softmax 处理的好处是可以将输入之间的差距放大,并可对输入归一化,以便作为概率值。
4、逻辑回归的局限性
如以下情形:
Logistic Regression的两个类别之间的边界线就是一条直线,很显然上图这种情况下,没有一条直线能够将两个类别分开。
那么如何解决这个问题呢?
step1、feature transformation
在深度学习中,特征转换(Feature Transformation)是指通过数学方法对现有的特征进行变换,以提取更好的特征表示,从而增强模型的泛化能力和处理数据稀疏性。
如图,原本的特征为位置坐标,将这些特征转换为距离(0,0)点的距离和(1,1)点的距离。
但人工很难找出一个好的transformation,需要机器来找
step2、连接多个逻辑回归
如图,第一层的逻辑回归做特征转换,第二层的逻辑回归做在第一层的基础上来分类。
特征转换后,就可以用 Logistic Regression 来进行分类。
每个logistic regression叫做一个”neuron“,多个neuron相连组成一个”neural network“。
四、总结
通过本周的学习,我对回归和分类任务的定义个步骤有了更清晰的认识。了解了模型优化的常用方法,如引入特征的高次项、引入新特征等。掌握了线性回归过拟合问题额的一种解决办法:正则化。学习了分类任务的两大模型:概率生成和逻辑回归,重点关注了概率生成模型的数学推导。将以上三种模型进行了对比分析以及对应的损失函数的定义。同时在学习中也发现了自身的不足,对于概率论的掌握比较生疏,在接下来的学习中,我会加强对数学知识的学习。