Logistic Regression (逻辑回归)
Three Steps of machine learning
Step 1:function set
这里的w和x都是vector,两者的乘积是inner product,从上式中我们可以看出,现在这个model(function set)是受w和b控制的,
因此我们不必要再去像前面一样计算一大堆东西,而是用这个全新的由w和b决定的model——Logistic Regression(逻辑回归)
Step 2:Goodness of a function
现在我们有N笔Training data,每一笔data都要标注它是属于哪一个class。
我们就可以去计算某一组w和b去产生这N笔Training data的概率,利用极大似然估计的思想,
最好的那组参数就是有最大可能性产生当前N笔Training data分布的和w*和b*。
由于L(w,b)是乘积项的形式,为了方便计算,我们将上式做个变换,
由于class 1和class 2的概率表达式不统一,上面的式子无法写成统一的形式,为了统一格式,这里将Logistic Regression里的所有Training data都打上0和1的标签,
即output y^ = 1代表class 1,output y^ = 0代表class 2,于是上式进一步改写成:
最终这个summation的形式,里面其实是两个Bernouli distribution(两点分布)的cross entropy(交叉熵):
交叉熵实际上表达的是希望这个function的output和它的target越接近越好
如果p和q这两个distribution一模一样的话,那它们算出来的cross entropy就是0。。
step 3:Find the best function
实际上就是去找到使loss function即交叉熵之和最小的那组参数w*,b*就行了,这里用gradient descent的方法进行运算就可以了。
这里sigmoid function的微分可以直接作为公式记下来:
sigmoid和它的微分的图像如下:
将得到的式子进行进一步化简,可得:
我们发现最终的结果竟然异常的简洁,gradient descent每次update只需要做:
那这个式子到底代表着什么意思呢?现在你的update取决于三件事:
1.learning rate
2.xi 这个是来自于data的
3.y^ - f(xn) 代表f 的output和理性的目标差距有多大 y^是目标值 f(xn)是model的输出值 表示离目标越远,差距越大
Logistic Regression V.S. Linear Regression
Logistic Regression损失函数的选取:交叉熵损失
之前提到了,为什么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更顺利。
Discriminative V.S. Generative
Logistic Regression的方法,我们把它称之为discriminative的方法;而我们用Gaussian来描述posterior Probability这件事,我们称之为Generative的方法.
相同:模型相同,方法不同
不同:判别方法,通过梯度下降,直接找到w,b。
生成方法,通过假设估计N1,N2,μ1,μ2,∑ 来得到w,b 。
结论:同样的模型,同样的训练数据,采用两种方法所得结果(w,b)不同。因为生成方法对概率分布做了假设。
Discriminative model 常比Generative model表现更好
举一个例子来解释一下:
假设总共有两个class,有这样的Training data:每一笔data有两个feature,总共有1+4+4+4=13笔data
如果我们的testing data的两个feature都是1,凭直觉来说会认为它肯定是class 1,
但是如果用naive bayes的方法(朴素贝叶斯假设所有的feature相互独立,方便计算),得到的结果又是怎样的呢?
通过Naive bayes得到的结果竟然是这个测试点属于class 2的可能性更大.
Generative model的好处是,它对data的依赖并没有像discriminative model那么严重,在data数量少或者data本身就存在noise的情况下受到的影响会更小。
而Discriminative model的好处是,在data充足的情况下,它训练出来的model的准确率一般是比Generative model要来的高的。
Multi-class Classification
之前讲的都是二元分类的情况,这里讨论一下多元分类问题,其原理的推导过程与二元分类基本一致:
原来的output z可以是任何值,但是做完softmax之后,你的output yi 的值一定是介于0~1之间,并且它们的和一定是1
这个时候就可以计算一下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] 之间的距离,重新映射之后如下图右侧(红色两个点重合),此时Logistic Regression就可以把它们划分开来
但麻烦的是,我们并不知道怎么做feature Transformation,如果在这上面花费太多的时间就得不偿失了,
于是我们会希望这个Transformation是机器自己产生的,怎么让机器自己产生呢?我们可以让很多Logistic Regression cascade(连接)起来。
因此着整个流程是,先用n个Logistic Regression做feature Transformation(n为每个样本点的feature数量),
生成n个新的feature,然后再用一个Logistic Regression作classifier。
通过上面的例子,我们发现,多个Logistic Regression连接起来会产生powerful的效果,我们把每一个Logistic Regression叫做一个neuron(神经元),
把这些Logistic Regression串起来所形成的network,就叫做Neural Network,就是类神经网路,这个东西就是Deep Learning!