Datawhale X 李宏毅苹果书 AI夏令营第五期 深度学习(入门)task02-线性模型
学习教程指路:Datawhile
一、分段线性曲线
在Datawhale X 李宏毅苹果书 AI夏令营第五期 深度学习(入门)task01-通过案例了解机器学习-CSDN博客这里介绍的线性模型过于简单,对于实际上可能出现的稍复杂的分段线性曲线关系,预测就会偏差过大。
所以需要写一个更复杂的、更有灵活性的、有未知参数的函数。红色的曲线可以看作是一个常数再加上一群 Hard Sigmoid 函数。Hard Sigmoid 函数的特性是当输入的值,当 x 轴的值小于某一个阈值(某个定值)的时候,大于另外一个定值阈值的时候,中间有一个斜坡。所以它是先水平的,再斜坡,再水平的。所以红色的线可以看作是一个常数项加一大堆的蓝色函数(Hard Sigmoid)。常数项设成红色的线跟 x 轴的交点一样大。常数项怎么加上蓝色函数后,变成红色的这一条线? 蓝线 1 函数斜坡的起点,设在红色函数的起始的地方,第 2 个斜坡的终点设在第一个转角处,让第 1 个蓝色函数的斜坡和红色函数的斜坡的斜率是一样的,这个时候把 0+1 就可以得到红色曲线左侧的线段。接下来,再加第 2 个蓝色的函数,所以第2 个蓝色函数的斜坡就在红色函数的第一个转折点到第 2 个转折点之间,让第 2 个蓝色函数的斜率跟红色函数的斜率一样,这个时候把 0+1+2,就可以得到红色函数左侧和中间的线段。接下来第 3 个部分,第 2 个转折点之后的部分,就加第 3 个蓝色的函数,第 3 个蓝色的函数坡度的起始点设的跟红色函数转折点一样,蓝色函数的斜率设的跟红色函数斜率一样,接下来把 0+1+2+3 全部加起来,就得到完整红色的线。
所以红色线,即分段线性曲线(piecewise linear curve)可以看作是一个常数,再加上一堆蓝色的函数。分段线性曲线可以用常数项加一大堆的蓝色函数组合出来,只是用的蓝色函数不一定一样。要有很多不同的蓝色函数,加上一个常数以后就可以组出这些分段线性曲线。如果分段线性曲线越复杂,转折的点越多,所需的蓝色函数就越多。
也许要考虑的 x 跟 y 的关系不是分段线性曲线,而是如图 1.9 所示的曲线。可以在这样的曲线上面,先取一些点,再把这些点点起来,变成一个分段线性曲线。而这个分段线性曲线跟原来的曲线,它会非常接近,如果点取的够多或点取的位置适当,分段线性曲线就可以逼近这一个连续的曲线,就可以逼近有角度的、有弧度的这一条曲线。 所以可以用分段线性曲线去逼近任何的连续的曲线,而每个分段线性曲线都可以用一大堆蓝色的函数组合起来。也就是说,只要有足够的蓝色函数把它加起来,就可以变成任何连续的曲线。
假设 x 跟 y 的关系非常复杂也没关系,就想办法写一个带有未知数的函数。直接写 HardSigmoid 不是很容易,但是可以用一条曲线来理解它,用 Sigmoid 函数来逼近 Hard Sigmoid,如图 1.10 所示。Sigmoid 函数的表达式为
y
=
c
1
1
+
e
x
p
(
−
b
−
ω
x
1
)
(1)
y=c\frac{1}{1+exp(-b-\omega x_1)} \tag{1}
y=c1+exp(−b−ωx1)1(1)
所以可以用这样子的一个函数逼近这一个蓝色的函数,即 Sigmoid 函数,Sigmoid 函数就是 S 型的函数。因为它长得是有点像是 S 型,所以叫它 Sigmoid 函数。
此外,我们可以不只用一个特征 x 1 x_1 x1,可以用多个特征代入不同的 c , b , ω c,b,\omega c,b,ω,组合出各种不同的函数,从而得到更有灵活性(flexibility)的函数,如图 1.13 所示。用 j j j来代表特征的编号。如果要考虑前 28 天, j j j就是 1 到 28。
二、模型变形
Hard Sigmoid 还可以看作是两个修正线性单元(Rectified Linear Unit,ReLU的加总,ReLU的图像有一个水平的线,走到某个地方有一个转折的点,变成一个斜坡,其对应的公式为
c
∗
m
a
x
(
0
,
b
+
ω
x
1
)
(2)
c*max(0,b+\omega x_1) \tag{2}
c∗max(0,b+ωx1)(2)
如图 1.19 所示,2 个ReLU才能够合成一个Hard Sigmoid。要合成 i i i个 Hard Sigmoid,需要 i i i个Sigmoid,如果 ReLU要做到一样的事情,则需要 2 i 2i 2i个ReLU,因为2个ReLU合起来才是一个Hard Sigmoid。因此表示一个Hard的Sigmoid不是只有一种做法。在机器学习里面,Sigmoid或ReLU 称为激活函数(activation function。
如图 1.24 所示,Sigmoid 或 ReLU 称为神经元(neuron),很多的神经元称为神经网络(neural network)。人脑中就是有很多神经元,很多神经元串起来就是一个神经网络,跟人脑是一样的。人工智能就是在模拟人脑。神经网络不是新的技术,80、90 年代就已经用过了,后来为了要重振神经网络的雄风,所以需要新的名字。每一排称为一层,称为隐藏层(hiddenlayer),很多的隐藏层就“深”,这套技术称为深度学习。所以人们把神经网络越叠越多越叠越深,2012 年的 AlexNet 有 8 层它的错误率是 16.4%,两年之后 VGG 有 19 层,错误率在图像识别上进步到 7.3 %。这都是在图像识别上一个基准的数据库(ImageNet)上面的结果,后来 GoogleNet 有 22 层,错误率降到 6.7%。而**残差网络(Residual Network,ResNet)**有 152 层,错误率降到 3.57%。