【学习6】深度学习&高斯分布

Gaussian Distribution宝可梦属性分类----二元分类

先介绍一下高斯函数,这里u 表示均值,Σ 表示方差,两者都是矩阵matrix,那高斯函数的概率密度函数则是:

 同样的Σ,不同的u,概率分布最高点的地方是不一样的。如果是同样的u,不同的Σ,概率分布最高点的地方是一样的,但是分布的密集程度是不一样的。那接下来的问题就是怎么去找出这个Gaussian,只需要去估测出这个Gaussian的均值u和协方差Σ即可。

估测u和Σ的方法就是极大似然估计法(Maximum Likelihood),极大似然估计的思想是,找出最特殊的那对u和Σ,从它们共同决定的高斯函数中再次采样出79个点,使”得到的分布情况与当前已知79点的分布情况相同“这件事情发生的可能性最大。实际上任意一组u和Σ对应的高斯函数(u 表示该Gaussian的中心点,Σ表示该Gaussian的分散程度)都有可能sample出跟当前分布一致的样本点,就像上图中的两个红色圆圈所代表的高斯函数,但肯定存在着发生概率最大的哪一个Gaussian,而这个函数就是我们要找的。极大似然函数实际上就是该事件发生的概率就等于每个点都发生的概率之积,我们只需要把每一个点的data代进去,就可以得到一个关于u和Σ的函数,分别求偏导,解出微分是0的点,即使L最大的那组参数,便是最终的估测值,通过微分得到的高斯函数的u和Σ的最优解如下:

 平均值u*可以让这个L最大。

 

对于已知的平均值u*,就可以算出来Σ*

也就是说:可以当做公式来记忆(u∗刚好是数学期望,Σ*刚好是协方差)

 

 

 得出这些之后,我们就可以进行分类classification了。

 

 

横轴是Defense,纵轴是SP Defense,蓝色的点是水系的宝可梦的分布,红色的点是一般系的宝可梦的分布,对图中的每一个点都计算出它是class 1的概率P ( C 1 ∣ x ) 。这个概率用颜色来表示,如果某点在红色区域,表示它是水系宝可梦的概率更大;如果该点在其他颜色的区域,表示它是水系宝可梦的概率比较小。

因为我们做的是分类问题,因此令几率>0.5的点为类别1,几率<0.5的点为类别2,也就是右上角的图中的红色和蓝色两块区域。再把testing data上得到的结果可视化出来,即右下角的图,发现分的不是太好,正确率才是47%。我们之前用的只是Defense和SP Defense这两个参数,在二维空间上得到的效果不太好,但实际上一开始就提到了宝可梦总共是有6个features的,也许在二维空间上它们是重叠在一起的,但是在六维空间上看它们也许会分得很好,每一个宝可梦都是六维空间中的一个点,于是我们的u uu是一个6-dim的vector,Σ则是一个6*6的matrix,发现得到的准确率也才54%,这个分类器表现得很糟糕,是否有办法将它改进的更好?

 

 

Modifying Model修改模型

其实之前使用的model是不常见的,你是不会经常看到给每一个Gaussian都有自己的mean(u)和covariance(Σ),比如我们的class 1用的是u1和Σ1 ,class 2用的是u2 和Σ2。比较常见的做法是,不同的class可以共享同一个covariance matrix。其实covariance是跟输入的feature size的平方成正比的。所以当feature的数量很大的时候,Σ大小的增长是可以非常快的。在这种情况下,给不同的Gaussian以不同的covariance matrix,会造成model的参数太多。而参数多会导致该model的covariance过大,出现overfitting的现象。因此对不同的class使用同一个covariance matrix,可以有效减少参数。

此时就把u 1、u 2和共同的Σ一起去合成一个极大似然函数,此时可以发现,得到的u 1 和u 2 和原来一样,还是各自的均值,而Σ则是原先两个Σ 1 和Σ 2的加权。

 

 

 

class 1和class 2在没有共用covariance matrix之前,它们的分界线是一条曲线;如果共用covariance matrix的话,它们之间的分界线就会变成一条直线。这样的model,我们也称之为linear model(尽管Gaussian不是linear的,但是它分两个类别的界限boundary是linear)。

如果我们考虑所有的feature,并共用covariance的话,原来的54%的正确率就会变成73%。显然是有分对东西的,但是为什么会做到这样子,我们是很难分析的。因为这是在高维空间中发生的事情,我们很难知道boundary到底是怎么切的。但这就是machine learning它fancy的地方,人没有办法知道怎么做,但是machine可以帮我们做出来。

 

总结:分类的三个步骤

1、Find a function set(model)选择一个模型

这些required probability P ( C )和probability distribution P ( x ∣ C ) 就是model的参数。选择不同的Probability distribution(比如不同的分布函数,或者是不同参数的Gaussian distribution),就会得到不同的function。把这些不同参数的Gaussian distribution集合起来,就是一个模型。如果不适用高斯函数而选择其他分布函数,就是一个新的模型了。当这个posterior Probability P ( C ∣ x ) > 0.5的话,就输出为class 1,反之就输出为class 2。

(P ( C 1 ∣ x ) + P ( C 2 ∣ x ) = 1 因此没必要对class 2再去计算一遍)

2、Goodness of function定于一个方程的好坏

对于Gaussian distribution这个模型来说,我们要评价的是决定这个高斯函数形状的均值u 和协方差Σ这两个参数的好坏。而极大似然函数L ( u , Σ )的输出值,就评价了这组参数的好坏。

3、Find the best function找到最好的参数

找到的那个最好的方程,就是使L ( u , Σ )值最大的那组参数,实际上就是所有样本点的均值和协方差。这里上标i表示第i个点,这里x是一个特征的向量,用下标来表示这个向量中的某个特征。

 

我们可以考虑这样一件事情,假设x = [ x 1  x 2  x 3  . . .  x k  . . . ] 中每一个维度 x k

的分布都是相互独立的,它们之间的协方差covariance都是0。那我们就可以把x产生的几率拆解成x 1 , x 2 , . . . , x k产生的几率之积。这里每一个维度的分布函数都是一维的高斯分布Gaussian distribution。

 

 

如果这样假设的话,等于是说,原来那多维度的Gaussian,它的covariance matrix变成是diagonal(对角的)。在不是对角线的地方,值都是0。这样就可以更加减少需要的参数量,就可以得到一个更简单的model。我们把上述这种方法叫做 Naive Bayes Classifier(朴素贝叶斯分类法)。如果真的明确了所有的特征之间是相互独立的,是不相关的,使用朴素贝叶斯分类法是会很好的。如果这个假设是不成立的,那么Naive bayes classfier的误差就会很大,它就不是一个好的分类器classifier(朴素贝叶斯分类法本质就是减少参数)。

当然这个例子里如果使用这样的模型,得到的结果也不理想。因为各种特征之间的协方差还是必要的。比如战斗力和防御力它们之间是正相关的,协方差不能等于0。总之,寻找模型总的原则是,尽量减少不必要的参数,但是必然的参数绝对不能少。

那怎么去选择分布函数呢?有很多时候凭直觉就可以看出来,比如宝可梦有某个特征是二维的,它代表的是:是或不是。这个时候就不太可能是高斯分布了,而很有可能是伯努利分布(两点分布)。

Posterior Probability后验概率

 

 

 

 当Σ 1和Σ 2 共用一个Σ时,经过化简相消z就变成了一个线性方程。x的系数是一个向量 w,后面的一大串数字其实就是一个常数项b。

 

那在Generative model里面,我们做的事情是:我们用某些方法去找出N 1 , N 2 , u 1 , u 2 , Σ 。找出这些以后就算出w和b,把它们代进P ( C 1 ∣ x ) = σ ( w· x + b ) 这个式子,就可以算出概率。但是,当你看到这个式子的时候,你可能会有一个直觉的想法,为什么要这么麻烦呢?我们的最终目标都是要找一个向量 w和常数b吗?

通过样本点的均值u和协方差Σ来计算进而利用计算得到新的样本点x属于class 1的概率,由于是二元分类,属于class 2的概率P ( C 2∣x ) = 1 − P ( C 1 ∣ x ) 。之后我们还推导了。并且在高斯分布下考虑class 1和class 2共用Σ,可以得到一个线性的z。

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

机器学习的三步

1、function set

这里的function set就是Logistic Regression——逻辑回归

w i :weight,b:bias,σ ( z ):sigmoid function,x i:input

 

 

 

2、Goodness of a function

现在我们有N笔训练数据,每一笔数据都要标注它是属于哪一个class。假设这些训练数据是从我们定义的posterior Probability中产生的(后置概率,某种意义上就是概率密度函数)。而w和b就决定了这个posterior Probability,那我们就可以去计算某一组w和b,进而去产生这N笔T训练数据的概率。利用极大似然估计的思想,最好的那组参数就是,有最大可能性产生当前N笔训练数据分布的w ∗和b ∗似然函数,只需要将每一个点产生的概率相乘即可。注意,这里假定是二元分类,class 2的概率为1减去class 1的概率。

 

 

 由于class 1和class 2的概率表达式不统一,上面的式子无法写成统一的形式,为了统一格式,这里将Logistic Regression里的所有Training data都打上0和1的标签,即output y ^ = 1  代表class 1,output y ^ = 0代表class 2,于是上式进一步改写成:

 

 

 

 

 

Bernouli distribution(两点分布)的cross entropy(交叉熵)

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

 

 

3、Find the best function

实际上就是去找到使loss function即交叉熵之和最小的那组参数w ∗ , b ∗就行了,这里用gradient descent的方法进行运算就好。这里sigmoid function的微分可以直接作为公式记下来:

,sigmoid和它的微分的图像如下:

先计算

 对w i 的偏微分,

是常数先不用管它,只需要分别求出对w i 的偏微分即可,整体推导过程如下:

 

 

 

 

 

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

learning rate,是你自己设定的

x i ,来自于data

,代表function的output跟理想target的差距有多大,如果离目标越远,update的步伐就要越大。

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

 

 

假设中心点就是距离目标很近的地方,如果是cross entropy的话,距离目标越远,微分值就越大,参数update的时候变化量就越大,迈出去的步伐也就越大。但当你选择square error的时候,过程就会很卡,因为距离目标远的时候,微分也是非常小的,移动的速度是非常慢的,我们之前提到过,实际操作的时候,当gradient接近于0的时候,其实就很有可能会停下来,因此使用square error很有可能在一开始的时候就卡住不动了,而且这里也不能随意地增大learning rate,因为在做gradient descent的时候,你的gradient接近于0,有可能离target很近也有可能很远,因此不知道learning rate应该设大还是设小。综上,尽管square error可以使用,但是会出现update十分缓慢的现象,而使用cross entropy可以让你的Training更顺利。

Logistic Regression的方法,我们把它称之为discriminative的方法;而我们用Gaussian来描述posterior Probability这件事,我们称之为Generative的方法。用这两种方法得到的b和w是不同的,尽管我们的function set是同一个,但是由于做了不同的假设,最终从同样的Training data里找出来的参数会是不一样的。

 

 

如果我们的测试数据的两个特征都是1,凭直觉来说会认为它肯定是class 1,但是如果用naive bayes的方法(朴素贝叶斯)假设所有的特征相互独立,方便计算),得到的结果又是怎样的呢?通过Naive bayes得到的结果竟然是这个测试点属于class 2的可能性更大,这跟我们的直觉比起来是相反的。实际上我们直觉认为两个feature都是1的测试点属于class 1的可能性更大,是因为我们潜意识里认为这两个feature之间是存在某种联系的。但是对Naive bayes来说,它是不考虑不同维度之间的关系。Naive bayes认为在维度相互独立的前提下,class 2没有sample出都是1的data,是因为sample的数量不够多,如果sample够多,它认为class 2观察到都是1的data的可能性会比class 1要大。

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的不足或是有问题部分的影响给降到最低。

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

总结:

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

 

 

其中分子表示属于第i类的可能性,分母表示遍历从1到n所有的类的可能性,两种方法的区别在于:

Generative model会假设一个带参数的Probability distribution,利用这个假设的概率分布函数带入(1)中去计算

,结合极大似然估计法最终得到最优的参数以确定这个model的具体形式.

DIscriminative model不作任何假设,因此它无法通过假定的Probability distribution得到P ( x ∣ C i )的表达式,因此它使用的是(2),直接去利用交叉熵和gradient descent结合极大似然估计法得到最优的b和w,以确定model的具体形式.

最后,利用得到的P ( C i ∣ x )与0.5相比较来判断它属于那个class的可能性更大.

Generative model的好处是,它对data的依赖并没有像discriminative model那么严重,在data数量少或者data本身就存在noise的情况下受到的影响会更小,而它还可以做到Prior部分与class-dependent部分分开处理,如果可以借助其他方式提高Prior model的准确率,对整一个model是有所帮助的(比如前面提到的语音辨识)

而Discriminative model的好处是,在data充足的情况下,它训练出来的model的准确率一般是比Generative model要来的高的

Multi-class Classification多元分类

softmax

假设有三个class:C 1 , C 2 , C 3 ,每一个class都有自己的weight和bias,这里w 1 , w 2 , w 3 分布代表三个vector,b 1 , b 2 , b 3 分别代表三个const,input x也是一个vector。

softmax的意思是对最大值做强化,因为在做第一步的时候,对z取exponential会使大的值和小的值之间的差距被拉得更开,也就是强化大的值。

 

 

 

原来的output z可以是任何值,但是做完softmax之后,你的输出yi 的值一定是介于0~1之间,并且它们的和一定是1。

multi-class classification的过程:

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

 

Limitation of Logistic Regression逻辑回归的限制

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

Feature Transformation特征转换

如果坚持要用Logistic Regression的话,有一招叫做Feature Transformation,原来的feature分布不好划分,那我们可以将之转化以后,找一个比较好的feature space,让Logistic Regression能够处理假设这里定义x 1 ′。x_1'是原来的点到[ 0 0 ]之间的距离,x_2'是原来的点到[ 1 1 ]之间的距离,重新映射之后如下图右侧(红色两个点重合),此时Logistic Regression就可以把它们划分开来

 

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

我们让一个input x的两个feature x 1 , x 2 经过两个Logistic Regression的transform,得到新的feature x 1 ′ , x 2 ′,在这个新的feature space上,class 1和class 2是可以用一条直线分开的,那么最后只要再接另外一个Logistic Regression的model(对它来说,x 1 ′ , x 2 ′才是每一个样本点的"feature",而不是原先的x 1 , x 2 ,它根据新的feature,就可以把class 1和class 2分开。

 

 

 

这里的Logistic Regression只是一条直线,它指的是“属于这个类”或“不属于这个类”这两种情况,因此最后的这个Logistic Regression是跟要检测的目标类相关的,当只是二元分类的时候,最后只需要一个Logistic Regression即可,当面对多元分类问题,需要用到多个Logistic Regression来画出多条直线划分所有的类,每一个Logistic Regression对应它要检测的那个类。

Powerful Cascading Logistic Regression

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

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值