上节课提到在使用Generative model,且假设样本点服Gaussian distribution的情景下做Classification,后验概率P(C1|x) = σ ( w ⋅ x + b ) \sigma(w\cdot x+b) σ(w⋅x+b),此时我们需要先找到 N 1 , N 2 , μ 1 , μ 2 , Σ N_{1}, N_{2}, \mu^{1}, \mu^{2}, \Sigma N1,N2,μ1,μ2,Σ,再去找参数w和b。但我们希望直接找到参数w和b,这节课将提供解答。
Logistic Regression(逻辑回归)
步骤一:寻找model
我们想要找到model: P w , b ( C 1 ∣ x ) P_{w, b}\left(C_{1} \mid x\right) Pw,b(C1∣x),当 P w , b ( C 1 ∣ x ) ≥ 0.5 P_{w, b}\left(C_{1} \mid x\right) \geq 0.5 Pw,b(C1∣x)≥0.5时输出类型为class1,反之输出class2 。
又因为 P w , b ( C 1 ∣ x ) = σ ( z ) = 1 1 + e − z P_{w, b}\left(C_{1} \mid x\right)=\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=w \cdot x+b=\sum_{i} w_{i} x_{i}+b z=w⋅x+b=i∑wixi+b
这里的w和x都是vector,xi代表不同的feature,而wi对应不同feature的权重,对于每一个xi,都对应一个wi。
因此model可以进一步写成: f w , b ( x ) = P w , b ( C 1 ∣ x ) = σ ( ∑ i w i x i + b ) f_{w, b}(x)=P_{w, b}\left(C_{1} \mid x\right)=\sigma(\sum_{i} w_{i} x_{i}+b) fw,b(x)=Pw,b(C1∣x)=σ(∑iwixi+b),它包含了w和b的所有可能性。
从上式我们可以看出,model是受w和b控制的。我们不必要像上节课一样计算一大堆东西,而是直接利用这个全新的由w和b决定的model——「Logistic Regression」。
注:在高斯分布的情景下考虑class1和class2共用Σ,可以得到一个线性的z,但是很多其他的概率分布模型也可以得到同样的结果:
P w , b ( C 1 ∣ x ) = σ ( z ) = 1 1 + e − z P_{w, b}\left(C_{1} \mid x\right)=\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=w \cdot x+b=\sum_{i} w_{i} x_{i}+b z=w⋅x+b=i∑wixi+b
![](https://tva1.sinaimg.cn/large/007S8ZIlgy1ghqnc5g4fuj311e0regot.jpg)
步骤二:找到loss function评估model好坏
已知model: f w , b ( x ) = P w , b ( C 1 ∣ x ) = σ ( w ⋅ x + b ) f_{w, b}(x)=P_{w, b}\left(C_{1} \mid x\right)=\sigma(w \cdot x+b) fw,b(x)=Pw,b(C1∣x)=σ(w⋅x+b)
假设training data符合概率分布函数 f w , b ( x ) f_{w, b}(x) fw,b(x),且x1属于class1,x2属于class1,x3属于class2,… ,xN属于class1。
那么似然函数 L ( w , b ) = f w , b ( x 1 ) f w , b ( x 2 ) ( 1 − f w , b ( x 3 ) ) ⋯ f w , b ( x N ) L(w, b)=f_{w, b}\left(x^{1}\right) f_{w, b}\left(x^{2}\right)\left(1-f_{w, b}\left(x^{3}\right)\right) \cdots f_{w, b}\left(x^{N}\right) L(w,b)=fw,b(x1)fw,b(x2)(1−fw,b(x3))⋯fw,b(xN)。
当参数满足w=w*,b=b*时,取到最大似然估计值L(w*,b*)。
注:由于这里我们考虑的是二元分类问题,因此 f w , b ( x 3 ) = P w , b ( C 2 ∣ x 3 ) = 1 − f w , b ( x 3 ) f_{w, b}(x^3)=P_{w, b}\left(C_{2} \mid x^3\right)=1-f_{w, b}\left(x^{3}\right) fw,b(x3)=Pw,b(C2∣x3)=1−fw,b(x3)。
![](https://tva1.sinaimg.cn/large/007S8ZIlgy1ghqncej353j31000rvn1h.jpg)
这次我们使用的是Logistic Regression而不是Gaussian distribution,因此不能再直接用平均值来求w*和b*,从而得到 L ( w , b ) L(w, b) L(w,b)最大值。
由于 L ( w , b ) L(w, b) L(w,b)是乘积形式,为了方便计算,我们作如下变换:
w ∗ , b ∗ = arg max w , b L ( w , b ) = arg min w , b ( − ln L ( w , b ) ) w^{*}, b^{*}=\arg \max _{w, b} L(w, b)=\arg \min _{w, b}(-\ln L(w, b)) w∗,b∗=argw,bmaxL(w,b)=argw,bmin(−lnL(w,b))
其中 − ln L ( w , b ) = − ln f w , b ( x 1 ) − ln f w , b ( x 2 ) − ln ( 1 − f w , b ( x 3 ) ) − … -\ln L(w, b)=-\ln f_{w, b}\left(x^{1}\right)-\ln f_{w, b}\left(x^{2}\right)-\ln \left(1-f_{w, b}\left(x^{3}\right)\right)-\ldots −lnL(w,b)=−lnfw,b(x1)−lnfw,b(x2)−ln(1−fw,b(x3))−…
由于class1和class2的概率表达式不统一,上面的式子无法写成统一的形式。为统一格式,这里将所有training data打上0和1的标签。class1对应的label为1,class2对应的label为0 。 t d : m o d e l 真 的 只 输 出 0 和 1 吗 ? \color{white}{td:model真的只输出0和1吗?} td:model真的只输出0和1吗?
于是我们可以将上述式子进一步写成:
− ln L ( w , b ) = − [ y ^ 1 ln f w , b ( x 1 ) + ( 1 − y ^ 1 ) ln ( 1 − f w , b ( x 1 ) ) ] − [ y ^ 2 ln f w , b ( x 2 ) + ( 1 − y ^ 2 ) ln ( 1 − f w , b ( x 2 ) ) ] − [ y ^ 3 ln f w , b ( x 3 ) + ( 1 − y ^ 3 ) ln ( 1 − f w , b ( x 3 ) ) ] − … \begin{aligned}-\ln L(w, b)=&-\left[\hat{y}^{1} \ln f_{w, b}\left(x^{1}\right)+\left(1-\hat{y}^{1}\right) \ln \left(1-f_{w, b}\left(x^{1}\right)\right)\right] \\ &-\left[\hat{y}^{2} \ln f_{w, b}\left(x^{2}\right)+\left(1-\hat{y}^{2}\right) \ln \left(1-f_{w, b}\left(x^{2}\right)\right)\right] \\ &-\left[\hat{y}^{3} \ln f_{w, b}\left(x^{3}\right)+\left(1-\hat{y}^{3}\right) \ln \left(1-f_{w, b}\left(x^{3}\right)\right)\right] \\ &-\ldots \end{aligned} −lnL(w,b)=−[y^1lnfw,b(x1)+(1−y^1)ln(1−fw,b(x1))]−[y^2lnfw,b(x2)+(1−y^2)ln(1−fw,b(x2))]−[y^3lnfw,b(x3)+(1−y^3)ln(1−fw,b(x3))]−…
现在有了统一的格式,我们就可以「把要求最小值的对象写成和的形式」:
− ln L ( w , b ) = ∑ n − [ y ^ n ln f w , b ( x n ) + ( 1 − y ^ n ) ln ( 1 − f w , b ( x n ) ) ] -\ln L(w, b)=\sum_{n}-\left[\hat{y}^{n} \ln f_{w, b}\left(x^{n}\right)+\left(1-\hat{y}^{n}\right) \ln \left(1-f_{w, b}\left(x^{n}\right)\right)\right] −lnL(w,b)=n∑−[y^nlnfw,b(xn)+(1−y^n)ln(1−fw,b(xn))]
实际上这表示的就是两个「伯努利分布」的交叉熵 H ( p , q ) = − ∑ x p ( x ) ln ( q ( x ) ) H(p, q)=-\sum_{x} p(x) \ln (q(x)) H(p,q)=−∑xp(x)ln(q(x))。
交叉熵的含义是表达这两个分布有多么接近,如果p(x)和q(x)是一模一样的分布,那么它们的交叉熵就是0 。这里的 y ^ \hat{y} y^代表理想的target,f(xn)代表model的输出,把交叉熵放在这里就是想衡量 y ^ \hat{y} y^和f(xn)的分布之间的关系,我们希望他们的关系越接近越好,最好就是0 。
此刻,我们将交叉熵函数作为model的loss function。
![](https://tva1.sinaimg.cn/large/007S8ZIlgy1ghqnc9vcmtj310r0setdw.jpg)
步骤三:追寻最好的function
和上节课不同,这次我们可以对loss function进行微分,这就代表了我们可以用Gradient Descent来更新参数,找到最好的function,也就是找到w*和b*。 t d : b 不 是 s c a l r 吗 , 怎 么 更 新 ? \color{white}{td:b不是scalr吗,怎么更新?} td:b不是scalr吗,怎么更新?
![](https://tva1.sinaimg.cn/large/007S8ZIlgy1ghqncjlcnkj311p0rxq7f.jpg)
我们会发现Gradient Descent的每次update只需要做:
w i = w i − η ∑ n − ( y ^ n − f w , b ( x n ) ) x i n w_{i}=w_{i}-\eta \sum_{n}-\left(\hat{y}^{n}-f_{w, b}\left(x^{n}\right)\right) x_{i}^{n} wi=wi−ηn∑−(y^n−fw,b(xn))xin
这个式子意味着每次的update只取决于三件事:
- 学习速率lr(这是你自己定的)
- xi(来自于data)
- y ^ n − f w , b ( x n ) \hat{y}^{n}-f_{w, b}\left(x^{n}\right) y^n−fw,b(xn),代表model的输出与理想target之间的差距,差距越大,update的步距就越大。
Logistic Regression和Linear Regression的区别
![](https://tva1.sinaimg.cn/large/007S8ZIlgy1ghqnc74i8dj312j0t0te3.jpg)
step1:
- logistic regression的输出介于0~1之间(因为它是借助sigmoid函数输出的)
- liner regression的输出可以是任何值
step2:
- logistic regression
- 用输出1代表class1,输出0代表class2
- 用交叉熵函数代表loss function
- liner regression
- 输出是一个real number
- 对差值的平方求均值,用来代表loss function
step3:
logistic regression和liner regression更新wi的方式一模一样。唯一区别是logistic regression的 y ^ \hat{y} y^取值介于0、1之间。
logistic regression + square error
上面我提到logistic regression采用的loss function和linear regression不同。但实际上,我们loss function选什么完全是可以由我们自己决定的。那么我们为什么选择用交叉熵来做logistic regression的loss function呢?为了对其作出解释,我们现在尝试不用交叉熵,而选择 L ( f ) = 1 2 ∑ n ( f w , b ( x n ) − y ^ n ) 2 L(f)=\frac{1}{2} \sum_{n}\left(f_{w, b}\left(x^{n}\right)-\hat{y}^{n}\right)^{2} L(f)=21∑n(fw,b(xn)−y^n)2作为loss function。
机器学习的三个步骤:
![](https://tva1.sinaimg.cn/large/007S8ZIlgy1ghqnc7whxvj31150sh0x2.jpg)
现在会遇到一个问题:如果第n个点的target是class1,即 y ^ \hat{y} y^=1,此时如果function的输出 f w , b ( x n ) = 1 f_{w, b}\left(x^{n}\right)=1 fw,b(xn)=1,就说明现在离target很接近了, f w , b ( x n ) − y ^ n f_{w, b}\left(x^{n}\right)-\hat{y}^{n} fw,b(xn)−y^n这一项等于0,于是微分 ∂ L / ∂ w i = 0 \partial L / \partial w_{i}=0 ∂L/∂wi=0,这是很合理的。但是如果 f w , b ( x n ) = 0 f_{w, b}\left(x^{n}\right)=0 fw,b(xn)=0,这就说明离target很远,但是微分 ∂ L / ∂ w i \partial L / \partial w_{i} ∂L/∂wi仍旧等于0,这就不合理了。
对于class2的,得到的结果与class1一致。
如果我们把参数的变化对totol loss作图的话,loss function选择cross entropy和square error,参数的变化跟loss的变化情况可视化结果如下:
![](https://tva1.sinaimg.cn/large/007S8ZIlgy1ghqnc67u7jj310r0s0ag2.jpg)
我们可以看到,对于square error,即使参数点所处位置与目标点很远,它的微分也很小,因此update的速度很慢。而对于cross entropy,离目标点很远的位置,参数微分很大,因此update速度很快。
这就是为什么在logistic regression中采用cross entropy而不是square error的原因。
Discriminative vs. Generative
Logistic Regression的方法,我们把它称之为Discriminative的方法;而我们用Gaussian来描述posterior Probability这件事,我们称之为Generative的方法。
![](https://tva1.sinaimg.cn/large/007S8ZIlgy1ghqnchuch9j310o0rntcq.jpg)
他们采用的model都是一样的,都是 P ( C 1 ∣ x ) = σ ( w ⋅ x + b ) P\left(C_{1} \mid x\right)=\sigma(w \cdot x+b) P(C1∣x)=σ(w⋅x+b)。但是Discriminative的方法是直接找w和b,而Generative的方法需要先找到 μ 1 , μ 2 , Σ − 1 \mu^{1}, \mu^{2}, \Sigma^{-1} μ1,μ2,Σ−1,再去找w和b。
同时,我们需要知道的是,两种不同的方法找到的w和b很可能是不同的。也就是说,我们采用的model一样,但是最终找到的function不见得是相同的。
这是因为在Logistic Regression里面,我们没有做任何实质性的假设,没有对Probability distribution有任何的描述,我们就是单纯地去找b和w(推导过程中的假设只是便于理解和计算,对实际结果没有影响)。
而在Generative model里面,我们对Probability distribution是有实质性的假设的,我们假设的是Gaussian,甚至假设在相互独立的前提下是否可以是naive bayes(朴素贝叶斯),根据这些假设我们才找到最终的b和w。
哪一个假设的结果是比较好的呢? Generative model和discriminative model的预测结果比较如下:
![](https://tva1.sinaimg.cn/large/007S8ZIlgy1ghqnc4o5qfj30zw0qwn12.jpg)
可以看到Discriminative的结果比Generative好。
这是因为Discriminative是「不含任何假设」的,而Generative「假设了你的data来自某个概率模型」。
而这种「假设」可能会损害model的performance。
比如下面这个例子:
![](https://tva1.sinaimg.cn/large/007S8ZIlgy1ghqncfeuyjj31270sjgpg.jpg)
我们假设一笔testing data,它含有两个都是值为1的feature,现在判断它来自于class1和来自于class2的可能性哪个比较大。我们的直觉告诉我们,它来自于class1,因为class1中有一笔data的两个feature x1,x2都是1 。但是我们假设training data来自于「朴素贝叶斯模型」那么经过计算你会发现,这笔testing data是来自class2的。
因为当你有了「training data来自于「朴素贝叶斯模型」」这一假设,你就默认了feature x1,x2之间是相互独立的,你自己「脑补」了这种关系,因此你认为之所以在training data中我们没有看到x1,x2同为1却属于class2的data,是因为我们采样的点不够多,当你采样的点足够多,就会发现这笔testing data更可能属于class2 。
我们的直觉告诉我们「脑补」是不好的。这否就意味着Generative的方法不如Discriminative呢?如果不是,那么什么场景Generative model的表现更好?
Generative model表现较好的场景:
- training data较少时
- Discriminative的performance是很依赖于data的,当data数量不足,或者data本身的label就有问题时,让Generative model做一些假设,反而可以把data不足或者label有问题带来的影响降到最低。
- 假设一种probability distribution对noise的鲁棒性会更好时
- Prior probability和class-dependent probabilities 能通过不同来源进行预测的时候
- 比如语音辨识,你要预测某一句话被说出来的概率并不一定需要training data是有声音data,你也可以去网上爬取大量的文字,这样就可以计算出某一段文字出现的概率Prior probability,而对class-dependent的部分结合声音和文字去预测。这样处理可以把Prior probability预测的更加准确。 t d \color{white}{td} td
多分类问题
之前讨论的都是二分类问题,现在探讨一下多分类问题。
假设有三个class:C1、C2、C3,三个类的分别对应不同的权重wi和偏差b,我们通过softmax函数对其进行处理。
softmax函数作用:
- 对最大值做强化,拉开大小值之间的差距。
- 因为在做第一步的时候,以e为底数,z为指数,使得大的值更大,小的值更小,拉开两者之间的差距。
- 实现给定一些数字,softmax函数就能将任意数字转化为概率。
- 在深度学习的CNN中,softmax层被作为多类分类问题的标准最终层,赋予CNN预测的能力。
![](https://tva1.sinaimg.cn/large/007S8ZIlgy1ghqncghei1j31210skjw3.jpg)
比如我们输入的z1,z2,z3分别是3,1,-3。首先,我们计算e的指定数字zi次方,然后将其所有结果相加,当作分母。最后,e的指定数字zi次方作为分子,由此计算出后验概率y1、y2、y3,分别表示输入x时,是class1、class2、class3的概率。且满足0 <yi <1, ∑ i y i = 1 \sum_iy_i=1 ∑iyi=1。
有了后验概率我们便可以像处理二分类问题一样,将输出y和target y ^ \hat{y} y^的交叉熵 − ∑ i = 1 3 y ^ i ln y i -\sum_{i=1}^{3} \hat{y}_{i} \ln y_{i} −∑i=13y^ilnyi作为loss function,再作Gradient Descent得到最优function。
在做交叉熵的时候将3个class的label分别定为 y ^ = [ 1 0 0 ] y ^ = [ 0 1 0 ] y ^ = [ 0 0 1 ] \hat{y}=\left[\begin{array}{l}1 \\ 0 \\ 0\end{array}\right] \quad \hat{y}=\left[\begin{array}{l}0 \\ 1 \\ 0\end{array}\right] \quad \hat{y}=\left[\begin{array}{l}0 \\ 0 \\ 1\end{array}\right] y^=⎣⎡100⎦⎤y^=⎣⎡010⎦⎤y^=⎣⎡001⎦⎤,这样就避免了像是定义3个class的label分别为1、2、3时,「假设了3个class之间,相邻class关系相差是一致的」的问题。
![](https://tva1.sinaimg.cn/large/007S8ZIlgy1ghqncalz77j311s0rp41o.jpg)
Logistic Regression的局限性
Logistic Regression其实存在很大的局限性,像是下面的情况,它就无法处理。因为在feature space上,它不能找到一条分界线,将class1和class2分到两个不同区域。
注:下图红点代表class1,蓝点代表class2.
![](https://tva1.sinaimg.cn/large/007S8ZIlgy1ghqncir2utj310l0rfq6r.jpg)
Feature Transformation
为了解决上述的问题,我们想到了对feature进行转换,比如将每个点的坐标x1,x2分别转换成到 [ 0 0 ] \left[\begin{array}{l}0 \\ 0\end{array}\right] [00]和 [ 1 1 ] \left[\begin{array}{l}1 \\ 1\end{array}\right] [11]的距离。
这样一来我们确实实现了将红点和蓝点划到分界线两边。但是这种需要人工去找的方法效率太低,况且我们不总是能找到好的转换方式。
![](https://tva1.sinaimg.cn/large/007S8ZIlgy1ghqnct09ksj311f0s0diy.jpg)
Cascading logistic regression models
为了让机器自己去做Feature Transformation,我们可以将regression model连接起来。
比如我们输入x1、x2,然后乘上它们各自的权重,得到z1、z2,再分别经过sigmoid function,得到 x 1 ′ x_{1}^{\prime} x1′、 x 2 ′ x_{2}^{\prime} x2′
。最后再接另外一个logistic regression,将 x 1 ′ x_{1}^{\prime} x1′、 x 2 ′ x_{2}^{\prime} x2′作为它的输入,在新的feature space上,我们就可以把class1和class2分开。
这里前两个model做的就是Feature Transformation,后面的model作为分类器。
注:为了简化model,我们这里不考虑bias。
![](https://tva1.sinaimg.cn/large/007S8ZIlgy1ghqnccz31jj310s0pzgox.jpg)
通过改变权重参数,我们可以得到不同的 x 1 ′ x_{1}^{\prime} x1′、 x 2 ′ x_{2}^{\prime} x2′。
Logistic Regression的boundary一定是一条直线,它可以有任何的画法,但肯定是按照某个方向从高到低的等高线分布,具体的分布是由Logistic Regression的参数决定的,每一条直线都是由 z = b + ∑ i n w i x i z=b+\sum_{i}^{n} w_{i} x_{i} z=b+∑inwixi组成的(二维feature的直线画在二维平面上,多维feature的直线则是画在多维空间上)。
![](https://tva1.sinaimg.cn/large/007S8ZIlgy1ghqncbd833j31230srtfl.jpg)
下图是二维feature的例子,分别表示四个点经过转换之后的 x 1 ′ x_{1}^{\prime} x1′、 x 2 ′ x_{2}^{\prime} x2′,在新的feature space中可以通过最后的Logistic Regression划分开来。
![](https://tva1.sinaimg.cn/large/007S8ZIlgy1ghqncc8igxj311x0snjzn.jpg)
Deep Learning
事实上我们可以把每一个logistic regression model的输出当作令一个logistic regression model的输入,形成一个网状的结构。如果我们给每一个logistic regression model起一个新的名字——Neuron。那么它们形成的就是一个「类神经网络」,这东西就是Deep Learning。
![](https://tva1.sinaimg.cn/large/007S8ZIlly1ghqnufngoxj310u0spdjg.jpg)
Conclusion
对于分类的问题(主要是二元分类)我们可以用Generative model也可以用Logistic Regression,本质都是从「贝叶斯方程」出发,即
P
(
C
i
∣
x
)
=
P
(
C
i
)
P
(
x
∣
C
i
)
∑
j
=
1
n
P
(
C
j
)
P
(
x
∣
C
j
)
(
1
)
=
σ
(
z
)
=
1
1
+
e
−
z
=
1
1
+
e
−
(
b
+
∑
k
w
k
x
k
)
(
2
)
\begin{aligned} P\left(C_{i} \mid x\right) &=\frac{P\left(C_{i}\right) P\left(x \mid C_{i}\right)}{\sum_{j=1}^{n} P\left(C_{j}\right) P\left(x \mid C_{j}\right)}(1)\\ &=\sigma(z)=\frac{1}{1+e^{-z}}=\frac{1}{1+e^{-\left(b+\sum_{k} w_{k} x_{k}\right)}} \end{aligned}(2)\\
P(Ci∣x)=∑j=1nP(Cj)P(x∣Cj)P(Ci)P(x∣Ci)(1)=σ(z)=1+e−z1=1+e−(b+∑kwkxk)1(2)
其中分子表示属于x属于class i的可能性,分母表示所有可能性之和。
Generative model和Logistic Regression的区别在于「是否假设了某种概率分布」。由于Logistic Regression不存在「任何实质性假设」,因此只能通过公式(2)作为model进行分析。
对于多分类问题,引入softmax函数,用输出后验概率yi构成的y与target y ^ \hat{y} y^做交叉熵,最后对交叉熵函数作梯度下降,得到最优function。