我们来讲 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,xi⋯xI,你就把 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) 1−fw,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(1−f(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) (1−y^1) 跟 ( 1 − y ^ 2 (1 - \hat {y}^2 (1−y^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) (1−y^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^n,p(x=0)=1–y^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)=1−f(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(1−f(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 [1−f(xn)]∗xin。
右边这一项呢,这个也是 trivial 啊,你把 ln ( 1 − f ( x ) ) \ln(1-f(x)) ln(1−f(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^n−f(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^n−f(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^n−f(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(x∣Ci),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(x∣C1) 的机率是 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=1∣C1) 乘上 p ( x 2 = 1 ∣ C 1 ) p(x_2=1|C_1) p(x2=1∣C1),其他项同理可算。
如果你实际算一发就知道说,这一个是小于 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} e−3 很小,是 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。