Piecewise Linear Curves
Linear 的 Model,也许太过简单了,我们可以想像说 x1 跟 y,也许它中间有比较复杂的关係,对 Linear 的 Model 来说,x1 跟 y 的关係就是一条直线,随著 x1 越来越高,y 就应该越来越大,你可以设定不同的 w,改变这条线的斜率,你可以设定不同的 b,改变这一条蓝色的直线,跟 y 轴的交叉点,但是无论你怎麼改 w 跟 b,它永远都是一条直线,永远都是 x1 越大,y 就越大,前一天观看的人数越多,隔天的观看人数就越多.
但也许现实并不是这个样子.
-
也许在 x1 小於某一个数值的时候,前一天的观看人数跟隔天的观看人数是成正比,
-
也许当 x1 大於一个数值的时候,这个物极必反,过了一个假设 x1 太大,前天观看的人数太高,那隔天观看人数就会变少,也说不定
-
也许 x1 跟 y 中间,有一个比较复杂的,像这个红色线一样的关係
但你不管怎麼摆弄w 跟 b,你永远製造不出红色那一条线,你永远无法用 Linear 的 Model,製造红色这一条线,显然 Linear 的 Model 有很大的限制,这一种来自於 Model 的限制,叫做 Model 的 Bias,那其实我们刚才在课堂一开始的时候也叫做,也说 b 叫做 Bias,那这个地方有一点,在用词上有一点 Ambiguous,所以特别强调说,这个东西叫做 Model 的 Bias,跟 b 的这个 Bias 不太一样,它指的意思是说,没有办法模拟真实的状况.
所以我们需要写一个更复杂的,更有弹性的,有未知参数的 Function,
我们可以观察一下红色的这一条曲线,它可以看作是一个常数,再加上一群蓝色的这样子的 Function
这个蓝色的 Function,它的特性是 -
当输入的值,当 x 轴的值小於某一个这个 Flash Hold 的时候,它是某一个定值,
-
大於另外一个 Flash Hold 的时候,又是另外一个定值,
-
中间有一个斜坡
所以它是先水平的,然后再斜坡,然后再水平的,那它其实有名字,它的名字我们等一下再讲,这边我们因為它是蓝色的 Function,我们就先叫它蓝方吧 这样子,好 那所以呢 这个红色的线啊,它可以看作是一个常数项加一大堆的蓝方,好 那这个常数项,它的值应该要有多大呢,你就看这一条红色的线啊,它跟 x 轴的交点在哪裡,好 那这个常数项呢,就设跟 x 轴的交点一样大
那怎麼加上这个蓝色的 Function 以后,变成红色的这一条线?
蓝线“1”Function 斜坡的起点,设在红色 Function 的起始的地方,然后第二个,斜坡的终点设在第一个转角处,你刻意让这边这个蓝色 Function 的斜坡,跟这个红色 Function 的斜坡,它们的斜率是一样的,这个时候如果你把 0 加上 1,你就可以得到红色曲线
然后接下来,再加第二个蓝色的 Function,你就看红色这个线,第二个转折点出现在哪裡, 所以第二个蓝色 Function,它的斜坡就在红色 Function 的第一个转折点,到第二个转折点之间,你刻意让这边的斜率跟这边的斜率一样,这个时候你把 0加 1+2,你就可以得到两个转折点这边的线段,就可以得到红色的这一条线这边的部分
然后接下来第三个部分,第二个转折点之后的部分,你就加第三个蓝色的 Function,第三个蓝色的 Function,它这个坡度的起始点,故意设的跟这个转折点一样,这边的斜率,故意设的跟这边的斜率一样,好 接下来你把 0加 1+2+3 全部加起来,你就得到红色的这个线。
所以红色这个线,可以看作是一个常数,再加上一堆蓝色的 Function
你现在这个 Curves 啊,它是有很多线段所组成的,它是有很多锯齿状的线段所组成的,这个叫做 Piecewise Linear 的 Curves,那你会发现说这些 Piecewise Linear 的 Curves,你有办法用常数项,加一大堆的蓝色 Function 组合出来,只是他们用的蓝色 Function 不见得一样,你要有很多不一样的蓝色 Function,加上一个常数以后,你就可以组出这些 Piecewise Linear 的 Curves。那如果你今天 Piecewise Linear 的 Curves 越复杂,也就是这个转折的点越多啊,那你需要的这个蓝色的 Function 就越多.
讲到这边有人可能会说,那也许我们今天要考虑的 x 跟 y 的关係不是 Piecewise Linear 的 Curves ,也许它是这样子的曲线,那就算是这样的曲线,也无所谓,我们可以在这样的曲线上面,先取一些点,再把这些点点起来,变成一个 Piecewise Linear 的 Curves,而这个 Piecewise Linear 的 Curves 跟原来的曲线,它会非常接近,如果你今天点取的够多,或你点取的位置适当的话,这个 Piecewise Linear 的 Curves,就可以逼近这一个,连续的这一个曲线,就可以逼近这一个不是 Piecewise Linear,它是有角度的 有弧度的这一条曲线。
所以我们今天知道一件事情,你可以用 Piecewise Linear 的 Curves,去逼近任何的连续的曲线,而每一个 Piecewise Linear 的 Curves,又都可以用一大堆蓝色的 Function 组合起来,也就是说,我只要有足够的蓝色 Function 把它加起来,我也许就可以变成任何连续的曲线
以今天,假设我们的 x 跟 y 的关係,它也许非常地复杂,那也没关係,我们就想办法写一个带有未知数的 Function,这个带有未知数的 Function 它表示的,就是一堆蓝色的 Function,加上一个 Constant,那我们接下来要问的问题就是,这一个蓝色 Function,它的式子应该要怎麼把它写出来呢?
也许你要直接写出它 没有那麼容易,但是你可以用一条曲线来理解它,用一个 Sigmoid 的 Function,来逼近这一个蓝色的 Function,那 Sigmoid Function,它的式子长的是这个样子的:
y
=
c
1
1
+
e
−
(
b
+
w
x
1
)
y=c \frac{1}{1+e^{-(b+wx_1)}}
y=c1+e−(b+wx1)1
它的横轴输入是 x1,输出是 y,输入的 x1,我们先乘上一个 w,再加上一个 b,再取一个负号,再取 Exponential,再加 1,这一串被放在分放在,放在分母的地方
把 1 除以 1 加上 Exponential -b+wx1,前面 你可以乘上一个 Constant 叫做 c,好 那
- 如果你今天输入的这个 x1 的值,趋近於无穷大的时候,那 e − ( b + w x 1 ) e^{-(b+wx_1)} e−(b+wx1)这一项就会消失,那当 x1 非常大的时候,这一条这边就会收敛在这个高度是 c 的地方
- 那如果今天 x1 负的非常大的时候,分母的地方就会非常大,那 y 的值就会趋近於 0.
所以你可以用这样子的一个 Function逼近这一个蓝色的 Function,那这个东西它的名字叫做 Sigmoid,Sigmoid,如果你要 硬要翻成中文的话,可以翻成 S 型的,所以 Sigmoid Function 就是 S 型的 Function,因為它长得是 有点像是 S 型的哦,所以叫它 Sigmoid Function,那这边我们之后都懒得把 Exponential 写出来,我们就直接写成这个样子:
y
=
c
∗
s
i
g
m
o
i
d
(
b
+
w
x
1
)
y=c*sigmoid(b+wx_1 )
y=c∗sigmoid(b+wx1)
就是 y 等於 c 倍的 Sigmoid,然后这个括号裡面放
b
+
w
x
1
b+wx_1
b+wx1,然后这个
b
+
w
x
1
b+wx_1
b+wx1,实际上做的事情,就是把它放在 Exponential 的指数下,前面加一个负号,然后 1+Exponential 的
−
(
b
+
w
x
1
)
-(b+wx_1)
−(b+wx1) 放在分母的地方,然后前面乘上 c,就等於 y
所以我们可以用这个 Sigmoid Function,去逼近一个蓝色的 Function,那其实这个蓝色的 Function,比较常见的名字就叫做,Hard 的 Sigmoid 啦,只是我本来是想说一开始,我们是先介绍蓝色的 Function,才介绍 Sigmoid,所以一开始说它叫做 Hard Sigmoid,有一点奇怪,所以我们先告诉你说,有一个 Sigmoid Function,它可以逼近这个蓝色的 Function,那这个蓝色的 Function,其实通常就叫做 Hard 的 Sigmoid.
那我们今天我们需要各式各样不同的,蓝色的 Function,还记得吗,我们要组出各种不同的曲线,那我们就需要各式各样合适的蓝色的 Function,而这个合适的蓝色的 Function 怎麼製造出来呢
y
=
c
1
1
+
e
−
(
b
+
w
x
1
)
y=c \frac{1}{1+e^{-(b+wx_1)}}
y=c1+e−(b+wx1)1
我们就需要调整这裡的 b 跟 w 跟 c,你就可以製造各种不同形状的 Sigmoid Function,用各种不同形状的 Sigmoid Function,去逼近这个蓝色的 Function.
- 如果你今天改 w w w 你就会改变斜率你就会改变斜坡的坡度
- 如果你动了 b b b你就可以把这一个 Sigmoid Function 左右移动
- 如果你改 c c c 你就可以改变它的高度
所以你只要有不同的 w 不同的 b 不同的 c,你就可以製造出不同的 Sigmoid Function,把不同的 Sigmoid Function 叠起来以后,你就可以去逼近各种不同的,Piecewise Linear 的 Function,然后 Piecewise Linear 的 Function,可以拿来近似各种不同的 Continuous 的 Function
所以假设我们要把红色的这条线,它的函数写出来的话,那可能长什麼样子呢?
我们知道说红色这条线 就是 0加 1+2+3,而这个 123 啊,它们都是蓝色的 Function,所以它们的函式 就是有一个固定的样子,它们都写做
(
b
+
w
x
1
)
(b+wx_1 )
(b+wx1),去做 Sigmoid 再乘上 c1,只是 1 跟 2 跟 3,它们的 w 不一样,它们的 b 不一样,它们的 c 不一样,如果是第一个蓝色 Function,它就是 w1 b1 c1,第二个蓝色 Function,我们就说它的,它用的是 w2 b2 c2,第三个蓝色 Function,我们就说它用的是 w3 b3 c3,好 那我们接下来呢,就是把 0 跟 123 全部加起来以后,我们得到的函式,就长这一个样子
y
=
b
+
∑
i
c
i
s
i
g
m
o
i
d
(
b
i
+
w
i
x
1
)
y = b + \sum_i {c_isigmoid(b_i+w_ix_1 )}
y=b+∑icisigmoid(bi+wix1)
我们把 1+2+3 加起来,然后 Summation 裡面呢,就是 ci 乘上 Sigmoid,bi+wi 乘上 x1,所以这边每一个式子,都代表了一个不同蓝色的 Function,Summation 的意思,就是把不同的蓝色的 Function 给它加起来,就是这边 Summation 的意思.
以我们今天就写出了一个这样子的 Function,如果我们假设裡面的 b 跟 w 跟 c,它是未知的,它是我们未知的参数,那我们就可以设定不同的 b 跟 w 跟 c,设定不同的 b 跟 w 跟 c,我们就可以製造不同的蓝色的 Function,製造不同的蓝色的 Function 叠起来以后,就可以製造出不同的红色的 Curves,製造出不同的红色的 Curves,就可以製造出不同的 Piecewise Linear 的 Curves,就可以去逼近,各式各样不同的 Continuous 的 Function
所以我们其实有办法写出一个,这个非常有弹性的,有未知参数的 Function,它长这个样子就是 Summation 一堆 Sigmoid,但它们有不同的 c 不同的 b 不同的 w,好 那所以本来我们是 Linear 的 Model,y 等於 b+w 乘上 x1,它有非常大的限制,这个限制叫做 Model 的 Bias,那我们要如何减少 Model 的 Bias 呢?
我们可以写一个更有弹性的,有未知参数的 Function,它叫做
y
=
b
+
∑
i
c
i
s
i
g
m
o
i
d
(
b
i
+
w
i
x
1
)
y=b + \sum_i {c_isigmoid(b_i+w_ix_1 )}
y=b+∑icisigmoid(bi+wix1) 本来这边是
b
+
w
x
1
b+wx_1
b+wx1,这边变成
b
i
+
w
i
x
1
b_i+w_ix_1
bi+wix1,然后我们有很多不同的 bi,有很多不同的 wi,它们都通过 Sigmoid 都乘上 ci,把它统统加起来再加 b 等於 y,我们只要带入不同的 c 不同的 b 不同的 w,我们就可以变出各式各样,就可以组合出各式各样不同的 Function
那我们刚才其实已经进化到,不是只用一个 Feature,即
X
1
X_1
X1,我们可以用多个 Feature我们这边用 j 来代表 Feature 的编号
举例来说刚才如果要考虑前 28 天的话,j 就是 1 到 28,考虑前 56 天的话,j 就是 1 到 56,那如果把这个 Function,再扩展成我们刚才讲的上面这个,比较有弹性的 Function 的话那也很简单,我们就把 Sigmoid 裡面的东西换掉,本来这边是
y
=
b
+
∑
j
w
i
x
j
y=b+\sum_j{w_ix_j}
y=b+∑jwixj
那这边呢,就把这一项放到这个括号裡面,改成
y
=
b
+
∑
i
c
i
s
i
g
m
o
i
d
(
b
i
+
∑
j
w
i
j
x
j
)
y = b + \sum_i {c_isigmoid(b_i+\sum_j w_i{_j} x_j )}
y=b+∑icisigmoid(bi+∑jwijxj)
把本来放在这边的东西放到 Sigmoid 裡面,然后呢这个每一个 Sigmoid 的 Function 裡面呢,都有不同的 bi 不同的
w
i
j
w_i{_j}
wij,然后取 Sigmoid 以后乘上 ci 就全部加起来,再加上 b 就得到 y,我们只要这边 ci bi 跟
w
i
j
w_i{_j}
wij 在放不同的值,就可以变成不同的 Function.
那如果讲到这边你还是觉得有点抽象的话,如果你看这个式子觉得有点头痛的话,那我们用比较直观的方式,把这个式子实际上做的事把它画出来,我们先考虑一下 j 就是 1 2 3 的状况,就是我们只考虑三个 Feature,举例来说 我们只考虑前一天 前两天,跟前三天的 Case.
- 所以 j 等於 1 2 3,那所以输入就是 x1 代表前一天的观看人数,x2 两天前观看人数,x3 三天前的观看人数
- 每一个 i 就代表了一个蓝色的 Function,只是我们现在每一个蓝色的 Function,都用一个 Sigmoid Function 来比近似它
那这边呢,这个 1 2 3 就代表我们有三个 Sigmoid Function,那我们先来看一下,这个括号裡面做的事情是什麼
每一个 Sigmoid 都有一个括号,第一个 Sigmoid i 等於 1 的 Case ,就是把 - x1 乘上一个 Weight 叫 w 11 w_{11} w11
- x2 乘上另外一个 Weight 叫 w 12 w_{12} w12
- x3 再乘上一个 Weight 叫做 w 13 w_{13} w13
- 全部把它加起来,不要忘了再加一个 b
b 1 + w 11 x 1 + w 12 x 2 + w 13 x 3 b_1+w_{11} x_1+w_{12} x_2+w_{13} x_3 b1+w11x1+w12x2+w13x3
这个得到的式子就是这个样子,所以这边我们用 w i j w_{ij} wij ,来代表在第 i 个 Sigmoid 裡面,乘给第 j 个 Feature 的 Weight,第一个 Feature 它就是 w11,第二个 Features 就是乘 w12,第三个 Feature 都是乘 w13,所以三个 Features1 2 3,这个 w 的第二个下标就是 123,w 的第一个下标代表是,现在在考虑的是第一个 Sigmoid Function,那我们有三个 Sigmoid Function,
第二个 Sigmoid Function,它在括号裡面做的事情就是把 x1 乘上 w21,把 x2 x2 乘上 w22,把 x3 x3 乘上 w23,统统加起来再加 b2
第三个 Sigmoid 呢,第三个 Sigmoid 在括号裡面做的事情,就是把 x1 x2 x3,分别乘上 w31 w32 跟 w33 再加上 b3
我们现在為了简化起见,我们把括弧裡面的数字,用一个比较简单的符号来表示,所以这一串东西我们当作 r1,这一串东西我们当作 r2,这一串东西我们叫它 r3.
写成矩阵的形式:
如果你熟悉线性代数的话,简化成矩阵跟向量的相乘,把 x1 x2 x3 拼在一起变成一个向量,把这边所有的 w 统统放在一起变成一个矩阵,把 b1 b2 b3 拼起来变成一个向量,把 r1 r2 r3 拼起来变成一个向量,那这是三个式子,你就可以简写成,有一个向量叫做 x,这个 x 乘 1个矩阵叫做 w,这个 w 裡面有 9 个数值就是这边的 9 个 w,就是这边的 9 个 Weight,x 先乘上 w 以后再加上 b 就得到 r 这个向量,那这边做的事情跟上边做的事情是一模一样的,没有半毛钱的不同,只是表示的方式不一样而已,
那把它改成线性代数比较常用的表示方式,x 乘上矩阵 w 再加上向量 b,会得到一个向量叫做 r
在这个括号裡面做的事情就是这麼一回事,把 x 乘上 w 加上 b 等於 r,r 呢就是这边的 r1 r2 r3,这是 r1 r2 r3,好 那接下来这个 r1 r2 r3 哪,就要分别通过 Sigmoid Function,好 分别通过 Sigmoid Function,因為我们实际上做的值就是,做的事情就是把 r1 取一个负号,再乘 再做 Exponential 再加 1,然后把它放到分母的地方,1 除以 1+Exponential 负 r1 等於 a1,然后同样的方法由 r2 去得到 a2,把 r3 透过 Sigmoid Function 得到 a3,所以这边这个蓝色的虚线框框裡面做的事情,就是从 x1 x2 x3 得到了 a1 a2 a3,
接下来呢,我们这边呢有一个简洁的表示方法,是我们用 r 通过一个,叫做这个 Sigmoid 的 Function,我们用这个东西,我们这边呢用这个符号呢,来代表通过这个 Sigmoid 的 Function,然后呢 所以我们得到了 a 这个向量,就把 r1 r2 r3 分别通过 Sigmoid Function,但我们直接用这个符号来表示它,然后得到 a1 a2 a3
接下来我们这个 Sigmoid 的输出,还要乘上 ci 然后还要再加上 b,如果你要用向量来表示的话,a1 a2 a3 拼起来叫这个向量 a,c1 c2 c3 拼起来叫一个向量 c,那我们可以把这个 c 呢,作 Transpose,好 那 a 呢 乘上 c 的 Transpose 再加上 b,好再加上 b 我们就得到了 y
它整体而言做的事情就是 x 输入是 x,我们的 Feature 是 x 这个向量,x 乘上矩阵 w 加上向量 b 得到向量 r,再把向量 r 透过 Sigmoid Function得 到向量 a,再把向量 a 跟乘上 c 的 Transpose 加上 b 就得到 y。
所以这是上面这件事情,如果你想要用线性代数的方法来表示它,用向量矩阵相乘方法来表示它,欸 就长得一副这个样子,那这边的这个 r 就是这边的 r,这边的 a 就这边的 a,所以我们可以把这一串东西,放到这个括号裡面,再把这个 a 呢 放到这裡来,所以把相同的东西併起来以后,整体而言就是长这个样子,上面这一串东西,我们觉得比较这个,比较有弹性的这个 Function,如果你要线性代数来表示它的话,就是下面这个式子啦