损失函数的研究,二元分类和多分类(LR 和softmax)

简介

在做GBDT的时候遇到的一个坑现在把它填上。

二元分类和多分类的问题形式上看去简单,但是当我们仔细思考的时候还是有很多坑的。我再也不敢说自己精通Logistic模型了,本来以为都掌握了原理,其实并不然。

损失函数一般分为四种,平方损失函数、对数损失函数、softmax损失函数、hingeloss损失函数。平方损失函数很容易理解,一般用于回归问题。这里就不做讲解了。

逻辑回归与对数损失函数

这部分内容主要参照了https://www.cnblogs.com/ModifyRong/p/7739955.html,写的非常非常好,我这篇对数损失函数几乎是照着这个写的,对一些问题的解答加上自己的理解

一句话概括逻辑回归:逻辑回归就是假设数据服从伯努利分布,通过极大似然法,用梯度下降去求解参数,得到最大的概率,最后让数据能够二分类。

逻辑回归的基本假设有:

假设1:假设数据服从伯努利分布。伯努利分布有一个简单的例子是抛硬币,抛中为正面的概率是p,抛中为负面的概率是1−p.在逻辑回归这个模型里面是假设 hθ(x) 为样本为正的概率

假设2:样本为正的概率为

假设3:我们的目标函数是极大似然函数最大化:

问题的转化:

我们对极大似然函数取对数,再取负号,得到我们最后的对数损失函数:

求解方法:

因为log损失函数,不像线性回归那样具有封闭解,所以我们采用梯度下降的方式式

我们这里可以采用批梯度下降、随机梯度下降、小批梯度下降等方式、动量法、adam、RMSProp、牛顿法、拟牛顿法等方式,关于梯度下降的方式,过几天我回另外写一篇专门的博客详细介绍。

简要介绍一下因为Log函数是凸函数,所以一定具有全局最优解。简单来说批梯度下降会获得全局最优解,但是要遍历全局中所有的样本,训练的时间过多,而且当梯度接近于0,且数据量又很大的,计算就会很慢。

sgd随机梯度下降就是随便选取一个样本,然后计算它的梯度就好了,这可能会导致sgd在跳到局部最优的时候比较复杂,可能一不小心就跳到了和实际局部最优点相反的方向。但是总体而言,还是会朝着局部最优点过去。而且也正是因为梯度的不稳定性,也有可能跳出局部最优所在的区域,到了一个更好的局部最优点。

小批量梯度计算方式,则是综合了二者的优点

小批量梯度下降结合了sgd和batch gd的优点,每次更新的时候使用n个样本。减少了参数更新的次数,可以达到更加稳定收敛结果,一般在深度学习当中我们采用这种方法。

动量法、Adam等方法我过几天专门写个博客介绍一下。

逻辑回归的目的

将数据进行二分类,一般是先设定一个阈值α,将样本计算出来的p值进行比较。如果大于α则为正类反之为负类,通常阈值设置为0.5.

逻辑回归的进一步思考:

原谅我当了一回https://www.cnblogs.com/ModifyRong/p/7739955.html 这篇博客的搬运工,现在我就在这篇博客的基础上说一些

横线一的解释:

为什么我们不用平方损失函数?

我们要始终记住:评价函数与损失函数是俩个完全不同的概念。有很多例子,比如我们在计算损失函数的时候加了正则化项,除此之外:训练时的损失函数应该在优化过程中易于求导,而在测试过程中,评价函数更应该接近最后的客观表现。一个好的例子:在分类训练中我们使用对数损失(以后我们会写博客讨论他)作为损失函数,但是我们却使用精确率/召回率来作为它的评价函数。

如上图所示,函数上分别有1、2、3三个点当sigmoid函数的目标点是1的时候,但是你现在处于3这个位置时。你会发现从3用梯度下降多么多么的艰难,因为3的梯度接近于0,这也会出现,我们发现训练着训练着发现,越接近输入层的伸进网络的权重越发不动了,梯度似乎“消失”了。

问题2.为什么特征高度相关也不会改变logistic的结果呢?

是因为logistic回归的时候在进行计算的时候即使特征一样也可以work


Softmax分类

看到了上面这篇博文之后,我想按照他的思路继续介绍一下softmax多分类器

模型假设:

softmax是基于多项分布建模的,解决的问题就是类别不止是两类而是多类了。在logistic回归中我们假设分类的概率是

那么我们在softmax中的极大似然的概率是:

这样写可能不太直接:

事实上我们

猜你喜欢

转载自blog.csdn.net/PythonstartL/article/details/83045277