李宏毅 机器学习 2016 秋:6、Classification: Logistic Regression

2023-11-15

六、Classification: Logistic Regression

我们来讲 Logistic Regression,我们在上一份投影片里面,我们都已经知道说,我们要找的东西呢,是一个机率,是一个 Posterior probability,如果这个 Posterior probability > 0.5 的话,就 output C 1 C_1 C1,否则呢,就 output C 2 C_2 C2,我们知道这个 posterior probability,其实很多其他的 probability,化简以后,也都可以得到同样的结果,假设你觉得你想要用 Gaussian 的话,你可以说这个,posterior probability 就是 σ ( z ) σ(z) σ(z),它的 function 长的是右边这个样子,那这个 z z z 呢,是 w w w x x x 的 inner product 加上 b b b,所谓 w w w x x x 的 inner product 呢,是说,这个 w w w,它是一个 vector,它的每一个 dimension 我们就用下标 i i i 来表示,那这个 w w w 呢,是一个 vector,每一个 x x x,都有一个对应的 w i w_i wi,你把所有的 x i w i x_iw_i xiwi,summation 起来再加上 b b b,就得到 z z z,代进这个 sigmoid function,就得到机率,所以,我们的 function set 是长这样子,我们的 function set, f w , b ( x ) f_{w,b}(x) fw,b(x),这边加下标 w , b w, b w,b 的意思就是说,我们现在的这个 function set 是受 w w w b b b 所控制的,就是你可以选不同的 w w w b b b,你就会得到不同 function,所有 w w w b b b 可以产生的 function 集合起来,就是一个 function set,那这一项,它的含义呢,就是一个 posterior probability,given x x x,它是属于 C 1 C_1 C1 的机率。

如果我们用图像化的方式来表它的话呢,它长这样,我们的 function 里面,有两组参数,一组是 w w w,我们称之为 weights,weights 呢,有一整排,然后有一个 constant b b b,这个我们称之为 bias,然后有一个 sigmoid function,如果我们今天的 input 是 x 1 , x i ⋯ x I x_1, xi \cdots x_I x1,xixI,你就把 x 1 , x i , x I x_1, x_i, x_I x1,xi,xI 分别乘上 w 1 , w i , w I w_1, w_i, w_I w1,wi,wI,然后再加上 b b b 呢,你就得到 z z z,这个 z z z,我发现我写错了一个地方,后面这边呢,应该是要 + b + b +b,你把 x 1 w 1 + x i w + i + ⋯ + x I w I + b x_1w_1 + x_iw+i +\cdots+ x_Iw_I+b x1w1+xiw+i++xIwI+b,就得到 z z z z z z 通过我们刚才得到的 sigmoid function,它 output 的值,就是机率,就是 posterior probability,这个是整个模型,长这个样子,这件事呢,叫做 Logistic Regression。

那我们可以把 Logistic Regression,跟我们在第一堂课就讲的 Linear Regression 做一下比较,Logistic Regression,把每一个 feature 乘上一个 w w w,summation 起来再加上 b b b,再通过 sigmoid function,当作 function 的 output,那它的 output 因为有通过 sigmoid function,所以,一定是界于 0~1 之间,那 Linear Regression 呢?它就把 feature * w w w 再加上 b b b,它没有通过 sigmoid function,所以,它的 output 就可以是任何值,可以是正的,可以是负的,负无穷大到正无穷大,那等一下呢,我们说 machine learning 就是 3 个 step,等一下我们会一个一个 step,比较 Logistic Regression 跟 Linear Regression 的差别。

接下来呢,我们要决定一个 function 的好坏,那我们的 training data 呢,因为我们现在要做的是 Classification,所以我们的 training data,就是假设有 N N N 笔 training data,那每一笔 training data,你都要标说它属于哪一个 class,比如说, x 1 x^1 x1 属于 C 1 C_1 C1 x 2 x^2 x2 属于 C 1 C_1 C1 x 3 x^3 x3 属于 C 2 C_2 C2 x N x^N xN 属于 C 1 C_1 C1…等等,那接下来呢,我们假设这笔 training data 是从,我们的 function 所定义出来的这个 posterior probability,所产生的,就是这组 training data,是根据这个 posterior probability 所产生的,那给我们一个 w w w b b b,我们就决定了这个 posterior probability,那我们就可以去计算,某一组 w w w b b b,产生 N N N 笔 training data 的机率,某一组 w w w b b b 产生 N N N 笔 training data 的机率怎么算呢?

这个很容易,就是假设 x 1 x_1 x1 是属于 C 1 C_1 C1,那它根据某一组 w w w b b b,产生的机率就是, f w , b ( x 1 ) f_{w,b}(x^1) fw,b(x1),假设 x 2 x_2 x2 是属于 C 1 C_1 C1,那它被产生的机率就是, f w , b ( x 2 ) f_{w, b} (x^2) fw,b(x2),假设 x 3 x_3 x3 是属于 C 2 C_2 C2,我们知道 x 3 x_3 x3 如果属于 C 1 C_1 C1 的机率,就是 f w , b ( x 3 ) f_{w, b}(x^3) fw,b(x3),因为我们这边算的是 C 1 C_1 C1 的机率,那这个 x 3 x_3 x3 属于 C 2 C_2 C2,所以他的机率就是 1 − f w , b ( x 3 ) 1-f_{w,b}(x^3) 1fw,b(x3)。那最有可能的参数 w w w b b b,我们觉得最好的参数 w w w b b b,就是那个有最大的可能性、最大的机率,可以产生这个 training data 的 w w w b b b,我们把它叫做 w ∗ w^* w b ∗ b^* b w ∗ w^* w b ∗ b^* b 就是那个可以最大化这一个机率的 w w w b b b

那我们在这边,做一个数学式上的转换,我们原来是要找一组 w w w b b b,最大化 L ( w , b ) L(w , b) L(w,b),最大化这个 function,但是,这件事情等同于呢,我们找一个 w w w b b b,minimize − ln ⁡ -\ln ln 这个 function,我们知道取 ln ⁡ \ln ln,它的这个 order 是不会变的,加上一个负号,就从找最大的,变成找最小的,所以,我们就是要找一组 w w w b b b,最小化 − ln ⁡ L ( w , b ) -\ln L(w, b) lnL(w,b),这个可以让计算变得容易一点,左式跟右式是一样的,根据左式跟右式找出来的 w ∗ w^* w b ∗ b^* b 呢,是同一个 w ∗ w^* w b ∗ b^* b,那 − ln ⁡ -\ln ln (这一项) 怎么做呢?

你知道取 − ln ⁡ -\ln ln 的好处就是,本来相乘,现在变成相加,然后,你就把它展开,所以这一项就是 − l n f ( x 1 ) , − l n f ( x 2 ) , − l n ( 1 − f ( x 3 ) ) -ln f(x^1),-ln f(x^2), -ln (1 - f(x^3)) lnf(x1)lnf(x2),ln(1f(x3)),以此类推,那这件事情让你,写式子有点难写,就是你没有办法写一个 summation over,因为对不同的 x x x,如果属于不同 class,我们就要用不同的方法来处理它,而且你没有办法 summation over x x x,那怎么办呢?

我们做一个符号上的转换,我们说,如果某一个 x x x 它属于 class 1,我们就说它的 target 是 1,如果它属于 class 2,我们就说它的 target 是 0,我们之前在做 Linear Regression 的时候,每一个 x x x,它都有一个对应的 y ^ \hat y y^,然后那个对应的 y ^ \hat y y^ 是一个 real number,在这边呢,每一个 x x x 也都有一个对应的 y ^ \hat y y^,这个对应的 y ^ \hat y y^,它的 number 就代表说,现在这个 x x x,属于哪一个 class,如果属于 class 1,欸,我怎么会犯这么弱智的错误,大家有发现吗?这个投影片上,有一个错啊,对,它应该是 1, 1 , 0。

如果你做这件事的话,那你就可以把这边的每一个式子,都写成这样右侧那样,这看起来有一点复杂,但你仔细算一下就会发现说,左边和右边,是相等的。实际上算一下,比如说, x 1 , x 2 x^1, x^2 x1,x2 都是属于 C 1 C_1 C1,所以呢,它对应的 y ^ \hat y y^ 是 1,所以这个 y ^ 1 \hat {y}^1 y^1 y ^ 2 \hat {y}^2 y^2 是 1, ( 1 − y ^ 1 ) (1 - \hat{y}^1) (1y^1) ( 1 − y ^ 2 (1 - \hat {y}^2 (1y^2 就是 0,所以,两侧是相等的。因为空间的关系,我就把 w w w b b b 省略掉了,有时候放 w w w b b b,只是为了强调说,这个 f f f w w w b b b 的 function,那因为这个写不下,所以把它省略掉,好,那这个 y 3 y^3 y3 呢?这个 x 3 x^3 x3 它属于 C 2 C_2 C2 C 2 C_2 C2 是 0,所以 y ^ 3 \hat y^3 y^3 是 0, ( 1 − y ^ 3 ) (1 - \hat y^3) (1y^3) 就是 1,那前面这个部分可以拿掉,你会发现,右边这个也是等于左边这个。

有了这些以后,我们把这个 likelihood 的 function,取 − ln ⁡ -\ln ln,然后呢,再假设说,class 1 就是 1,class 2 就是 0 以后,我们就可以把我们要去 minimize 的对象,写成图中那样。那其实 summation over 的这一项啊,这个 Σ Σ Σ 后面的这一整项啊,它其实是两个 Bernoulli distribution 的 Cross entropy,所以等一下我们就会说它是 Cross entropy,虽然它的来源跟 information theory 没有太直接的关系,但是,我们刚才看过它推导的过程。

你假设有两个 distribution, p p p q q q,这个 p p p 的 distribution,它是说 p ( x = 1 ) = y ^ n , p ( x = 0 ) = 1 – y ^ n p(x =1) = \hat y^n,p(x=0) =1 – \hat y^n p(x=1)=y^np(x=0)=1y^n q q q 的 distribution,它 q ( x = 1 ) = f ( x n ) , q ( x = 0 ) = 1 − f ( x n ) q(x =1) = f(x^n),q(x =0) = 1 - f(x^n) q(x=1)=f(xn)q(x=0)=1f(xn),那你把这两个 distribution 算 cross entropy,如果你不知道什么是 cross entropy 的话,没有关系,反正就是,代一个式子,summation over 所有的 − ∑ x p ( x ) ln ⁡ ( q ( x ) ) -\sum_x p(x)\ln(q(x)) xp(x)ln(q(x)),前面有个负号,这个就是 cross entropy。

如果你把这两个 distribution, 算他们之间的 cross entropy,cross entropy 的含义是这两个 distribution 有多接近,如果今天这两个 distribution 一模一样的话,那他们算出来的 cross entropy 就是 0,如果你有修过 information theory 的话呢,它这个式子写出来,跟 cross entropy 是一样的,所以在 Logistic Regression 里面,我们怎么定义一个 function,它的好坏呢?

我们定义的方式是这样,有一堆 training data,我们有 ( x n , y ^ n ) (x^n, \hat y^n) (xn,y^n),有这样的 pair,如果属于 class 1 的话呢, y ^ n \hat y^n y^n 就等于 1,如果属于 class 2 的话, y ^ n \hat y^n y^n 就等于 0,那我们定义的 loss function,我们要去 minimize 的对象,是所有的 example,它的 cross entropy 的总和,也就是说,假设你把 f ( x n ) f(x^n) f(xn) 当作一个 Bernoulli distribution,把 y ^ n \hat y^n y^n 当作另一个 Bernoulli distribution,它们的 cross entropy,你把它算出来,这个东西,是我们要去 minimize 的对象,所以,就直观来讲,我们要做的事情是,我们希望 function 的 output 跟它的 target,如果你都把它看作是 Bernoulli distribution 的话,这两个 Bernoulli distribution,他们越接近越好,如果我们比较一下 Linear Regression 的话,Linear Regression 这边,这个你大概很困惑啦,如果你今天是第一次听到的话,你应该听得一头雾水,想说这个,哇,这个这么复杂,到底是怎么来的,如果你是看 Linear Regression 的话,这个很简单,减掉它的 target, y ^ n \hat y^n y^n 的平方,就是我们要去 minimize 的对象,这个比较单纯。

你可能就会有一个想法说,为什么在 Logistic Regression 里面,我们不跟 Linear Regression 一样,用 square error 就好了呢?这边其实也可以用 square error 啊,没有什么理由使你不能用 square error 不是吗?对不对,因为你完全可以算说,这个 f ( x n ) f(x^n) f(xn) y ^ n \hat y^n y^n 的 square error,你就把这个 f ( x n ) f(x^n) f(xn) y ^ n \hat y^n y^n 代到右边去,你一样可以定一个 loss function,这个 loss function 听起来也是颇合理的,为什么不这么做呢?等一下,我们会试著给大家一点解释,那到目前为止呢,这个东西,反正就是很复杂,你就先记得说,必须要这么做。

接下来呢,我们要做的事情就是,找一个最好的 function,就是要去 minimize,那怎么做呢?你就用 Gradient Descent 就好了,很简单,接下来都是一些数学式无聊的运算而已,我们就算,它对某一个 w w w 这个 vector, 里面的某一个 element 的微分,我们就算这个式子,对 w i w_i wi 的微分就好,那我们要算这个东西对 w w w 的偏微分,那我们只需要能够算, ln ⁡ ( f ( x n ) \ln(f(x^n) ln(f(xn) w w w 的偏微分,跟 ln ⁡ ( 1 − f ( x n ) ) \ln(1 - f(x^n)) ln(1f(xn)) w w w 的偏微分就行了,那 ln ⁡ ( f ( x n ) \ln(f(x^n) ln(f(xn) w w w 的偏微分,怎么算呢?

我们知道说,我们把这个 f f f 写在下面, f f f 它受到 z z z 这个 variable 的影响,然后 z z z 这个 variable 是从 w , x , b w, x, b w,x,b 所产生的,所以,你就知道说,我们可以把这个偏微分拆开,把 ∂ ( ln ⁡ ( f ( x ) ) / ∂ ( w i ) ∂(\ln(f(x)) / ∂(w_i) (ln(f(x))/(wi) 拆解成 ∂ ( ln ⁡ ( f ( x ) ) / ∂ ( z ) ∂(\ln(f(x)) / ∂(z) (ln(f(x))/(z),乘上 ∂ ( z ) / ∂ ( w i ) ∂(z) / ∂(w_i) (z)/(wi),那这个 ∂ ( z ) / ∂ ( w i ) ∂(z) / ∂(w_i) (z)/(wi) 是什么?

这个 z z z 的式子我写在这边了,只有 w i x i w_i x_i wixi 那一项是跟 w i w_i wi 有关,所以 ∂ ( z ) / ∂ ( w i ) ∂(z) / ∂(w_i) (z)/(wi) 就是 x i x_i xi,那这一项是什么呢?这一项太简单了,我们把 f ( x ) f(x) f(x) 换成 σ ( z ) σ(z) σ(z),然后做一下微分,这个 ∂ ( ln ⁡ σ ( z ) ) / ∂ ( z ) ∂(\ln σ(z)) / ∂(z) (lnσ(z))/(z) 做微分以后呢, 1 / σ ( z ) 1/σ(z) 1/σ(z),然后再算 ∂ ( σ ( z ) ) / ∂ ( z ) ∂(σ(z))/∂(z) (σ(z))/(z),那 ∂ ( σ ( z ) ) / ∂ ( z ) ∂(σ(z))/∂(z) (σ(z))/(z) 是什么呢?这个 σ ( z ) σ(z) σ(z) 是 sigmoid function,sigmoid function 的微分呢,其实你可以直接背起来,就是 σ ( z ) ∗ ( 1 − σ ( z ) ) σ(z) * (1 - σ(z)) σ(z)(1σ(z)),如果你要看比较直观的结果的话,你就把它的图画出来, σ ( z ) σ(z) σ(z) 这边顏色可能有一点淡,是绿色这条线,横轴是 z z z,那如果对 z z z 做偏微分的话,在接近头跟尾的地方,它的斜率很小,所以对 z z z 做微分的时候,是接近于 0 的,在中间的地方,斜率最大,所以这个地方,斜率最大,所以把这一项对 z z z 做偏微分的话,你得到的结果是长得像这样,那这一项,其实就是 σ ( z ) ∗ ( 1 − σ ( z ) ) σ(z) * (1 - σ(z)) σ(z)(1σ(z)),那你就把 σ ( z ) σ(z) σ(z) 消掉,那你就得到说,这项就是 ( 1 − σ ( z ) ) ∗ x i (1 - σ(z)) * x_i (1σ(z))xi,那 σ ( z ) σ(z) σ(z) 其实就是 f ( x ) f(x) f(x),所以这一项就是 [ 1 − f ( x n ) ] ∗ x i n [1 - f(x^n)] * x_i^n [1f(xn)]xin

右边这一项呢,这个也是 trivial 啊,你把 ln ⁡ ( 1 − f ( x ) ) \ln(1-f(x)) ln(1f(x)) w i w_i wi 做偏微分,那就可以拆成先对 z z z 做偏微分, w i w_i wi 再对 z z z 做偏微分,右边这一项, ∂ ( z ) / ∂ ( w i ) ∂(z)/∂(w_i) (z)/(wi) 我们已经知道它就是 x i x_i xi,左边这一项,你就把 ln ⁡ \ln ln 里面的值,放到分母,然后呢,这边是 − σ ( z ) -σ(z) σ(z),前面有个负号,然后这边要算 σ ( z ) σ(z) σ(z) 的偏微分,那 σ ( z ) σ(z) σ(z) 做偏微分以后,得到的结果是这样,把 ( 1 − σ ( z ) ) (1 - σ(z)) (1σ(z)) 消掉,就只剩下 σ ( z ) σ(z) σ(z),所以,这一项就是 x i ∗ σ ( z ) xi * σ(z) xiσ(z),把它放上来,就是这个,ok,那我们就把这一项放进来,把这一项放进来,整理一下以后,你得到的结果就是这样。

接下来呢,你整理一下,把 x i x_i xi 提到右边去,把括弧的部分展开,那里面有一样的,把它拿掉,最后,你得到一个直观的结果,这个式子看起来有点复杂、有点崩溃,但是,你对它做偏微分以后,得到的值的结果,却是容易理解的,它的结果每一项都是负的, y ^ n − f ( x n ) \hat y^n - f(x^n) y^nf(xn),再乘上 x n x^n xn 的第 i i i 个 component,如果你用 Gradient Descent update 它的话,那你的式子就很单纯,如图所示。

这件事情,它代表了什么意思呢?如果你看括号内的式子的话,现在,你的 w w w 的 update 取决于三件事,一个是 learning rate,这个是你自己调的,一个是 x i x_i xi,这个是来自于 data,第三项呢,就是这个 y ^ n − f ( x n ) \hat y^n - f(x^n) y^nf(xn) ,这个代表说你现在这个 f f f 的 output,跟理想的这个目标,它的差距有多大, y ^ n \hat y^n y^n 是目标, f ( x n ) f(x^n) f(xn) 是现在你的 model 的 output,这两个相减的差就代表他们的差距有多大,那如果今天,你离目标越远,那你 update 的量就应该越大,所以,这个结果看起来是颇为合理的。

那接下来呢,我们就来比较一下 Linear Regression 跟 Logistic Regression,Logistic Regression 跟 Linear Regression,他们在做 Gradient Descent 的时候,参数 update 的方式其实是一模一样的,他们都算, y ^ n − f ( x n ) \hat y^n - f(x^n) y^nf(xn),唯一不一样的地方是,Logistic Regression 你的 target 一定是 0 或 1,但是如果是 Linear Regression 的话,你的 target y ^ \hat y y^,它可以是任何 real number,而你这个 output 也可以是任何 value,但是他们 update 的这个方式,是一样的。

那我们现在要问的问题是这样,为什么 Logistic Regression 不能加 square error?我们做 Logistic Regression 的时候,我们的式子长这样,我当然可以做 square error 啊,我把我的 function 的 output 减掉 y ^ n \hat y^n y^n 的平方,summation 起来当作我的 loss function,我一样用 Gradient Descent 去 minimize 它,有什么不可以呢?

当然没什么不可以这样子,如果我们算一下这个微分的话,如图所示。当然你可以,就用 Gradient Descent 去 update 你的参数,但是,你现在会发现你遇到一个问题,假设 y ^ n = 1 \hat y^n = 1 y^n=1,假设第 n n n 笔 data 是 class 1,当我的 f ( x ) f(x) f(x) 已经等于 1 的时候,当我的第 n n n 笔 data 是 class 1,而我的 f ( x ) f(x) f(x) 已经等于 1 的时候,我已经达到 perfect 的状态了,这个时候,没有什么问题,因为你 f ( x ) = 1 , y ^ n = 1 f(x) = 1, \hat y^n = 1 f(x)=1,y^n=1 的时候,你把这两个数值代进这个 function 里面,你会发现说,至少这一项, f ( x ) − y ^ n f(x) - \hat y^n f(x)y^n 是 0,所以你的微分,会变成 0,这件事情是很合理,但是,如果今天是另一个状况, f ( x n ) = 0 f(x^n) = 0 f(xn)=0,意味著说,你现在离你的目标,仍然非常的远,因为你的目标是希望 f ( x n ) f(x^n) f(xn) 的目标是 1,但你现在 output 是 0,你离目标还很远,但是,如果你把这个式子代到这里面的话,你会发现说,这边有乘一个 f ( x n ) f(x^n) f(xn),而 f ( x n ) = 0 f(x^n) = 0 f(xn)=0,这时候,你会变成你微分的结果算出来也是 0,所以,如果你离目标很近,微分算出来是 0 没有问题,但是,如果你离目标很远,微分算出来也是 0,这个是 class 1 的例子。

如果我们举 class 2 的例子,看起来结果也是一样,假设 y ^ n = 0 \hat y^n = 0 y^n=0,假设现在距离目标很远,假设距离目标很远的时候, f ( x n ) = 1 f(x^n) = 1 f(xn)=1 你代进去,至少最后这个式子是 0,你微分算出来也是 0,距离目标很近的时候,微分算出来也是 0,这会造成什么问题呢?

如果我们把,参数的变化对 total loss 作图的话,你会发现说,如果你选择 cross entropy,跟你选择 square error,参数的变化跟 loss 的变化,看起来是这样子的,黑色的是 cross entropy,红色的是 square error。如果是 cross entropy 的话,你距离目标越远,你的微分值就越大,那没有问题,所以你距离目标越远,你参数 update 的时候就越快,你参数更新的速度就越快,你参数 update 的时候,变化量就越大,这个没有问题,距离你的目标越远,你的步伐当然要踏越大一点,但是,如果你选 square error 的话,你就会很卡,因为,当你距离目标远的时候,你的微分是非常非常小的,就变成说,你离目标远的时候,你移动的速度是非常慢,所以,如果你用随机,你 random 找一个初始值,那通常你离目标的距离,是非常远的,那如果你今天是用 square error,你选一个起始值,你算出来的微分很小,你一开始就卡住了,它的参数都不 update,你就永远卡在那边,它的参数 update 的速度很慢,你等了好几个小时了,它都跑不出来这样。

那你可能会想说,当看到微分值很小的时候,就把它的 learning rate 设大一点啊,可是问题是微分值很小的时候,你也有可能距离你的目标很近啊,如果距离目标很近的时候,这个时候你应该把它的微分值设小一点,但是,你现在搞不清楚说,到底 Gradient 小的时候,微分值算出来小的时候,你是距离目标很近,还是距离目标很远,因为做 Gradient Descent 的时候,你是在玩世纪帝国这个游戏,你不知道你距离目标是很近,还是很远,所以你就会卡翻了,不知道你的 learning rate 应该设大还是设小,所以你选 square error,在实做上,你是不容易得到好的结果的,用 cross entropy 可以让你的 training 顺很多。

那我们接下来要讲的是,这个 Logistic Regression 的方法啊,我们称它为 discriminative 的方法,而刚才呢,我们用 Gaussian,来描述 posterior probability 这件事呢,我们称之为 generative 的方法,实际上,他们的这个 model、function set 呢,是一模一样的,不管你是用我们在这份投影片讲的 Logistic Regression,还是前一份投影片讲的机率模型,只要你在做机率模型的时候,你把 covariance matrix 设成是 share 的,那他们的 model 其实是一模一样的,都是 σ ( w x + b ) σ(wx + b) σ(wx+b),那你可以找不同的 w w w 跟不同的 b b b, 就得到不同的 function,如果你今天是用 Logistic Linear Regression 的话,你可以直接把 w w w b b b 找出来,就用 Gradient Descent 的方法,如果今天是 generative model 的话,那首先呢,我们会去算, μ 1 , μ 2 μ^1, μ^2 μ1,μ2 Σ Σ Σ 的 inverse,然后呢,我们一样把 w w w 算出来、把 b b b 算出来,你算出 μ 1 , μ 2 μ^1, μ^2 μ1,μ2 跟 covariance matrix,接下来呢,你就把这些项代到这里面,这边这个 Σ 1 , Σ 2 Σ^1, Σ^2 Σ1,Σ2 呢,应该都是等于 Σ Σ Σ,这边应该都把它代成 Σ Σ Σ,那就把它算出来就可以得到 w w w b b b

现在的问题来了,如果我们比较左边跟右边求 w w w 跟求 b b b 的方法,我们找出来的 w w w b b b 会是同一组吗?没错,你找出来的结果不会是一样的,所以,今天当我们用 Logistic Regression,还是用刚才的 probabilistic 的 generative model,我们用的其实是同一个 function set,也就是我们的 function 的那个 pool 啊,我们可以挑的那个 function 的 candidate 啊,其实是同一个 set,但是 ,因为我们做了不同的假设,所以,我们最后找出来的,根据同一组 training data 找出来的参数,会是不一样的,在这个 Logistic Regression 里面,其实我们就没有做任何假设,我们没有对这个 probability distribution 有任何的描述,我们就是单纯去找一个 w w w b b b

那在 generative model 里面,我们对 probability distribution 是有假设的,比如说,假设它是 Gaussian,假设它是 Bernoulli,假设它是不是 Naive Bayes… 等等,我们做了种种的假设,根据这些假设,我们可以找到另外一组 w w w b b b,左右两边找出来的 w w w b b b 呢,不会是同一组,那问题就是,哪一组找出来的 w w w b b b 是比较好的呢?

如果我们比较,Generative model 跟 Discriminative model 的话,那我们先看一下我们之前讲的,defense 跟 special defense 的例子,如果用 generative model 的话,我们的这两个 class,就蓝色的是水系的神奇宝贝,红色的是一般系的宝可梦,他们之间 boundary 是这一条,如果你是用 Logistic Regression 的话呢,你找出来的 boundary 是这一条,其实从这个结果上,你很难看出来说,谁比较好啦,但是,如果我们比较说,我们都用 7 个 feature 的这个 class,我们会发现说,如果用 generative model 的话,我们得到的正确率呢,是 73%,如果是用 discriminative model 的话,在同样的 data set 上面,我们只是用,不同的假设,所以找了不同的 w w w b b b,但是我们找出来的结果比较好的,我们找出来的正确率有 79% 这样,那我相信在文献上,会常常听到有人说,discriminative model 会比 generative model,常常会 performance 的更好,为什么会这样呢?

我们来举一个 toy 的 example,现在假设呢,你有一笔 training data,你有两个 class,那你这笔 training data 里面呢,每一笔 data 有两个 feature,然后呢,你总共有 1 + 4 + 4 + 4,总共有 13 笔 data,第一笔 data 是两个 feature 的 value 都是 1,接下来呢,有 4 笔 data,第一个 feature 是 1,第二个 feature 是 0,接下来 4 笔 data,是第一个 feature 是 0, 第二个 feature 是 1,接下来 4 笔 data,是两个 feature 都是 0,然后呢,我们给第一笔 data 的 label 是 1,我们给剩下 12 笔 data 的 label 呢,都是 class 2,那假设你现在不做机器学习,做人类的学习,给你一个 testing data,它的两个 feature 都是 1, 你觉得它是 class 1 还是 class 2 呢?

大家都觉得是 class 1,那如果我们来问一下 Naive Bayes,它觉得是 class 1 还是 class 2,它会怎么说呢?所谓的 Naive Bayes 就是,我们假设,所有的 feature,它产生的机率是 independent,所以 P ( x ∣ C i ) P(x|C_i) P(xCi),P of x 从某一个 class 产生出来的机率,等于从某一个 class 产生 x 1 x_1 x1 的机率,乘上从某一个 class 产生 x 2 x_2 x2 的机率。

那我们用 Naive Bayes 来算一下,首先,算一下 prior 的 probability,class 1 它出现的 probability 是多少?总共 13 笔 data,只 sample 到一次是 class 1,所以是 1/13,class 2 的机率是多少呢?总共 13 笔 data,有 12 笔是 class 2,所以它是 12/13,它比较多,那接下来呢,我们算,在 class 1 里面, x 1 x_1 x1 = 1 的机率 就是 1, x 2 x_2 x2 = 1 的机率也是 1,如果我们看右边这 12 笔 class 2 的 data,在 class 2 里面, x 1 = 1 x_1 = 1 x1=1 的机率是 1/3 ,只有 1/3 的 data 是 x 1 = 1 x_1 = 1 x1=1 的,在 class 2 里面只有 1/3 的 data, x 2 = 1 x_2 = 1 x2=1,所以它的机率是 1/3。

如果我们把这些机率通通算出来以后,给你一个 testing data,你就可以去初估测它是来自 class 1 的机率,你就可以初估测它是来自 class 2 的机率,我们就算这笔 training data x 呢,它来自 class 1 的机率是多少,那你就把它代到这个,Bayesian 的 function 里面,算一下, C 1 C_1 C1 的 prior probability 是 1/3, P ( x ∣ C 1 ) P(x|C_1) P(xC1) 的机率是 1 × 1 1\times 1 1×1,什么意思呢?这笔 data x,从 C 1 C_1 C1 里面 generate 出来的机率,等于 p ( x 1 = 1 ∣ C 1 ) p(x_1=1|C_1) p(x1=1C1) 乘上 p ( x 2 = 1 ∣ C 1 ) p(x_2=1|C_1) p(x2=1C1),其他项同理可算。

如果你实际算一发就知道说,这一个是小于 0.5 的,所以对 Naive Bayes 来说,给它这样子的 training data,它认为这一笔 testing data,应该是属于 class 2,而不是 class 1,所以这跟大家的直觉比起来,是相反的,其实我们很难知道说,怎么知道说这笔 data 的产生到底是来自,class 1 还是 class 2,比较合理的假设,你会觉得说,因为 class 1 里面, x 1 x_1 x1 x 2 x_2 x2 通通都是等于 1 的,所以,这笔 data 应该是要来自 class 1 才对吧,可是对 Naive Bayes 来说,它不考虑不同 dimension 之间的 correlation,所以,对 Naive Bayes 来说,这两个 dimension 是 independent 所产生的,在 class 2 里面,之所以没有,sample 到这样的 data,观察到这样的 data,是因为你 sample 的不够多,如果你 sample 的够多,搞不好就有都是 1 的 data,就都是 1 的 data,也是有机率被产生出来的,只是,因为我们 data 不够多,所以,没有观察到这件事而已。

所以,今天这个 generative model,跟 discriminative model 的差别就在于,这个 generative model,它有做了某些假设,假设你的 data 来自于一个机率模型,它做了某些假设,也就是说,它其实做了脑补这件事情,脑补是什么,大家知道吗?就是,如果你看了一部动漫,那里面没有发生某一些事情,比如说,两个男女主角其实没有在一起,但是,你心里想像他们是在一起,这个就是脑补,所以,这个 generative model 它做的事情,就是脑补,如果,我们在 data 里面明明没有观察到,在 class 2 里面,有都是 1 的这样的 example 出现,但是,对 Naive Bayes 来说,它想像它看到了这件事情,所以,它就会做出一个跟我们人类直觉想法不一样的,判断的结果,那到底脑补是不是一件好的事情呢?

通常脑补可能不是一件好的事情,因为你的 data 没有告诉你这一件事情,你却脑补出这样的结果,但是,如果今天在 data 很少的情况下,脑补有时候也是有用的,如果你得到的情报很少,脑补可以给你更多的情报,所以,其实,discriminative model 并不是在所有的情况下,都可以赢过 generative model,有些时候 generative model 也是有优势的,什么时候会有优势呢?

如果你今天的 training data 很少,你可以比较说,在同一个 problem 下,你给 discriminative model 和 generative model,不同量的 training data,你会发现说,这个 discriminative model,因为它完全没有做任何假设,它是看着 data 说话,所以它的 performance 的变化量, 会受你的 data 量影响很大,假设,现在由左到右是 data 越来越多,然后,纵轴是 error rate,discriminative model 它受到 data 影响很大,所以 data 越来越多,它的 error 就越来越小,如果你是看 generative model 的话,它受 data 的影响是比较小的,因为它有一个它自己的假设,它有时候会无视那个 data,而遵从它内心自己的假设,自己内心脑补的结果,所以如果你看 data 量的影响的话,在 data 少的时候,generative model 有时候是可以赢过 discriminative model 的,只有在 data 慢慢增加的时候,generative model 才会输给 discriminative model,这个其实是 case by case,你可以做做实验, 看看你能不能观察到这样的现象。

那有时候 generative model 是有用的,可能是,你今天的 data 是 noise 的,你的 label 本身就有问题,因为你的 label 本身就有问题,你自己做一些脑补、做一些假设,反而可以把 data 里面有问题的部分呢,忽视掉,那我们在做 discriminative model 的时候,我们是直接假设一个 posterior probability,然后去找 posterior probability 里面的参数,但是我们在做 generative model 的时候,如果你把你的整个 function 拆成,prior 跟 class-dependent 的 probability 这两项的话,有时候会有帮助,因为,这个 prior 跟 class-dependent 的 probability,它们可以是来自于不同的来源。

举例来说,以语音辨识为例,大家可能都知道说呢,语音辨识现在都是用,neural network,它是一个discriminative 的方法,但事实上,整个语音辨识的系统,是一个 generative 的 system,DNN 只是其中一块而已,该怎么说呢,所以说,就全部都是用 DNN 这件事情呢,并不是那么的精确,它整个 model 其实是 generative,为什么会这样呢,因为它还是要去算一个 prior probability,因为 prior probability 是某一句话,被说出来的机率,而你要 estimate 某一句话被说出来的机率,你并不需要有声音的 data,你只要去网路上爬很多很多的文字,你就可以计算某一段文字出现的机率,你不需要声音的 data,这个就是 language model,所以在语音辨识里面,我们整个 model 反而是 generative 的,因为你可以把 class-dependent 的部分跟 prior 的部分,拆开来考虑,而 prior 的部分,你就用文字的 data 来处理,而 class-dependent 的部分,才需要声音和文字的配合,这样你可以把 prior estimate 的更精确,这一件事情在语音辨识里面是很关键的,现在几乎没有办法摆脱这个架构。

那现在我们要讲,我们刚刚举的例子通通都是,只有两个 class 的例子,接下来我们要讲的是,如果是有两个以上的 class,我们等一下举的例子是,那我们等一下就只讲过程、不讲原理,如果你想要知道原理的话,你可以看一下 Bishop 的教科书,那这个原理跟我们刚才从,只有两个Class 的情况呢,几乎是一模一样的,我相信你自己就可以推导出来,所以我就不想重复一个你觉得很 trivial 的东西,那我们就直接看它的操作怎么做。

假设我有三个 class, C 1 , C 2 C_1, C_2 C1,C2 C 3 C_3 C3,每一组 class 都有自己的 weight,和自己的 bias,这边 w 1 , w 2 , w 3 w^1, w^2, w^3 w1,w2,w3 分别代表 3 个 vector, b 1 , b 2 , b 3 b_1, b_2, b_3 b1,b2,b3 呢,代表 3 个 scalar,那接下来呢,input 一个 x x x,这个是你要分类的对象,你把 x x x w 1 w^1 w1 做 inner product 加上 b 1 b_1 b1 x x x w 2 w^2 w2 做 inner product 加上 b 2 b_2 b2 x x x w 3 w^3 w3 做 inner product 加上 b 3 b_3 b3,你得到 z 1 , z 2 z_1, z_2 z1,z2 z 3 z_3 z3,这个 z 1 , z 2 z_1, z_2 z1,z2 z 3 z_3 z3 呢,它可以是任何值,它可以是负无穷大到正无穷大的任何值,接下来呢,我们把 z 1 , z 2 , z 3 z_1, z_2, z_3 z1,z2,z3,丢进一个 Softmax 的 function,这个 Softmax function 它做的事情是这样,把 z 1 , z 2 , z 3 z_1, z_2, z_3 z1,z2,z3 都取 exponential,得到 e z 1 , e z 2 , e z 3 e^{z_1}, e^{z_2}, e^{z_3} ez1,ez2,ez3,接下来,把 e z 1 , e z 2 , e z 3 e^{z_1}, e^{z_2}, e^{z_3} ez1,ez2,ez3,summation 起来,你得到它们的 total sum,然后你再把这个 total sum 分别除掉这 3 项,把 total sum 分别除掉这 3 项,得到 Softmax function 的 output, y 1 , y 2 y_1, y_2 y1,y2 y 3 y_3 y3

如果觉得有一点复杂的话,我举一个数字,假设 z 1 = 3 , z 2 = 1 , z 3 = − 3 z_1 = 3, z_2 = 1, z_3 = -3 z1=3,z2=1,z3=3,做完 exponential 以后, e 3 e^3 e3 是很大的,是 20, e 1 e^1 e1 是 2.7, e − 3 e^{-3} e3 很小,是 0.05,接下来呢,你把这 3 项合起来,再分别去除掉,也就是做 normalization,那你得到的结果呢,20 就变成 0.88,那当你做完 Softmax 以后,原来 input z 1 , z 2 , z 3 z_1, z_2, z_3 z1,z2,z3 它可以是任何值,但是,做完 Softmax 以后,你的 output 会被限制住,第一个,你的 output 的值一定是介于 0~1 之间,首先,你 output 值一定是正的,不管你 z 1 , z 2 , z 3 z_1, z_2, z_3 z1,z2,z3 是正的还是负的,开exponential 以后,都变成是正的,那今天它的 total sum,一定是 1,你 output 的和一定是 1,因为在这个地方做了一个 normalization, 所以你的 total sum 一定是 1,为什么这个东西叫 Softmax 呢?

因为如果你做,如果是 max 的话,就是取最大值嘛,但是,你做 Softmax 的意思呢,是说你会对最大的值做强化,因为今天,你有取了 exponential,你取了 exponential 以后呢,大的值和小的值,他们之间的差距呢,会被拉得更开,强化它的值,这件事情呢,叫做 Softmax,那你就可以把这边的每一个 y i y_i yi 呢,当作 input x x x,input 这个 x x x 是第 i i i 个 class 的 posterior probability,所以今天假设说,你 y 1 y_1 y1 是 0.88,也就是说,你 input x x x 属于 class 1 的机率是 88%,属于 class 2 的机率是 12%,属于 class 3 的机率是趋近于 0,这个 Softmax 的 output,就是拿来当 z z z 的posterior probability,那你可能会问说,为什么会这样呢?

事实上这件事情,是有办法推导的,如果有人在外面演讲,问我说为什么是用 exponential,我就会回答说,你也可以用别的,因为我用别的,你也会问同样的问题这样子,但是,这个事情是有办法讲的,你可以去翻一下 Bishop 的教科书,这件事情是可以解释的,如果,你今天有 3 个 class,假设这 3 个 class,通通都是 Gaussian distribution,他们共用同一个 covariance matrix,在这个情况下,你做一般推导以后,你得到的就会是这个 Softmax 的 function,这个就留给大家,自己做,如果你想要知道更多,你还可以 google 一个叫做,maximum entropy 的东西,maximum entropy 也是一种 classify,但它其实跟 Logistic Regression 是一模一样的东西,你只是换个名字而已,那它是从另外一个观点呢,来切入为什么我们的 classifier 长这样子,我们刚才说,我们可以从机率的观点,假设我们用的是 Gaussian distribution, 经过一般推导以后,你可以得到 Softmax 的 function,那你可以从另外一个角度,从 information theory 的角度去推导,你会得到 Softmax 这个 function,这个就留给大家,自己去研究,google maximum entropy 你会找到答案。

所以,我们复习一下刚才做的事情,你就有一个 x x x 当作 input,所以你乘上 3 组不同的 weight,加上 3 组不同的 bias,得到 3 个不同的 z z z,通过 Softmax function,你就得到, y 1 , y 2 , y 3 y_1, y_2, y_3 y1,y2,y3 分别是这 3 个 class 的 posterior probability,可以把它合起来呢,当作是 y y y,那你在训练呢,你要有一个 target,它的 target 是什么呢?它的 target 是 y ^ \hat y y^,每一维、你用 3 个 class,你 output 就是 3 维,这 3 维分别对应到 y ^ 1 , y ^ 2 \hat y_1, \hat y_2 y^1,y^2 y ^ 3 \hat y_3 y^3,我们要去 minimize 的对象,是 y y y 所形成的这个 probability distribution,它是一个 probability distribution 嘛,在做完 Softmax 的时候,它就变成了,你把它当一个 probability distribution 来看待,你可以去计算这个 y y y y ^ \hat y y^ 他们之间的 cross entropy,它的这个 cross entropy 的式子呢,这两个 probability 的 cross entropy,它们的式子如图所示。

如果我们要计算 y y y y ^ \hat y y^ 的 cross entropy 的话, y ^ \hat y y^ 显然也要是一个 probability distribution,我们才能够算 cross entropy,怎么算呢?假设 x x x 是属于 class 1 的话,在 training data 里面,我们知道 x x x 是属于 class 1 的话,它的 target 就是 [1 0 0],如果是属于 class 2 的话,它的 target 就是 [0 1 0],如果是属于 class 3 的话,它的 target 就是 [0 0 1],我们之前有讲过说,如果你设 class 1 的 target 是 1,class 2 的 target 是 2,class 3 的 target 是 3,这样会有问题,你是假设说,1 跟 2 比较近、2 跟 3 比较近,但是,如果你今天是,换一个假设,你今天是假设,如果 x x x 是属于 class 1 的话,它的目标是 [1 0 0],属于 class 2是 [0 1 0],属于 class 3是 [0 0 1],那你就不用假设 class 和 class 之间,谁跟谁比较近,谁跟谁比较远的问题这样,至于交叉熵这个式子,哪来的呢?

其实这个式子也是去 maximum likelihood,我们刚才在讲这个 binary 的 case 的时候,我们讲说,我们的这个 cross entropy 这个 function,minimize cross entropy 这件事情,其实是来自 maximize likelihood,那在有多个 class 的情况下,也是一模一样的,你就把 max likelihood 那个 function 列出来,那经过一番整理,你也会得到 minimize cross entropy,那这件事呢,就交给大家自己做。

接下来,我要讲的是,这个 Logistic Regression 啊,其实它是有,非常强的限制,怎么样的限制呢?我们今天假设这样一个 class,现在有 4 笔 data,它们每一笔 data 都有两个 feature,那它们都是 binary 的 feature,那 class 2 呢,有两笔 data,分别是 (0, 0)、(1, 1),class 1 有两笔 data,分别是 (0, 1)、(1, 0),如果我们想要用 Logistic Regression,对它做分类的话,我们能做到这件事情吗?你会发现说,这件事情,我们是办不到的,Logistic Regression 的话,我们会希望说,对 Logistic Regression 的 output 而言,这两个属于 class 1 的 data,它的机率,要大于 0.5,另外两个属于 class 2 的 data,它的机率要小于 0.5,但这件事情,对 Logistic Regression 来说呢,它卡翻了,它没有办法做到这件事。

因为 Logistic Regression 两个 class 之间 boundary,就是一条直线,它的 boundary 就是一条直线,所以,你要分两个 class 的时候,你只能在你的,feature 的平面上,画一条直线,不管你怎么画,你都没有办法把 红色的放一边、蓝色的放一边,这直线可以随便乱画、你可以调整, w w w b b b,你的 weight 跟 bias,使得你的某些 Regression,两个 class 之间的 boundary,怎么画都可以,这个 boundary 是一条直线,怎么画都可以,但你永远没有办法把,今天这个 example 的红色点跟蓝色点分成两边,怎么办呢?

假设你还是坚持要用 Logistic Regression 的话,有一招叫做 Feature Transformation,就是你刚才的 feature 定的不好,原来 x 1 , x 2 x_1, x_2 x1,x2 的 feature 定的不好,我们可以做一些转化以后,找一个比较好的 feature space,这一个比较好的 feature space, 让 Logistic Regression 是可以处理,我们把 x 1 x_1 x1 x 2 x_2 x2 呢,转到另外一个 space 上面,转到 x 1 ′ x_1' x1 x 2 ′ x_2' x2 上面。

怎么做 feature transformation 呢,这是很 heuristic and ad hoc的东西,想一个你喜欢的方式,举例来说,我这边定 x 1 ′ x_1' x1 就是某一个点到 (0,0) 的距离, x 2 ′ x_2' x2 就是某一个点到 (1,1) 的距离,如果我们把它画出来,我们先看左下角这个点好了,如果我们看左下角这个点,它的 x 1 ′ x_1' x1 应该是 0,因为它跟 (0,0) 的距离就是 0,它跟 (1,1) 的距离,(0,0) 跟 (1,1) 的距离是 2 \sqrt{2} 2 ,所以 x 2 ′ x_2' x2 s q r t 2 sqrt {2} sqrt2,所以,经过这个 transformation,(0,0) 这个点,跑到这边,其他点同理可算。

所以,经过这个 transform 以后,这两个红色的点会 map,重叠在一起,都变成是 1,这个时候,对 Logistic Regression 来说,它可以处理这个问题了,因为它可以找一个 boundary,比如说,可能在这个地方,把蓝色的点跟红色的点分开,但是,麻烦的问题是,我们不知道怎么做 feature transformation,如果我们花太多力气在做 feature transformation,那就不是机器学习了,就都是人的智慧了,所以,有时候我们不知道要怎么找一个,好的 transformation,所以,我们会希望说,这个 transformation 是由机器自己产生的,怎么让机器自己产生这样的 transformation 呢?

我们就把很多个 Logistic Regression 呢,cascade 起来,把很多 Logistic Regression 接起来,我们就可以做到这一的事情,假设 input 是 x 1 , x 2 x_1, x_2 x1,x2,我们有一个 Logistic Regression 的 model,我们这边就把 bias 省略掉,让图看起来比较简单一点,这边有一个 Logistic Regression 的 model,它的 x 1 x_1 x1 乘一个 weight,跟 x 2 x_2 x2 乘一个 weight,加起来以后得到 z z z 的 sigmoid function,它的 output 我们就说是,新的 transform 的第一维, x 1 ′ x_1' x1,我们有另外一个 Logistic Regression 的 model,它跟 x 1 x_1 x1 乘上一个 weight,对 x 2 x_2 x2 乘一个 weight,得到 z 2 z_2 z2,再通过 sigmoid function,得到 x 2 ′ x_2' x2,我们说它是 transform 后的另外一维,如果我们把 x 1 x_1 x1 x 2 x_2 x2 经过,这两个 Logistic Regression mode 的 transform,得到 x 1 ′ x_1' x1 x 2 ′ x_2' x2,而在这个新的 transform 上面,class 1 和 class 2 是可以用一条直线分开的,那么最后,只要再接另外一个 Logistic Regression 的 model,它的 input 就是 x 1 ′ x_1' x1 x 2 ′ x_2' x2,对它来说, x 1 ′ x_1' x1 x 2 ′ x_2' x2 就是,每一个 example 的 feature,不是 x 1 x_1 x1 x 2 x_2 x2,是 x 1 ′ x_1' x1 x 2 ′ x_2' x2,那根据 x 1 ′ x_1' x1 x 2 ′ x_2' x2 这个新的 feature,它就可以把 class 1 和 class 2 分开,所以前面这两个,Logistic Regression 做的事情,就是做 feature transform 这件事情,它先把 feature transform 好以后,再由后面的,红色的 Logistic Regression 的 model 呢,来做分类。

如果举比较实际的例子的话,我们看刚才那个例子,我们在 x 1 x_1 x1 x 2 x_2 x2 平面上,有 4 个点,我们可以调整蓝色这个 Logistic Regression,它的 weight 的参数,让它的 posterior probability 的 output 呢,长得像是这个图上的顏色这样子,因为这个 boundary 一定是一条直线嘛,所以,这个 posterior probability 的 output 呢,一定是长这样子的,它的等高线一定是直的,在左上角的地方,output 的值比较大,在右下角的地方,output 的值比较小,你可以调整参数,让这个蓝色的,这个 Logistic Regression,它 input x 1 , x 2 x_1, x_2 x1,x2 的时候,对这 4 个点,它的 output 是 0.73, 0.27, 0.27, 0.05,这件事情呢,是它做得到的,对绿色这个点来说,你也可以调整它的参数,让它对右下角红色这个点的 output 是 0.73,对蓝色的点是 0.27, 0.27,对左上角这个点,它是 0.05,Logistic Regression 它的 boundary 一定是一条直线,那这个直线可以有任何的画法,你可以是左上高、右下低,也可以是右下高、左上低,这都是做得到的,只要调整参数,都做得到这些事情。

所以,现在呢,有了前面这两个 Logistic Regression 以后,我们就可以把 input 的每一笔 data,做 feature transform得到另外一组 feature,有就是说呢,原来左上角这个点,原来左上角这个点,它本来在 x 1 , x 2 x_1, x_2 x1,x2 的平面上是 (0, 1),但是在 x 1 ′ , x 2 ′ x_1', x_2' x1,x2 的平面上,它变成是 (0.73, 0.05),如果我们看右下角,这个红色的点,在 x 1 ′ , x 2 ′ x_1', x_2' x1,x2 的平面上,它就是 (0.05, 0.73),(注:右下角图中的 x 1 ′ x_1' x1 x 2 ′ x_2' x2 画反了),然后,我们现在把红色的点变到 (0.73, 0.05) 的位置,把这两个蓝色的点变到 (0.27, 0.27) 的位置,我们做了这样的转换以后呢,我们就可以用红色的这个 Logistic Regression,画一条 boundary,把蓝色的点和红色的点分开。

所以,如果我们只有一个 Logistic Regression,我们没有办法把这个 example 处理好,但是,如果我们有 3 个 Logistic Regression,他们被接在一起的话,那我们就可以把这件事情处理好。

所以,把这些 Logistic Regression 的 model 叠在一起,它还满有用的,我们可以有,某一个 Logistic Regression 它的 model、它的 input,是来自于其他 Logistic Regression 的 output,而某一个 Logistic Regression 的 output,它也可以是其他 Logistic Regression 的 input,我们可以把它前后相连起来,就变得呢,很 powerful,那我们呢,可以给它一个新的名字,我们把每一个 Logistic Regression,叫做一个 Neuron,把这些 Logistic Regression 串起来,所成的 network,就叫做 Neural Network,就叫做类神经网路,换了一个名字以后,它整个就潮起来了,你就可以骗麻瓜,你就可以跟麻瓜讲说,我们是在模拟人类大脑的运作,而麻瓜就会觉得,你做的东西实在是太棒了,这个东西就是 deep learning 这样,所以我们呢,就进入 deep learning。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

李宏毅 机器学习 2016 秋:6、Classification: Logistic Regression 的相关文章

  • 计算机图形学入门(一)-线性代数部分知识1

    本部分主要介绍了向量的点乘与叉乘在图形学中的基本应用 介绍了图形学中常用的2D矩阵变换 例如缩放 对称 切变换 旋转 平移 逆变换 组合变换和分解变换 还有在图形学中为了简化操作而采取的添加维度的方法 主要的学习过程来自下面的视频 本文只会
  • select case when语句

    今天看见一公司的数据库面试题 其中有道一开始没想起怎么做 后来摸索了下终于做出来了 题目是 两个表联合查询 当表2的记录在表A里没有时 将其设置为0 mysql gt select from t1 id name 1 bbs 2 bb 3
  • folly库安装(2)openssl升级、python3.8安装

    openssl是必须要升级到openssl1 1 1的 python3 8可以选择不安装 因为folly官网提供了一种用python3快速安装的方法 但这个方法在国内不太顺利 被墙的原因 很多包是不能自动下载的 但了解下也是好的 用pyth
  • 面试官:生成订单30分钟未支付,则自动取消,该怎么实现?

    了解需求 方案 1 数据库轮询 方案 2 JDK 的延迟队列 方案 3 时间轮算法 方案 4 redis 缓存 方案 5 使用消息队列 了解需求 在开发中 往往会遇到一些关于延时任务的需求 例如 生成订单 30 分钟未支付 则自动取消 生成

随机推荐

  • Centos下服务异常停止,log无任何异常体现localhost kernel: TCP: request_sock_TCP: Possible SYN flooding on port 8080

    背景 这两天项目出了奇怪的问题 某服务不明原因的停止运行 停止前一切正常 解决 重启服务解决 但不多久又出现类型问题 分析 开发和运维给不出原因 无法向客户交待 头大时刻想到系统运行日志 var log message应该有记录相应log
  • MySQL必知必会 学习笔记 第二十二章 使用视图

    MySQL 5添加了对视图的支持 视图是虚拟的表 它包含的是一个查询的结果 它本身不含数据 只是用来查看存储在别处的数据的一种设施 视图返回的数据是从其他表中检索出来的 在添加或更改这些表中的数据时 视图将返回改变过的数据 视图的应用 1
  • java数据结构基础名词解释

    第一章 绪论 数据与数据结构 数据 信息的载体 数据元素 数据中的一个 个体 是数据的基本组织单位 数据项 简单数据项 例如 姓名 年龄 组合数据项 例如 出生年月日 包含年 月 日三个简单数据项 数据对象 属性相同的数据元素的集合 数据结
  • 2022.11.29(面经五,笔试+技术面)

    2022 11 29 面经五 笔试题目不难 多刷力扣就成 1 什么是面向对象 面向对象 是把构成问题的事务分解成各个对象 而建立对象的目的也不是为了完成一个个步骤 而是为了描述某个事物在解决整个问题的过程中所发生的行为 附加 面向过程 分析
  • 【自我提高】树莓派GPIO的几种语言控制方法 C 篇

    使用C语言控制 GPIO 18 首先知道树莓派外置IO的关系对照表 我这里的树莓派是 PI 3B V1 2 关系对照表如下 C 语言下使用 wiringPi GPIO 进行编程 要安装 wiringPi pi raspberrypi sud
  • perl 入门推荐

    整理了一些perl链接 perl没有太多复杂概念 了解基础后 就可以编写各种需求脚本了 perl 相同功能 实现的方法有很多 只需了解最最基本的那种方法就好 剩下的就是百度 熟能生巧 举一反三 理解消化 perl语言 一个视频全解决 在线播
  • 合宙Air700E/4G模块使用AT指令查询基础信息

    Air700E使用AT指令查询基础信息 前言 AT指令使用 AT 确认AT固件 AT CGMR 请求制造商版本 AT CGMM 返回制造商型号编码 AT CGSN x 查询产品序列号 AT CGSN 1 查询IMEI AT CGSN 2 查
  • Flask项目(三)定义登录装饰器、图片服务、缓存机制、celery

    Flask项目 定义登录装饰器 redis文档 图片服务 封装七牛方法 城区数据下拉列表 缓存 用户认证相关 发布房源 map 函数 celery 基本使用 房屋管理 定义登录装饰器 utils commons py from werkze
  • x86汇编_MUL/IMUL乘法指令_笔记52

    32位模式下整数乘法可以实现32 16或8位的操作 64位下还可以使用64位操作数 MUL执行无符号乘法 IMUL执行有符号乘法 MUL指令 无符号数乘法 32 位模式下 MUL 无符号数乘法 指令有三种类型 执行 8 位操作数与 AL 寄
  • gitee删除上传到的远程分支的提交记录

    在实际开发中可能也经常会遇到写完代码后提交到远程分支但发现写的提交信息有误 不符合规范 由于自己的gitee账号可能没有修改提交记录的权限 因此最佳的解决方法是 撤销本地分支当前的提交记录 将代码回滚到上一个版本 提交前 重新强制再提交一版
  • 大数据挖掘、分析与应用

    第一讲 基础知识 大数据指无法在可承受的时间范围内用常规软件工具进行捕捉 管理和处理的数据集合 是需要新处理模式才能具有更强的决策力 洞察力和流程优化能力的海量高增长率和多样化的信息资产 数据挖掘 DataMining 是有组织有目的地收集
  • 安装SQLServer2008出现[HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD)设置为 1

    问题 当我们卸载SQLServer2008后再重新安装后会出现以下问题 原因是卸载有时不能完全清理文件 解决方法 找到文件C Users user name AppData Local Microsoft Corporation删除Land
  • 深度学习Pytorch(十)——基于torchvision的目标检测模型

    深度学习Pytorch 十 基于torchvision的目标检测模型 文章目录 深度学习Pytorch 十 基于torchvision的目标检测模型 一 定义数据集 二 为PennFudan编写自定义数据集 1 下载数据集 2 为数据集编写
  • C++ 中基础的几种变量作用域,类作用域(C++复习向p5)

    文章目录 三种变量 变量作用域 初始化变量 类作用域 三种变量 局部变量 函数 代码块中的变量 形式参数 函数参数中定义的变量 在函数体中有效 全局变量 所有函数外部声明的变量 变量作用域 局部作用域 局部变量在函数执行完后销毁 全局作用域
  • 最全面的Socket使用解析

    前言 Socket的使用在Android的网络编程中非常重要 今天我将带大家全面了解Socket及其使用方法 目录 1 网络基础 1 1 计算机网络分层 计算机网络分为五层 物理层 数据链路层 网络层 运输层 应用层 其中 网络层 负责根据
  • 一次内网 Harbor 镜像仓库导出迁移过程记录

    1 整体思路 Harbor 提供有丰富的 API 接口 可以获取所有项目信息 镜像和标签等信息 通过编写 shell 脚本循环处理即可实现批量导出镜像包的需求 登陆 Harbor 后 左下角有 API 控制中心按钮 进入可以查看和调试 2
  • centos 安装配置l2tp实现***

    centos 安装配置l2tp实现 1 前言 L2TP是一种工业标准的Internet隧道协议 功能大致和PPTP协议类似 比如同样可以对网络数据流进行加密 不过也有不同之处 比如PPTP要求网络为IP网络 L2TP要求面向数据包的点对点连
  • OSI七层模型---数据链路层(以太网帧、MAC地址、MTU、MSS、ARP协议)

    我们首先来了解一下物理层的作用 物理层的主要目的是实现比特流的透明传输 为数据链路层提供服务 物理层接口解决了用几根线 多大电压 每根线什么功能 以及几根线之间是怎么协调的问题 物理层介质解决了数据载体材质以及价格优缺点的问题 通信技术解决
  • 01_I.MX6U芯片简介

    目录 I MX6芯片简介 Corterx A7架构简介 Cortex A处理器运行模型 Cortex A 寄存器组 IMX6U IO表示形式 I MX6芯片简介 ARM Cortex A7内核可达900 MHz 128 KB L2缓存 并行
  • 李宏毅 机器学习 2016 秋:6、Classification: Logistic Regression

    文章目录 六 Classification Logistic Regression 六 Classification Logistic Regression 我们来讲 Logistic Regression 我们在上一份投影片里面 我们都已