Review
在classification中,我们讨论了通过共用Σ可以得到一个线性的z
从上式可以看到,model是受w和b控制的,因此我们可以想办法通过一个全新的方法去找到w和b,并通过它们去决定一个model–Logistic Regression
step1:function set
这里的function set就是Logistic Regression–逻辑回归
wi:weight; b:bias; σ(z):sigmoid function; xi:input
step2:Goodness of a function
设有N笔Training data,而每一笔data都要标注其是属于哪一个class
假设这些Training data 是从定义好的posterior Probability中产生的(后置概率,也就是概率密度函数),而w和b就决定了这个posterior Probability,然后我们就可以去计算某一组w和b去产生这N笔Training data的概率,利用极大似然估计的思想,最好的那组参数就是有最大可能性产生当前N笔Training data分布的w和b
似然函数只需要将每一个点产生的概率相乘即可,假设是二元分类,所以class2的概率为1-P(X1)的概率
由于L(w,b)是乘积项的形式,为了方便计算,可以将上式交换一下
由于class1和class2的概率表达式不同意,所以为了同一式子的格式,可以将Logistic Regression里所有的Training data都打上0和1的标签,即outputy = 1代表class 1,output y = 0代表class2,于是,式子还可以进一步改写成:
有了统一格式时,就可以将要minimize的对象写成summation的形式:
上式的xn代表第n个样本点,yn则表示第n个样本点的class标签,(1表示class1,0表示class2),最终这个summation的形式,其实内在就是两个Bernouli distribution的cross entropy(交叉熵)
假设有如上图所示的两个distribution p和q,它们的交叉熵就是H(p,q),这也就是之前的推导中在- ln L(w,b)前加一个负号的原因
cross entropy(交叉熵)的含义是表达这两个distribution有多接近,如果p和q这两个distribution一模一样的话,那它们算出来的cross entropy就是0,而f(xn)表示function的output,yn表示预期的target,因此交叉熵实际上表达的是希望这个function的output和它的target越接近越好
step3:Find the best function
实际上就是找使Loss function即交叉熵之和最小的那组参数w*,b*就可以了,可以使用gradient descent的方法进行运算
这里sigmoid function的微分可以直接作为公式记下来:
sigmoid和其微分图像如下:
先计算:
对wi的偏微分,这里y,和1-yn使常数可以先不管,只需要分别求lnfw,b(xn)和ln(1-fw,b(xn))对wi的偏微分即可,推导过程如下所示:
将得到的式子进一步化简,可得:
到这一步,可以发现最后的结果和gradient descent相似,所以gradient descent每次更新只需要做
也就是说update取决于三件事:
·learning rate–自主设定
·input xi – 开组也同样data
·yn - fw,b(xn),代表function的output跟理想target的差距有多大,如果离目标较远,update的步伐就越大。
compare in step1
Logistic Regression是把每一个feature xi加权求和,加上bias,再通过sigmoid function,当作function的output
因为Logistic Regression的output是通过sigmoid function产生的,因此一定是解与0-1之间,而linear Regression的output 并没有通过sigmoid function,所以它可以是任何值
compare in step2
再Logistic Regression中,我们定义的loss function,即要去minimize的对象,是所有example的output和实际target再Bernoulli distribution(两点分布)下的cross entropy(交叉熵)总和
交叉熵:把f(xn)和yn各自看作是一个Bernoulli distribution(两点分布),把他们的cross entropy
之和,就是要去minimize的对象,直观来说,就是希望function的ouput f(xn)和它的target yn越接近越好
而在linear Regression中,loss function的定义相对比较简单,就是单纯的function的output f(xn)和实际target yn再数值上平方和的均值
compare in step 3
神奇的是,Logistic Regression 和linear Regression的wi update的方式是一模一样的,唯一不同的是,Logistic Regression的target yn和output f(xn)都必须在0-1之间,而line让人的target和output的范围是任意值
当前又有一个疑问,为什么Logistic Regression的loss function不能像linear Regression一样用square error来表示呢?----
Logistic Regression + Square error?
从上面machine learning的三个步骤中,会遇到一个问题,如果第n个点的目标target是class1.则yn = 1,如果function 的 output fw,b(xn) = 1的话,说明已经离target很接近了,fw,b(x)-y这一项为0,于是得到的微分为0.但是当output 为 0,也就是离target还很遥远的时候,由于在step3中求出来的update表达式中有一个fw,b(xn),因此这个时候也会导致微分为0
class2时,得到的结果也一样
如果将参数的变化对total loss作图的话,loss function选择cross entropy或square error,参数的变化跟loss的变化如图所示(黑色是cross entropy,红色是square error)
假设中心点就是距离目标很远的地方,如果是cross entropy的话,距离目标越远,微分值越大,参数update时变化量越大,也就是步伐越大。
但当选择square error时,过程就会很卡,因为距离目标远时,微分值非常小,移动的速度会非常满。实际操作时,当gradient接近于0时,其实也很可能会停下来,因此使用square error很有可能在一开始的时候就卡住不懂,而且也不能随意增大learning rate,因为在做gradient descent时,gradient接近于0,有可能离target很远,也可能很近,因此不知道learning rate应该设大还是设小
因此,尽管square error可以使用,但是会出现update十分缓慢的现象,因此交叉熵可以让training更加顺利
same model but different currency
Logistic Regression的方法,将之称为discriminative的方法;而如上一章的用Gaussian来描述posterior Probability这件事,称之为Generative
实际上它们用的model都是一样的,如果使用Logistic Regression的话,可以用gradient descent的方法直接去把b和w找出来,如果使用Generative model的话,就要先去算u1,u2,Σ^-1,再去计算b和w
经过计算,会发现两种方法得到的b和w是不同的,尽管function set是同一个,但是由于做了不同的假设,最终从同样的Training data里找出来的参数会是不一样的
在Logistic Regression里,我们并没有做任何实质性的假设,没有对Probability distribution有任何的描述,就是单纯去找b和w
在Generative model 里,我i们对于probability distribution是有实质性假设的,如Gaussian分布等,甚至假设在相互独立的前提下是否可以是naive bayes(朴素贝利叶),根据这些假设,然后找到最终的b和w
下图是Generative model和discrimative model的预测结果比较:
实际上是Logistic Regression的表现更好,下面是一个例子:
toy example
假设共有两个class,有这样的Training data:每一笔data有两个feature,总共有1+4+4+4 = 13笔data
如果testing data的两个feature都是1,凭直觉会认为是class1,但是如果使用naive bayes的方法(朴素贝利叶假设所有的feature相互独立),得到如下结果:
通过naive bayes得到的结果是测试点属于class 2 的可能性比较大,这跟直觉比起来是相反的。实际上我们直觉认为两个feature都是1的测试点属于class1的可能性更大是因为,潜意识里认为这两个feature之间是存在联系的,但是对于Naive bayes来说,它并不考虑不同样本之间的联系,朴素贝利叶认为在样本相互独立的前提下,class没有sanple出都是1的data,是一位sample不够多,如果sample够多,它认为class2观察到都是1的data的可能性比class1要大
Naive bayes认为从class 2中找到样本点x的概率是x中第一个feature出现的概率与第二个feature出现的概率之积,即:P(x|C2) = p(x1=1|C2)*p(x2=1|C2);但是在直觉中,我们有认为两个feature之间是存在某种联系的,也就是说P(x|C2)不能够轻易地被拆分成两个独立地概率成绩,也就是说,朴素贝利叶是多假设了一些条件
所以Generative model和discriminative model地差别在于,Generative地model自身有做某些假设,假设了data来自于某个概率模型;而Discriminative地model则完全不作任何假设
Generatice model做的事情其实就是脑部,会自己去想想一些事情,于是会做出一个和我们人类直觉想法不太一样地判断结果。就像toy example里,我们做了朴素贝利叶这样一个假设,于是朴素贝利叶会在class2中并没有出现两个feature都是1的样本点的前提下,自己去脑部这样的点。
通常脑部都不是一件好事,因为给data强加了一些它本身并没有的属性,但是在data很少的情况下,脑部也是有用的,discriminative model并不是在任何情况下都是最好的,因为它非常依赖data,而data不足或者有问题的情况下,那Generative model做一些假设和脑部,反而可以把打他的不足或有问题部分的影响降到最低
对于分类的问题(主要是二元分类),一般有两种方法去处理,一种是Generative的方法,另一种是Discriminative的方法,注意到分离的问题的model都是从贝叶斯方程出发的。两种方法的区别在于:
Generative model会假设一个带参数的Probability contribute,利用这个假设的概率分布函数带入去计算P(x|Ci)和P(x|Cj),结合极大似然估计法最终得到最优的参数以确定model的具体形式
Discriminative model不作任何假设,因此无法通过假定的Probability distribute的到表达式,直接利用交叉熵和gradient descent杰哥极大似然估计法得到最优的b和w,以确定model的具体形式
最后,利用得到的P(Ci|x)与0.5相比较去判断它属于哪个class的可能性更大
Generatice的好处主要是对于data的依赖并不会太大,在data量少或data存在noise的情况下收到的影响比较潇
而Discriminative model的好处是,在data充足的情况下,训练出来的model的准确率一般比Generative要高
softmax
之前讨论的都是二元分类的情况,稍微讨论一下多元分类的问题,其原理的推导过程与二元分类基本一致
假设有三个class:C1,C2,C3,每一个class都有自己的weight和bias,其中,w1,w2,w3分别代表三个vector,b1,b2,b3分裂待变三个const,input x也是一个vector
softmax的意思是对最大值做强化,就是第一步时,对z取exponential会使大的值与小的值之间的差距拉开,即强化大的值。
将z1,z2,z3丢尽一个softmax的function,softmax做的事情主要是三步:
·取exponential,得到ez1,ez2,ez3
·将三个exponential累计求和,得到total sum:
·将total sum分别出去这三项(归一化)
原来的output z可以是任何值,但是昨晚softmax之后,output yi值一定介于0-1之间,并且它们的和一定是1,yi便是input x属于第i个class的概率。
而softmax的output,就是拿来当z的posterior probability
multi-class classification的过程
如下图所示,input x经过三个式子分别生成z1,z2,z3,经过softmax转化成output y1,y2,y3,它们分别是这三个class的posterior probability,由于summation=1,因此昨晚softmax之后就可以将y的分布当作是一个probability contribution,在训练时还需要一个target,因为是3个class,output是三维的,对应的target也是三位的,为了满足交叉熵的条件,target y也必须是probability distribution,治理不能使用1,2,3作为class的区分,为了保证class之间的关系是一样的,使用类似于one-hot编码的方式,即:
这时候就可以计算一下output y和target y之间的交叉熵,同二元分类一样,多元分类问题也是通过极大似然估计法得到最终的交叉熵表达式的。
Limitation of Logistic Regression
Logistic Regression其实有很强的限制,如下图的Training data,想要用Logistic Regression对其进行分类,其实是做不到的
因为Logistic Regression在两个class之间的boundary就是一条直线,但是在这个平面上无论怎么画直线都不可能将图中的两个class分隔开来。
Feature Transformation
如果坚持要用Logistic Regression的话,有一招叫做Feature Transformation,原来的feature不好划分,可以将值先转化以后,找一个比较好的feature space,让Logistic Regression能够处理
假设定义x1是原来的点到[0,0]的距离,x2是原来的点到[1,1]的距离,重新映射后如下图所示,便可以划分开
但是我们往往不知道怎么做feature Transformation,花费太多时间在上面也会得不偿失,因此我们希望可以让机器自己做,也就是让许多Logistic Regression 连接起来
比如,我们让一个input x的两个feature x1,x2经过两个Logistic Regression的transform,得到新的feature x1,x2,在新的feature space上,class1和class2是可以用一条直线分开的,那么最后只需要再接另外一个Logistic Regression的model,便可以根据新的feature,就可以将class1和class2分开
因此,让机器自己做Logistic Regression的流程就是:先用n个Logistic Regression做feature transformation(n为每个样本点的feature数量),生成n个新的feature,然后再用一个Logistic Regression做分类。
Logistic Regression的boundary一定是一条直线,可以有很多画法,但是肯定是按照某个方向从高到低的等高线分布,具体的分布有Logistic Regression的参数决定,每一条直线都是由z=b+wx组成的(二维feature的直线画在二维平面上,多为feature的直线则画在多维空间上)
注意,Logistic Regression只是一条直线,它指的是属于这个类或不属于这个类这昂个情况,因此最后的这个Logistic Regression是要跟检测的目标类相关的,当只是二元分类时,最后只需要一个Logistic Regression即可,当面对多元分类问题,则需要多条支线划分所有的类
Powerful Cascading Logistic Regression
通过上面的例子,可以发现,多个Logistic Regression连接起来会产生powerful的效果,我们将每一个Logistic Regression叫做一个neuron(神经元),将这些Logistic Regression串起来所形成的网络,就会叫做类神经网络,也就是DEEP LEARING