选修-5-Logistic Regression
1. 逻辑回归
下面是这位大佬的Click.逻辑回归是用于分类的算法,它是在线性回归的基础上添加了一层映射.
这里的\(w\)和\(x\)都是\(vector\),两者的乘积是inner product,从上式中我们可以看出,现在这个\(model\)(\(function\) \(set\))是受\(w\)和\(b\)控制的,因此我们不必要再去像前面一样计算一大堆东西,而是用这个全新的由\(w\)和\(b\)决定的\(model\)——\(Logistic\) \(Regression\)(逻辑回归).也就是之前将几个式子的乘积视为\(w\),而现在逻辑回归我们直接求\(w\).
2. Three Steps of machine learning
介绍一个新的算法,从三步开始.
2.1 Step 1: function set
这里的function set就是Logistic Regression
——逻辑回归
2.2 Step 2: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\)
似然函数只需要将每一个点产生的概率相乘即可.注意,这里假定是二元分类,class 2的概率为1减去class 1的概率.
因为我们平时最小化处理比较多,因此将\(L\)取负再取\(Log\)也能达到同样的效果.但是我们可以发现\(ln(1-f_{w,b}(x^3))\)和之前的很难统一.因此Logistic Regression
里的所有Training data
都打上\(0\)和\(1\)的标签,即\(\hat y = 1\)表示第\(1\)类,\(\hat y = 0\)表示第\(2\)类.于是式子可以改为:
这里有兴趣可以了解一下损失函数的来源,介绍了这个形式的\(loss\) \(function\)是怎么来的,和伯努利分布有关.
现在已经有了统一的格式,我们就可以把要minimize的对象写成一个summation的形式:
下图中蓝色下划线实际上代表的是两个伯努利分布(0-1分布,两点分布)的 cross entropy(交叉熵).
cross entropy什么意思呢?假设有两个分布\(p\)、\(q\),都服从两点分布.它们的交叉熵就是上图\(H(p,q)\).交叉熵代表的含义是这两个分布有多接近,如果两个分布是一模一样的,那计算出的交叉熵就是0.这也就是之前的推导中在\(−lnL(w,b)\)前加一个负号的原因.而这里\(f(x^n)\)表示\(function\)的output,\(y^n\)表示预期的\(target\),因此交叉熵实际上表达的是希望这个\(function\)的\(output\)和它的\(target\)越接近越好.
这实际上也是我们的损失函数.
2.3 step 3:Find the best function
实际上就是去找到使loss function
即交叉熵之和最小的那组参数\(w\)和\(b\).这里用gradient descent的方法进行运算就ok.假设求\(w_i\)的偏微分,步骤如下:
注意\(\frac{\sigma ln(1-f_{w,b}(x))}{\sigma w_i}\)与之前是不同的,多一个负号.
最后得出的式子可以仔细分析一下,这个式子主要受三个值影响:
- \(\eta\),
learning rate
,是你自己设定的 - \(x_i\),来自数据集.
- \(\hat y^n - f_{w,b}(x^n)\)代表function的output跟理想target的差距有多大,如果离目标越远,update的步伐就要越大,这也恰好符合实际.
3. Logistic Regression V.s. Linear Regression
我们将逻辑回归与线性回归做一个比较.下面是这个大佬的总结.
4. Logistic Regression + Square error?
之前提到了,为什么Logistic Regression的loss function不能用square error来描述呢?我们现在来试一下这件事情,重新做一下machine learning的三个step.
以作图来分析的话,就是如下.如果我们把参数的变化对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十分缓慢的现象,而使用cross entropy可以让你的Training更顺利.
5. Discriminative v.s. Generative
逻辑回归的方法称为\(Discriminative\)(判别)方法;上一篇中用高斯来描述后验概率,称为\(Generative\)(生成)方法.当生成方法的协方差设置为\(share\)时,它们的函数集都是一样的:
如果是用\(Logistic\) \(Regression\)的话,可以用\(gradient\) \(descent\)的方法直接去把b和w找出来;如果是用Generative model的话,我们要先去算\(u_1\)、\(u_2\)、\(\Sigma^{-1}\).然后算出b和w
你会发现用这两种方法得到的b和w是不同的,尽管我们的function set是同一个,但是由于做了不同的假设,最终从同样的Training data里找出来的参数会是不一样的.
哪一个假设的结果是比较好的呢?Generative model和discriminative model的预测结果比较如下:
实际上Discriminative的方法常常会比Generative的方法表现得更好,这里举一个简单的例子来解释一下.
假设总共有两个class,有这样的Training data:每一笔data有两个feature,总共有1+4+4+4=13笔data.
如果我们的testing data的两个feature都是1,凭直觉来说会认为它肯定是class 1,但是如果用naive bayes的方法(朴素贝叶斯假设所有的feature相互独立,方便计算),得到的结果又是怎样的呢?
class 1的数据只有一个,因此\(P(C_1) = \frac{1}{13}\).在class 1里,特征\(x_1 = 1\)的几率是\(100\)%.
有了下面这些,就能计算数据来自第一类的几率.
通过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要大.
通常脑补不是一件好的事情,因为你给你的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预测地更精确.
6. Multi-class Classification
6.1 softmax
之前讲的都是二元分类的情况,这里讨论一下多元分类问题,其原理的推导过程与二元分类基本一致.
Softmax的输出就是用来估计\(z\)的后验概率(Posterior
Probability
).由于summation=1,因此做完softmax之后就可以把y的分布当做是一个probability contribution.
6.2 为什么Softmax的输出可以用来估算后验概率?
参考这个佬的博客吧:CLick
假设我们用的是Gaussian distribution(共用covariance),经过一般推导以后可以得到softmax的function,而从information theory也可以推导出softmax function,Maximum entropy本质内容和Logistic Regression是一样的,它是从另一个观点来切入为什么我们的classifier长这样子
6.3 定义target
我们在训练的时候还需要有一个target,因为是三个class,output是三维的,对应的target也是三维的,为了满足交叉熵的条件,target \(\hat{y}\)也必须是probability distribution,这里我们不能使用1,2,3作为class的区分,为了保证所有class之间的关系是一样的,这里使用类似于one-hot编码的方式,即
注意是整体\(\hat y\)的向量,而不是\(\hat y_1\).这个时候就可以计算一下output \(y\)和 target \(\hat{y}\)之间的交叉熵,即\(-\sum\limits_{i=1}^3 \hat{y}_i \ln y_i\),同二元分类一样,多元分类问题也是通过极大似然估计法得到最终的交叉熵表达式的,这里不再赘述.
7. Limitation of Logistic Regression
下面例子中无法单纯的用逻辑回归来分类.
因为Logistic Regression
在两个class之间的boundary就是一条直线,但是在这个平面上无论怎么画直线都不可能把图中的两个class分隔开来.
7.1 Feature Transformation
如果坚持要用Logistic Regression的话,有一招叫做Feature Transformation,原来的feature分布不好划分,那我们可以将之转化以后,找一个比较好的feature space,让Logistic Regression能够处理.
假设这里定义\(x_1'\)是原来的点到\(\begin{bmatrix}0\\0 \end{bmatrix}\)之间的距离,\(x_2'\)是原来的点到\(\begin{bmatrix}1\\ 1 \end{bmatrix}\)之间的距离,重新映射之后如下图右侧(红色两个点重合),此时Logistic Regression就可以把它们划分开来.
但麻烦的是,我们并不知道怎么做feature Transformation,如果在这上面花费太多的时间就得不偿失了,于是我们会希望这个Transformation是机器自己产生的,怎么让机器自己产生呢?
我们可以让很多个Logistic Regression model cascade(连接)起来
7.2 级联Logistic Regression model
可以将很多的逻辑回归接到一起,就可以进行特征转换。比如下图就用两个逻辑回归,对\(z_1\),\(z_2\)来进行特征转换,然后对于\(x_1\)′,\(x_2\)′.再用一个逻辑回归方法\(z\)来进行分类.
通过上面的例子,我们发现,多个Logistic Regression连接起来会产生powerful的效果,我们把每一个Logistic Regression叫做一个neuron(神经元),把这些Logistic Regression串起来所形成的network,就叫做Neural Network,就是类神经网路,这个东西就是Deep Learning!