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=∑iwixi+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
xiinput
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)
为方便计算,将上式做变换:
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,bmaxL(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的标签
于是上式可改写为:
−
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
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是常数
对式子进一步简化:
于是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的方式一样
Logistic Regression + Square Error
重做machine learning的三个步骤
如果遇到一个问题:如果第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
综上,尽管square error可以使用,但是update会十分缓慢;而使用cross entropy可以训练得更顺利
Discriminative 与 Generative
same model but different currency
Logistic Regression的方法,把它称为discriminative(判别);用Gaussian来描述posterior probability这件事,称之为generative(生成)
实际上两者所用的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
两者的预测结果如下:
实际上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=13ezj
- 归一化处理,得到
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=13ezjez1,y2=∑j=13ezjez2,y3=∑j=13ezjez3
在做完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∈class1y^=⎣⎡010⎦⎤x∈class2y^=⎣⎡001⎦⎤x∈class3
这时候计算一下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=13y^ilnyi,同二元分类一样,多元分类问题也是通过极大似然估计得到最终的交叉熵表达式的
Limitation of Logistic Regression
Logistic Regression有很强的限制性,例如给出下图中的training data,是没有办法利用Logistic Regression进行分类的
因为Logistic Regression在两个class之间的boundary是一条直线
Feature Transformation
如果坚持要用Logistic Regression的话,有一个方法是 Feature Transformation,原来的feature分布不好划分,我们可以将之转化以后,找一个比较好的feature space,让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分开
因此这整个流程是,先用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+∑inwixi组成的
下图是二维feature的例子,分别表示四个点经过transform之后的
x
1
,
x
2
x_1,x_2
x1,x2,在新的feature space中可以通过最后的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
参考
https://github.com/Sakura-gh/ML-notes