Machine Learning —— Logistic Regression

Machine Learning —— Logistic Regression

Review

在classification章节中,讨论了利用样本点的均值和协方差来计算 P ( C 1 ) , P ( x ∣ C 1 ) , P ( C 2 ) , P ( x ∣ C 2 ) P(C_1),P(x|C_1),P(C_2),P(x|C_2) P(C1​),P(x∣C1​),P(C2​),P(x∣C2​),进而计算得到新的样本点x属于class1的概率
之后还推导了 P ( C 1 ∣ X ) = σ ( z ) = 1 1 + e − z P(C_1|X)=\sigma(z)=\frac{1}{1+e^{-z}} P(C1​∣X)=σ(z)=1+e−z1​,并且在Gaussian distribution下考虑class1和class2共用 Σ \Sigma Σ,可以得到一个线性的 z z z

P w , b ( C 1 ∣ X ) = σ ( z ) = 1 1 + e − z P_{w,b}(C_1|X)=\sigma(z)=\frac{1}{1+e^{-z}} Pw,b​(C1​∣X)=σ(z)=1+e−z1​

z = w x + b = ∑ i w i x i + b z=wx+b=\sum_iw_ix_i+b z=wx+b=∑i​wi​xi​+b

此处的w和x都是vector,两者的乘积是inner product,这个model是受w和b控制的,也称作——Logistic Regression

Three Steps of machine learning

Step1: function set

function set就是Logistic Regression
w i w_i wi​:weight   b b b:bias   σ ( z ) \sigma(z) σ(z):sigmoid function   x i x_i xi​input
Machine Learning —— Logistic Regression

Step2: Goodness of a function

现在有N笔Training data,每一笔data都要标注它属于哪一类

假设这些Training data是从我们定义的posterior probability(后置概率)中产生的,而w和b决定了概率的大小,可以计算某一组w和b产生这N笔training data的概率,利用极大似然估计思想,最好的那组参数就是有最大可能性产生当前N笔Training data分布的w和b

(这里是二元分类,class2的概率为1-class)
Machine Learning —— Logistic Regression
为方便计算,将上式做变换:

w ∗ , b ∗ = a r g m a x w , b L ( w , b ) = a r g m i n w , b ( − l n L ( w , b ) ) w^*,b^*=arg\mathop{max}\limits_{w,b}L(w,b)=arg\mathop{min}\limits_{w,b}(-lnL(w,b)) w∗,b∗=argw,bmax​L(w,b)=argw,bmin​(−lnL(w,b))

− l n L ( w , b ) = − l n f w , b ( x 1 ) − l n f w , b ( x 2 ) − l n ( 1 − f w , b ( x 3 ) ) − . . . -lnL(w,b)=-lnf_{w,b}(x^1)-lnf_{w,b}(x^2)-ln(1-f_{w,b}(x^3))-... −lnL(w,b)=−lnfw,b​(x1)−lnfw,b​(x2)−ln(1−fw,b​(x3))−...

为统一格式,将所有的Training data都打上0和1的标签
Machine Learning —— Logistic Regression
于是上式可改写为:

− l n L ( w , b ) = − [ y ^ 1 l n f w , b ( x 1 ) + ( 1 − y ^ 1 ) l n ( 1 − f w , b ( x 1 ) ) ] -lnL(w,b)=-[\hat{y}^1lnf_{w,b}(x^1)+(1-\hat{y}^1)ln(1-f_{w,b}(x^1))] −lnL(w,b)=−[y^​1lnfw,b​(x1)+(1−y^​1)ln(1−fw,b​(x1))]
          − [ y ^ 2 l n f w , b ( x 2 ) + ( 1 − y ^ 2 ) l n ( 1 − f w , b ( x 2 ) ) ] -[\hat{y}^2lnf_{w,b}(x^2)+(1-\hat{y}^2)ln(1-f_{w,b}(x^2))] −[y^​2lnfw,b​(x2)+(1−y^​2)ln(1−fw,b​(x2))]
          − [ y ^ 3 l n f w , b ( x 3 ) + ( 1 − y ^ 3 ) l n ( 1 − f w , b ( x 3 ) ) ] -[\hat{y}^3lnf_{w,b}(x^3)+(1-\hat{y}^3)ln(1-f_{w,b}(x^3))] −[y^​3lnfw,b​(x3)+(1−y^​3)ln(1−fw,b​(x3))]
          − . . . -... −...
写成summation的形式:
− l n L ( w , b ) = ∑ n − [ y ^ n l n f w , b ( x n ) + ( 1 − y ^ n ) l n ( 1 − f w , b ( x n ) ) ] -lnL(w,b)=\sum_n-[\hat{y}^nlnf_{w,b}(x^n)+(1-\hat{y}^n)ln(1-f_{w,b}(x^n))] −lnL(w,b)=∑n​−[y^​nlnfw,b​(xn)+(1−y^​n)ln(1−fw,b​(xn))]

x n x^n xn表示第n个样本点,最终的summation形式是两个Bernouli distribution的cross entropy
Machine Learning —— Logistic Regression
cross entropy(交叉熵)的含义是表达这两个distribution有多接近,如果上图中p和q这两个distribution一模一样的话,那它们算出来的cross entropy=0,而这里 f ( x n ) f(x^n) f(xn)表示function的output, y ^ n \hat{y}^n y^​n表示预期的target,因此交叉熵表达的是希望这个function的output(预测概率)和其target(实际)越接近越好

Step3: Find the best function

实际上就是找到使交叉熵之后最小的那组参数w和b,这里用gradient descent的方法进行运算

(sigmoid function的微分可以直接作为公式记下来: ∂ σ ( z ) ∂ z = σ ( z ) ( 1 − σ ( z ) ) \frac{\partial \sigma(z)}{\partial z}=\sigma(z)(1-\sigma(z)) ∂z∂σ(z)​=σ(z)(1−σ(z)))

先计算 − l n L ( w , b ) = ∑ n − [ y ^ n l n f w , b ( x n ) + ( 1 − y ^ n ) l n ( 1 − f w , b ( x n ) ) ] -lnL(w,b)=\sum_n-[\hat{y}^nlnf_{w,b}(x^n)+(1-\hat{y}^n)ln(1-f_{w,b}(x^n))] −lnL(w,b)=∑n​−[y^​nlnfw,b​(xn)+(1−y^​n)ln(1−fw,b​(xn))]对 w i w_i wi​的微分,这里 y ^ n \hat{y}^n y^​n和 1 − y ^ n 1-\hat{y}^n 1−y^​n是常数
Machine Learning —— Logistic Regression
Machine Learning —— Logistic Regression
Machine Learning —— Logistic Regression
对式子进一步简化:
Machine Learning —— Logistic Regression
于是gradient descent每次update只需要做:

w i + 1 = w i − μ ∑ n − ( y ^ n − f w , b ( x n ) ) x i n w_{i+1}=w_i-\mu\sum_n-(\hat{y}^n-f_{w,b}(x^n))x^n_i wi+1​=wi​−μ∑n​−(y^​n−fw,b​(xn))xin​

Logistic Regression 与 Linear Regression

compare in step1

Logistic Regression是:每一个feature加权求和,加上bias后,再通过sigmoid function

Logistic Regression的output一定介于0~1,而Linear Regression没有经过sigmoid function,输出可以是任何值

compare in step2

Logistic Regression中,我们定义的loss function是所有example的output( f ( x n ) f(x^n) f(xn))和实际target( y ^ n \hat{y}^n y^​n)的交叉熵之后,即将 f ( x n ) f(x^n) f(xn)和 y ^ n \hat{y}^n y^​n各看做是一个Bernouli distribution,两者的交叉熵就是要minimize的对象

Linear Regression的loss function用square error来表示

compare in step3

Logistic Regression和Linear Regression的wi的update的方式一样
Machine Learning —— Logistic Regression
Machine Learning —— Logistic Regression

Logistic Regression + Square Error

重做machine learning的三个步骤
Machine Learning —— Logistic Regression
Machine Learning —— Logistic Regression

如果遇到一个问题:如果第n个点的目标target是class1,则 y ^ n = 1 \hat{y}^n=1 y^​n=1,此时函数的 f w , b ( x n ) = 1 f_{w,b}(x^n)=1 fw,b​(xn)=1的话,说明两者很相近, f w , b ( x n ) − y ^ = 0 f_{w,b}(x^n)-\hat{y}=0 fw,b​(xn)−y^​=0,于是微分就会变成0,这是合理的;但是当 f w , b ( x n ) = 0 f_{w,b}(x^n)=0 fw,b​(xn)=0的话,说明离targer很远,但是此时计算得到的微分也是0,不合理

把参数的变化对total loss作图的哈,loss function分布选择cross entropy和square error
Machine Learning —— Logistic Regression
综上,尽管square error可以使用,但是update会十分缓慢;而使用cross entropy可以训练得更顺利

Discriminative 与 Generative

same model but different currency

Logistic Regression的方法,把它称为discriminative(判别);用Gaussian来描述posterior probability这件事,称之为generative(生成)
Machine Learning —— Logistic Regression
实际上两者所用的mode(function set)都是一样的,如果用Logistic Regression的话,可以用梯度下降法自己找到w和b;如果用generative model的话,要先算 μ 1 , μ 2 , Σ − 1 \mu_1,\mu_2,\Sigma^{-1} μ1​,μ2​,Σ−1,然后算出w和b

尽管function set是相同的,但是用这两种方法得到的w和b是不一样的

在Logistic Regression中,我们没有做任何实质性的假设,只是单纯地找w和b;而在generative model中,我们对probability distribution假设的是Gaussian,最终找到w和b

两者的预测结果如下:
Machine Learning —— Logistic Regression
实际上discriminative的方法常常会比generative的方法表现更好
Discriminative model与Generative model的差别在于,Generative model做了某些假设,假设data来自于某个概率模型;Discriminative model完全不做任何假设

Conclusion

对于二分类的问题,我们一般有两种方法进行处理,一种是Generative方法,另一种是Discriminative方法,Generative model的好处在于,它对data的依赖没有Discriminative model那么大,在data数量少或者data本身存在noise的情况下受到的影响更小,而它可以做到将prior部分与class-dependent部分分开处理

而Discirminative model的好处是,在data充足的情况下,model的准确率更高

Multi-class Classification

softmax

多元分类问题与二元分类基本一致

假设有三个class: C 1 , C 2 , C 3 C_1,C_2,C_3 C1​,C2​,C3​,每一个class都有自己的weight和bias,此处的 w 1 , w 2 , w 3 w_1,w_2,w_3 w1​,w2​,w3​分布代表三个vector, b 1 , b 2 , b 3 b_1,b_2,b_3 b1​,b2​,b3​代表三个const,input x也是一个vector

softmax的意思是对最大值强化,使大值与小值之间差距拉开

我们把 z 1 , z 2 , z 3 z_1,z_2,z_3 z1​,z2​,z3​丢进一个softmax的function中:

  • 取exponential,得到 e z 1 , e z 2 , e z 3 e^{z_1},e^{z_2},e^{z_3} ez1​,ez2​,ez3​
  • 把三个exponential累加求和,得到 ∑ j = 1 3 e z j \sum_{j=1}^3e^{z_j} ∑j=13​ezj​
  • 归一化处理,得到 y 1 = e z 1 ∑ j = 1 3 e z j , y 2 = e z 2 ∑ j = 1 3 e z j , y 3 = e z 3 ∑ j = 1 3 e z j y_1=\frac{e^{z_1}}{\sum_{j=1}^3e^{z_j}},y_2=\frac{e^{z_2}}{\sum_{j=1}^3e^{z_j}},y_3=\frac{e^{z_3}}{\sum_{j=1}^3e^{z_j}} y1​=∑j=13​ezj​ez1​​,y2​=∑j=13​ezj​ez2​​,y3​=∑j=13​ezj​ez3​​
    Machine Learning —— Logistic Regression
    在做完softmax后,output y i y_i yi​值介于0~1之间

multi-class classification过程

如下图所示,input x经过三个式中分别生成 z 1 , z 2 , z 3 z_1,z_2,z_3 z1​,z2​,z3​,经过softmax转化为output y 1 , y 2 , y 3 y_1,y_2,y_3 y1​,y2​,y3​,它们分别是这三个class的posterior probability,由于summation=1,因此做完softmax后就可以把y的分布当做是一个probability distribution,我们训练时还需要一个target,因为是三个class,output是三维的,对应的target也是三维的,为了满足交叉熵的条件,target y ^ \hat{y} y^​也必须是probability distribution,为了保证所有的class之间的关系是一样的,这里使用类似one-hot编码的方式,即:
y ^ = [ 1 0 0 ] x ∈ c l a s s 1 y ^ = [ 0 1 0 ] x ∈ c l a s s 2 y ^ = [ 0 0 1 ] x ∈ c l a s s 3 \hat{y}= \begin{bmatrix} 1\\ 0\\ 0\\ \end{bmatrix}_{x\in class1} \hat{y}= \begin{bmatrix} 0\\ 1\\ 0\\ \end{bmatrix}_{x\in class2} \hat{y}= \begin{bmatrix} 0\\ 0\\ 1\\ \end{bmatrix}_{x\in class3} y^​=⎣⎡​100​⎦⎤​x∈class1​y^​=⎣⎡​010​⎦⎤​x∈class2​y^​=⎣⎡​001​⎦⎤​x∈class3​
Machine Learning —— Logistic Regression
这时候计算一下output y y y和target y ^ \hat{y} y^​之间的交叉熵,即 − ∑ i = 1 3 y ^ i l n y i -\sum_{i=1}^3\hat{y}_ilny_i −∑i=13​y^​i​lnyi​,同二元分类一样,多元分类问题也是通过极大似然估计得到最终的交叉熵表达式的

Limitation of Logistic Regression

Logistic Regression有很强的限制性,例如给出下图中的training data,是没有办法利用Logistic Regression进行分类的
Machine Learning —— Logistic Regression
因为Logistic Regression在两个class之间的boundary是一条直线

Feature Transformation

如果坚持要用Logistic Regression的话,有一个方法是 Feature Transformation,原来的feature分布不好划分,我们可以将之转化以后,找一个比较好的feature space,让Logistic Regression可以处理
Machine Learning —— Logistic Regression
但是麻烦的是我们并不知道怎么做feature transformation,于是我们希望机器自己产生transformation,为了让机器自己产生,我们可以让很多Logistic Regression cascade(连接)起来

我们让一个input x的两个feature x 1 , x 2 x_1,x_2 x1​,x2​经过两个Logistic Regression的transform,得到新的feature x 1 ′ , x 2 ′ x_1^{'},x_2^{'} x1′​,x2′​,在这个新的feature space上,class1和class2是可以用一条直线分开的,那么最后只要再接另外一个Logistic Regression的model(对它来说, x 1 ′ , x 2 ′ x_1^{'},x_2^{'} x1′​,x2′​才是每一个样本点的feature),它根据新的feature就可以把class1和class2分开
Machine Learning —— Logistic Regression
因此这整个流程是,先用n个Logistic Regression做feature transformation,生成n个新的feature,再用一个Logistic Regression做classifier

Logistic Regression的boundary一定是一条直线,它可以有任何的画法,但肯定是按照某个方向从高到底的等高线分布,具体的分布时由Logistic Regression的参数决定的,每一条直线都是有 z = b + ∑ i n w i x i z=b+\sum_i^nw_ix_i z=b+∑in​wi​xi​组成的

下图是二维feature的例子,分别表示四个点经过transform之后的 x 1 , x 2 x_1,x_2 x1​,x2​,在新的feature space中可以通过最后的Logistic Regression划分开来
Machine Learning —— Logistic Regression
这里的Logistic Regression只是一条直线,它指的是“属于这个类”或“不属于这个类”这两种情况,因此最后的这个Logistic Regression是跟要检测的目标类相关的,当只是二元分类的时候,最后只需要一个Logistic Regression即可,当面对多元分类问题,需要用到多个Logistic Regression来画出多条直线划分所有的类,每一个Logistic Regression对应它要检测的那个类

Power Cascading Logistic Regression

通过上面的例子,我们发现,多个Logistic Regression连接起来会产生powerful的效果,我们把每一个Logistic Regression叫做一个neuron(神经元),把Logistic Regression串起来形成的network叫做Neural Network
Machine Learning —— Logistic Regression

参考

https://github.com/Sakura-gh/ML-notes

上一篇:美年旅游*行分页


下一篇:Docker三剑客实践之部署集群