李宏毅2020机器学习05 - Logistic Regression

上节课提到在使用Generative model,且假设样本点服Gaussian distribution的情景下做Classification,后验概率P(C1|x) = σ ( w ⋅ x + b ) \sigma(w\cdot x+b) σ(wx+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(C1x),当 P w , b ( C 1 ∣ x ) ≥ 0.5 P_{w, b}\left(C_{1} \mid x\right) \geq 0.5 Pw,b(C1x)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(C1x)=σ(z)=1+ez1 z = w ⋅ x + b = ∑ i w i x i + b z=w \cdot x+b=\sum_{i} w_{i} x_{i}+b z=wx+b=iwixi+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(C1x)=σ(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(C1x)=σ(z)=1+ez1 z = w ⋅ x + b = ∑ i w i x i + b z=w \cdot x+b=\sum_{i} w_{i} x_{i}+b z=wx+b=iwixi+b

步骤二:找到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(C1x)=σ(wx+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)(1fw,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(C2x3)=1fw,b(x3)

这次我们使用的是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(1fw,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:model01

于是我们可以将上述式子进一步写成:

− 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)+(1y^1)ln(1fw,b(x1))][y^2lnfw,b(x2)+(1y^2)ln(1fw,b(x2))][y^3lnfw,b(x3)+(1y^3)ln(1fw,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)+(1y^n)ln(1fw,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。

步骤三:追寻最好的function

和上节课不同,这次我们可以对loss function进行微分,这就代表了我们可以用Gradient Descent来更新参数,找到最好的function,也就是找到w*和b* t d : b 不 是 s c a l r 吗 , 怎 么 更 新 ? \color{white}{td:b不是scalr吗,怎么更新?} tdbscalr

我们会发现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^nfw,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^nfw,b(xn),代表model的输出与理想target之间的差距,差距越大,update的步距就越大。

Logistic Regression和Linear Regression的区别

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)=21n(fw,b(xn)y^n)2作为loss function。

机器学习的三个步骤:

现在会遇到一个问题:如果第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的变化情况可视化结果如下:

我们可以看到,对于square error,即使参数点所处位置与目标点很远,它的微分也很小,因此update的速度很慢。而对于cross entropy,离目标点很远的位置,参数微分很大,因此update速度很快。

这就是为什么在logistic regression中采用cross entropy而不是square error的原因。

Discriminative vs. Generative

Logistic Regression的方法,我们把它称之为Discriminative的方法;而我们用Gaussian来描述posterior Probability这件事,我们称之为Generative的方法。

他们采用的model都是一样的,都是 P ( C 1 ∣ x ) = σ ( w ⋅ x + b ) P\left(C_{1} \mid x\right)=\sigma(w \cdot x+b) P(C1x)=σ(wx+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的预测结果比较如下:

可以看到Discriminative的结果比Generative好。

这是因为Discriminative是「不含任何假设」的,而Generative「假设了你的data来自某个概率模型」。

而这种「假设」可能会损害model的performance。

比如下面这个例子:

我们假设一笔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预测的能力。

比如我们输入的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^=100y^=010y^=001,这样就避免了像是定义3个class的label分别为1、2、3时,「假设了3个class之间,相邻class关系相差是一致的」的问题。

Logistic Regression的局限性

Logistic Regression其实存在很大的局限性,像是下面的情况,它就无法处理。因为在feature space上,它不能找到一条分界线,将class1和class2分到两个不同区域。

注:下图红点代表class1,蓝点代表class2.

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]的距离。

这样一来我们确实实现了将红点和蓝点划到分界线两边。但是这种需要人工去找的方法效率太低,况且我们不总是能找到好的转换方式。

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。

通过改变权重参数,我们可以得到不同的 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的直线则是画在多维空间上)。

下图是二维feature的例子,分别表示四个点经过转换之后的 x 1 ′ x_{1}^{\prime} x1 x 2 ′ x_{2}^{\prime} x2,在新的feature space中可以通过最后的Logistic Regression划分开来。

Deep Learning

事实上我们可以把每一个logistic regression model的输出当作令一个logistic regression model的输入,形成一个网状的结构。如果我们给每一个logistic regression model起一个新的名字——Neuron。那么它们形成的就是一个「类神经网络」,这东西就是Deep Learning。

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(Cix)=j=1nP(Cj)P(xCj)P(Ci)P(xCi)(1)=σ(z)=1+ez1=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。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值