【从零开始的机器学习之旅】05-Logistic Regression(逻辑回归)

Nannan Lv5

从零开始的机器学习之旅


-Logistic Regression(逻辑回归)

1. Review

在classification这一章节,我们讨论了如何通过样本点的均值和协方差来计算

进而利用计算得到样本点属于Class1的概率,由于是二分类,属于Class2的概率就是

之后我们还推导了,其中

这里的w和x都是vector,两者的乘积是inner product,从上式中我们可以看出,现在这个model(function set)是受w和b控制的,因此我们不必要再去像前面一样计算一大堆东西,而是用这个全新的由w和b决定的model——Logistic Regression(逻辑回归)

2.Three Step of Machine Learning

2.1 Step1:Function Set

image-20240630200430256

图形化表示:

image-20240630200636079

2.2 Step2:Goodness of a Function

image-20240630201115991

我们做一个数学上的转化:

image-20240630201522102

于是:image-20240630201649361

整理一下:image-20240630201856170

cross entropy(交叉熵): 点击查看更多

假设有上图两个distribution p和q,它们的交叉熵就是,这也就是之前在推导中在前面加一个负号的原因。

cross entropy交叉熵的含义是表达这两个distribution有多接近,如果p和q这两个distribution一模一样的话,那它们算出来的cross entropy就是0。而这里的表示function的output,表示预期的target。因此交叉熵实际上表达的是希望这个function的output和它的target越接近越好

总之,那么这里我们需要去minimize的就是:

image-20240630202956091

即:

看这个那么复杂,你可能会有一个疑问:Why don’t we simply use square error as linear regression?

2.3 Step3:Find the best function

实际上就是去找到使得loss function即交叉熵之和最小的那组即可,方法还是Dradient descent

这里sigmoid function的微分可以直接作为公式记下来:

image-20240630234220597

进行整理一下,并进一步化简:

image-20240630234908494

更新我们的:image-20240630234953898

那么这个式子到底代表着什么意思呢?现在你的update取决于三件事:

  • learning rate,自己设定
  • ,来自于data
  • ,代表function的output跟理想target的差距有多大,如果离目标越远,update的步伐就要越大( )

3.Logisitic Regression v.s. Linear Regression

image-20240630235415367

4.Logistic Regression + Square error?

之前提到了,为什么Logistic Regression的loss function不能用square error来描述呢?我们现在来试一下这件事情,重新做一下machine learning的三个step

image-20240701000022571

现在会遇到一个问题:如果第n个点的目标target是class 1,则,此时如果function的output 的话,说明现在离target很接近了,这一项是0,于是得到的微分
会变成0,这件事情是很合理的;但是当function的output的时候,说明离target还很遥远,但是由于在step3中求出来的update表达式中有一个,因此这个时候也会导致得到的微分 变成0。

这会造成什么问题呢?

如果我们把参数的变化对total loss作图的话,loss function选择cross entropy或square error,参数的变化跟loss的变化情况可视化出来如下所示:(黑色的是cross entropy,红色的是square error)

image-20240701000801997

假设中心点就是距离目标很近的地方,如果是cross entropy的话,距离目标越远,微分值就越大,参数update的时候变化量就越大,迈出去的步伐也就越大,这是没问题的。

但当你选择square error的时候,过程就会很卡,因为距离目标远的时候,微分也是非常小的,移动的速度是非常慢的,我们之前提到过,实际操作的时候,当gradient接近于0的时候,其实就很有可能会停下来,因此使用square error很有可能在一开始的时候就卡住不动了,而且这里也不能随意地增大learning rate,因为在做gradient descent的时候,你的gradient接近于0,有可能离target很近也有可能很远,因此不知道learning rate应该设大还是设小。

综上,尽管square error可以使用,但是会出现update十分缓慢的现象,而使用cross entropy可以让你的Training更顺利。

5.Discriminative(判别模型) v.s. Generative(生成模型)

Logistic Regression的方法,我们把它称之为discriminative的方法;而我们用Gaussian来描述posterior Probability这件事,我们称之为Generative的方法。

image-20240701001510459

same model but different currency

什么意思呢?实际上它们用的model(function set)是一模一样的,都,Logistic Regression的话,可以用gradient descent的方法直接去把b和w找出来;如果是用Generative model的话,我们要先算出,然后算出b和w。

你会发现用这两种方法得到的b和w是不同的,尽管我们的function set是同一个,但是由于做了不同的假设,最终从同样的Training data里找出来的参数会是不一样的。

在Logistic Regression里面,我们没有做任何实质性的假设,没有对Probability distribution有任何的描述,我们就是单纯地去找b和w(推导过程中的假设只是便于理解和计算,对实际结果没有影响)

而在Generative model里面,我们对Probability distribution是有实质性的假设的,之前我们假设的是Gaussian(高斯分布),甚至假设在相互独立的前提下是否可以是naive bayes(朴素贝叶斯),根据这些假设我们才找到最终的b和w

哪一个假设的结果是比较好的呢?Generative model和discriminative model的预测结果比较如下:

image-20240701001750387

实际上Discriminative的方法常常会比Generative的方法表现得更好,这里举一个简单的例子来解释一下

5.1 toy example

假设总共有两个class,有这样的Training data:每一笔data有两个feature,总共有1+4+4+4=13笔data

image-20240701002240646

image-20240701002302951

如果我们的testing data的两个feature都是1,凭直觉来说会认为它肯定是class 1,但是如果用**naive bayes的方法(朴素贝叶斯假设所有的feature相互独立,方便计算)**,得到的结果又是怎样的呢?
image-20240701002506822

image-20240701002758513

通过Naive bayes得到的结果竟然是这个测试点属于class 2的可能性更大,这跟我们的直觉比起来是相反的,实际上我们直觉认为两个feature都是1的测试点属于class 1的可能性更大是因为我们潜意识里认为这两个feature之间是存在某种联系的,但是对Naive bayes来说,它是不考虑不同dimension之间的correlation,Naive bayes认为在dimension相互独立的前提下,class 2没有sample出都是1的data,是因为sample的数量不够多,如果sample够多,它认为class 2观察到都是1的data的可能性会比class 1要大。

Naive bayes认为从class 2中找到样本点x的概率是x中第一个feature出现的概率与第二个feature出现的概率之积:。但是我们的直觉告诉自己,两个feature之间肯定是有某种联系的,不能够那么轻易地被拆分成两个独立的概率乘积,也就是说Naive bayes自作聪明地多假设了一些条件

所以,Generative model和discriminative model的差别就在于,Generative的model它有做了某些假设,假设你的data来自于某个概率模型;而Discriminative的model是完全不作任何假设的。

Generative model做的事情就是脑补,它会自己去想象一些事情,于是会做出一个和我们人类直觉想法不太一样的判断结果,就像toy example里,我们做了naive bayes这样一个假设(事实上我们并不知道这两个feature是否相互独立),于是Naive bayes会在class 2里并没有出现过两个feature都是1的样本点的前提下,自己去脑补有这样的点。

那么脑补究竟是不是一件好的事情呢?

通常脑补不是一件好的事情,因为你给你的data强加了一些它并没有告诉你的属性,但是在data很少的情况下,脑补也是有用的,discriminative model并不是在所有的情况下都可以赢过Generative model,discriminative model是十分依赖于data的,当data数量不足或是data本身的label就有一些问题,那Generative model做一些脑补和假设,反而可以把data的不足或是有问题部分的影响给降到最低。

Benefit of generative model: 点击查看更多
  • With the assumption of probability distribution,less training data is needed
  • With the assumption of probability distribution more robust to the noise
  • Priors and class-deoendent probabilities can be estimated from different sources.

在Generative model中,priors probabilities和class-dependent probabilities是可以拆开来考虑的,以语音辨识为例,现在用的都是neural network,是一个discriminative的方法,但事实上整个语音辨识的系统是一个Generative的system,它的prior probability是某一句话被说出来的几率,而想要estimate某一句话被说出来的几率并不需要有声音的data,可以去互联网上爬取大量文字,就可以计算出某一段文字出现的几率,并不需要声音的data,这个就是language model,而class-dependent的部分才需要声音和文字的配合,这样的处理可以把prior预测地更精确。

6.Conclusion

对于分类的问题(主要是二元分类),我们一般有两种方法去处理问题,一种是Generative的方法,另一种是Discriminative的方法,注意到分类问题的model都是从贝叶斯方程出发的,即

其中分子表示属于第i类的可能性,分母表示遍历从1到n所有的类的可能性。

两种方法的区别在于:

  • Generative model会假设一个带参数的Probability distribution(概率分布),利用这个假设的概率分布函数带入(1)中去计算,结合极大似然估计法最终得到最优的参数以确定这个model的具体形式
  • DIscriminative model不作任何假设,因此它无法通过假定的Probability distribution得到​的表达式,因此它使用的是(2),直接去利用交叉熵和gradient descent结合极大似然估计法得到最优的b和w,以确定model的具体形式,最后,利用得到的与0.5相比较来判断它属于那个class的可能性更大
  • Generative model的好处是,它对data的依赖并没有像discriminative model那么严重,在data数量少或者data本身就存在noise的情况下受到的影响会更小,而它还可以做到Prior部分与class-dependent部分分开处理,如果可以借助其他方式提高Prior model的准确率,对整一个model是有所帮助的(比如前面提到的语音辨识)
  • 而Discriminative model的好处是,在data充足的情况下,它训练出来的model的准确率一般是比Generative model要来的高的

7.Multi-class Classification(3 classes as example)

之前讲的都是二元分类的情况,这里讨论一下多元分类问题,其原理的推导过程与二元分类基本一致

image-20240701005117339
Softmax函数: 点击查看更多

Softmax函数是用于多类分类问题的激活函数,在多类分类问题中,超过两个类标签则需要类成员关系。对于长度为的任意实向量,Softmax函数可以将其压缩为长度为,值在范围内,并且向量中元素的总和为的实向量。

Softmax函数与正常的max函数不同:max函数仅输出最大值,但Softmax函数确保较小的值具有较小的概率,并且不会直接丢弃。我们可以认为它是函数的概率版本或“soft”版本。Softmax函数的分母结合了原始输出值的所有因子,这意味着Softmax函数获得的各种概率彼此相关。

Softmax激活函数的特点:

  • 在零点不可微。
  • 负输入的梯度为零,这意味着对于该区域的激活,权重不会在反向传播期间更新,因此会产生永不激活的死亡神经元。

multi-class classification的过程:

image-20240701005701417

input x经过三个式子分别生成z ,经过softmax转化成output ,它们分别是这三个class的posterior probability,由于summation=1,因此做完softmax之后就可以把y的分布当做是一个probability contribution,我们在训练的时候还需要有一个target,因为是三个class,output是三维的,对应的target也是三维的,为了满足交叉熵的条件,target 也必须是probability distribution,这里我们不能使用1,2,3作为class的区分,为了保证所有class之间的关系是一样的,这里使用类似于one-hot编码的方式,即:

image-20240701005908162

这个时候就可以计算一下output y和 target 之间的交叉熵,即 ,同二元分类一样,多元分类问题也是通过极大似然估计法得到最终的交叉熵表达式的,这里就不多说啦。

8.Limitation of Logistic Regression

image-20240701010311183
  • No ,we can’t…☹

因为logistic regression的boundary就是一条直线,但是在这个平面上无论怎么画直线都不可能把图中的两个class分隔开来。

8.1Feature Transformation

如果你还是坚持要用Logistic Regression的话,有一招叫做Feature Transformation,原来的feature分布不好划分,那我们可以将之转化以后,找一个比较好的feature space,让Logistic Regression能够处理。

image-20240701010604893

但麻烦的是,我们并不知道怎么做feature Transformation,如果在这上面花费太多的时间就得不偿失了,于是我们会希望这个Transformation是机器自己产生的,怎么让机器自己产生呢?我们可以让很多Logistic Regression cascade(连接)起来。

image-20240701010735486

举个例子:

image-20240701010905829 image-20240701010951708

通过上面的例子,我们发现,多个Logistic Regression连接起来会产生powerful的效果,我们把每一个Logistic Regression叫做一个neuron(神经元),把这些Logistic Regression串起来所形成的network,就叫做Neural Network,就是类神经网路,这个东西就是Deep Learning!
image-20240701011052489

  • Title: 【从零开始的机器学习之旅】05-Logistic Regression(逻辑回归)
  • Author: Nannan
  • Created at : 2024-07-01 01:19:12
  • Updated at : 2024-09-29 23:21:07
  • Link: https://redefine.ohevan.com/2024/07/01/05-Logistic Regression/
  • License: This work is licensed under CC BY-NC-SA 4.0.
Comments