1 引例
经过前面在《跟我一起机器学习》中一系列的介绍,我们终于进入到了深度学习。那什么又是深度学习呢?以及我们为什么需要深度学习呢?要想弄清楚这两个问题,我们还得从机器学习的入门 线性回归 说起。如果之前一点没有接触过机器学习,并且也不打算研究机器学习,那么请至少阅读 《跟我一起机器学习》 中前三部分的内容,即线性回归、逻辑回归和模型的改善与泛化。
1.1 房价预测
在前面介绍线性回归的时候,我们首先举了这么一个例子:假设现在我们现在有一批房屋信息(面积、卧室数量等4个特征)与房价的数据集,现在我们需要用 x 1 , x 2 , x 3 , x 4 x_1,x_2,x_3,x_4 x1,x2,x3,x4这四个特征对房价 y ^ \hat{y} y^进行预测。而解决这个问题的办法就是通过建立一个线性回归模型,然后通过训练数据训练得到模型参数。因此,对于线性回归这么一个模型,我们还可以通过如下示意图进行表示:
其中
x
1
,
x
2
,
x
3
,
x
4
x_1,x_2,x_3,x_4
x1,x2,x3,x4表示输入的4项房屋信息特征,
w
1
,
w
2
,
w
3
,
w
4
w_1,w_2,w_3,w_4
w1,w2,w3,w4表示每个特征对应的权重参数,因此输出
y
^
\hat{y}
y^就可以表示为:
y
^
=
w
1
x
1
+
w
2
x
2
+
w
3
x
3
+
w
4
x
4
+
b
(1)
\hat{y}= w_1x_1+w_2x_2+w_3x_3+w_4x_4+b\tag{1}
y^=w1x1+w2x2+w3x3+w4x4+b(1)
1.2 梯形面积预测
在进一步介绍多项式线性回归时,我们又举了这么一个例子:假设现在我们手上有一系列如图2所示的梯形块儿,且其上底与高相同。现在需要我们建立一个模型根据输入 x 1 , x 2 x_1,x_2 x1,x2,然后预测输出其面积 y y y(假设我们并不知道面积计算公式)。那我们该怎么做呢?
很显然,我们直接建立一个线性回归模型,以 x 1 , x 2 x_1,x_2 x1,x2为输入也能训练得到一个预测模型,但这样得到的模型不会太准确。因此当时我们建模时除了以 x 1 , x 2 x_1,x_2 x1,x2作为特征外,我们还人为构造了 x 1 x 2 , x 1 2 , x 2 2 x_1x_2,x^2_1,x^2_2 x1x2,x12,x22这三个特征。同时,后三个特征也存在着一定意义上的可解释性。因此,对于这么一个模型,我们也可以通过类似图1的方式进行表示:
其中左边绿色圆圈表示5个特征的输入,
w
1
,
w
2
,
w
3
,
w
4
,
w
5
w_1,w_2,w_3,w_4,w_5
w1,w2,w3,w4,w5分别表示每个特征所对应的权重,右边蓝色圆圈表示最终的预测输出
y
^
\hat{y}
y^,因此
y
^
\hat{y}
y^可以表示为:
y
^
=
w
1
x
1
+
w
2
x
2
+
w
3
(
x
1
x
2
)
+
w
4
x
1
2
+
w
5
x
2
2
+
b
(2)
\hat{y}=w_1x_1+w_2x_2+w_3(x_1x_2)+w_4x^2_1+w_5x^2_2+b\tag{2}
y^=w1x1+w2x2+w3(x1x2)+w4x12+w5x22+b(2)
如果对于**这篇文章**有印象的话,应该还记得最后求解得到的参数分别为:
w
3
=
w
4
=
0.5
w_3=w_4=0.5
w3=w4=0.5,其它均为0。因此可以得出:
y
^
=
1
2
x
1
x
2
+
1
2
x
1
2
=
1
2
(
x
1
+
x
2
)
x
1
(3)
\hat{y}=\frac{1}{2}x_1x_2+\frac{1}{2}x^2_1=\frac{1}{2}(x_1+x_2)x_1\tag{3}
y^=21x1x2+21x12=21(x1+x2)x1(3)
而式子
(
3
)
(3)
(3)也恰好是我们的梯形计算公式。并且同时我们可以发现,原始的
x
1
,
x
2
x_1,x_2
x1,x2并没有起任何作用,起作用的是构造后的特征。
1.3 从特征输入到特征提取
从图3可以看出,尽管我们是用了5个特征作为线性回归的特征输入进行建模,但是其原始特征依旧只有 x 1 , x 2 x_1,x_2 x1,x2这两个。而其余的三个只是我们人为构造的,其本质就相当于我们首先以人为的方式对原始输入进行了一次特征提取,然后再以提取后的特征来进行建模。那既然如此,我们可不可以通过图4的结构图来进行建模呢?
其中左边的绿色圆圈表示原始的输入特征,中间的白色圆圈表示对原始特征提取后的特征,右边蓝色圆圈表示最终的预测输出。
通过图4我们可以知道,该结构首先以
x
1
,
x
2
x_1,x_2
x1,x2为基础进行特征提取得到三个不同的特征,然后再以这三个特征来建立一个线性回归模型进行预测输出。因此,
y
^
\hat{y}
y^可以表示为:
a
=
w
1
x
1
+
w
2
x
2
+
b
1
b
=
w
3
x
1
+
w
4
x
2
+
b
2
c
=
w
5
x
1
+
w
6
x
2
+
b
3
y
^
=
w
7
a
+
w
8
b
+
w
9
c
+
b
4
(4)
\begin{aligned} a&=w_1x_1+w_2x_2+b_1\\[1ex] b&=w_3x_1+w_4x_2+b_2\\[1ex] c&=w_5x_1+w_6x_2+b_3\\[1ex] \hat{y}&=w_7a+w_8b+w_9c+b_4 \end{aligned}\tag{4}
abcy^=w1x1+w2x2+b1=w3x1+w4x2+b2=w5x1+w6x2+b3=w7a+w8b+w9c+b4(4)
那图4的方式和图3的方式差别在哪儿呢?差别倒是有很多,但最大的差别在于构造特征的可解释性。也就是说,人为构造的特征一般都具有一定的可解释性,知道每个特征的含义(例如上面的 x 1 x 2 , x 1 2 , x 2 2 x_1x_2,x^2_1,x^2_2 x1x2,x12,x22)。而以图4中的方式得到的特征在我们直观看来并不具有可解释性(例如上面 a , b , c a,b,c a,b,c这三个特征)。因此,在传统的机器学习中还专门有一个分支叫特征工程,即人为的根据原始特征来构造一系列可解释性的特征。
那说一千道一万,到底能不能用式子 ( 4 ) (4) (4)的描述来进行建模呢?很遗憾,并不能。为什么呢?
根据式子
(
4
)
(4)
(4)可得:
y
^
=
w
7
(
w
1
x
1
+
w
2
x
2
+
b
1
)
+
w
8
(
w
3
x
1
+
w
4
x
2
+
b
2
)
+
w
9
(
w
5
x
1
+
w
6
x
2
+
b
3
)
+
b
4
=
(
w
1
w
7
+
w
3
w
8
+
w
5
w
9
)
x
1
+
(
w
2
w
7
+
w
4
w
8
+
w
6
w
9
)
x
2
+
w
7
b
1
+
w
8
b
2
+
w
9
b
3
+
b
4
=
α
x
1
+
β
x
2
+
γ
(5)
\begin{aligned} \hat{y} &= w_7(w_1x_1+w_2x_2+b_1)+w_8(w_3x_1+w_4x_2+b_2)+w_9(w_5x_1+w_6x_2+b_3)+b_4\\[1ex] &=(w_1w_7+w_3w_8+w_5w_9)x_1+(w_2w_7+w_4w_8+w_6w_9)x_2+w_7b_1+w_8b_2+w_9b_3+b_4\\[1ex] &=\alpha x_1+\beta x_2+\gamma \end{aligned}\tag{5}
y^=w7(w1x1+w2x2+b1)+w8(w3x1+w4x2+b2)+w9(w5x1+w6x2+b3)+b4=(w1w7+w3w8+w5w9)x1+(w2w7+w4w8+w6w9)x2+w7b1+w8b2+w9b3+b4=αx1+βx2+γ(5)
由此可知,根据式子
(
4
)
(4)
(4)的描述,建模得到的仍旧只是一个以原始特征
x
1
,
x
2
x_1,x_2
x1,x2为输入的线性回归模型。那图4这么好的结构设想难道就这么放弃?当然不会,图4的结构并没错,错的是式子
(
4
)
(4)
(4)中的描述。
1.4 从线性输入到非线性输入
在上面我们说到,如果以式子 ( 4 ) (4) (4)中的描述进行建模,那么我们最终得到的仍旧只是一个简单的线性回归模型。其原因在于,通过式子 ( 4 ) (4) (4)我们得到的三个特征 a , b , c a,b,c a,b,c仅仅只是 x 1 , x 2 x_1,x_2 x1,x2之间在不同权重下的线性组合。也就是说 a , b , c a,b,c a,b,c都是三个线性的特征,如果再将其进行线性组合作为输出,那么整个模型仍旧只是原始特征的线性组合,并没有增加模型的复杂度。那该怎么办呢?既然一切都是“线性”的错,那么唯有抛弃“线性”引入非线性才是解决问题的正道。而所谓非线性也就是指通过一个非线性函数对原始输出进行一次变换。
如下所示,我们只需要对
a
,
b
,
c
a,b,c
a,b,c这三个特征再进行一次非线性变换,那么整个模型也就不可能再被化简为线性了,因此所有问题也将迎刃而解。
a
=
g
(
w
1
x
1
+
w
2
x
2
+
b
1
)
b
=
g
(
w
3
x
1
+
w
4
x
2
+
b
2
)
c
=
g
(
w
5
x
1
+
w
6
x
2
+
b
3
)
y
^
=
w
7
a
+
w
8
b
+
w
9
c
+
b
4
(6)
\begin{aligned} a&=g(w_1x_1+w_2x_2+b_1)\\[1ex] b&=g(w_3x_1+w_4x_2+b_2)\\[1ex] c&=g(w_5x_1+w_6x_2+b_3)\\[1ex] \hat{y} &=w_7a+w_8b+w_9c+b_4 \end{aligned}\tag{6}
abcy^=g(w1x1+w2x2+b1)=g(w3x1+w4x2+b2)=g(w5x1+w6x2+b3)=w7a+w8b+w9c+b4(6)
其中
g
(
⋅
)
g(\cdot)
g(⋅)为非线性的变换操作,称之为激活函数,例如常见的sigmoid函数。
2 深度神经网络
经过以上整个引例的介绍,其实已经在不知不觉中将大家代入到了**深度学习(Deep Learning)**的领域中。所谓深度学习,不过就是构建一个多层神经网络(Neural Network),然后进行参数的学习,而“深度”只是多层神经网络的一个别称而已。因此,你还可以将深度学习称作是多层神经网络学习。
2.1 单层神经网络
如图5所示的线性回归模型就是一个简单的神经网络结构图,其中每个圆圈表示一个神经元(Neural),输入层神经元的个数表示数据集的特征维度,输出层神经元的个数表示输出维度。并且尽管这里有输入层和输出层两层,但是按照惯例我们只将含有权重参数的输出层称为一个网络层,因此线性回归模型是一个单层的神经网络。
同时,需要注意的是在图5所示的网络结构中,输出层神经元和输入层的所有神经元都是完全连接。在深度学习中,如果某一层每个神经元的输入都完全依赖于上一层的所有神经元,那么我们就将该层称作是全连接层(Fully-connected Layer)或者是稠密层(Dense Layer)。例如图5中的输出层就是一个全连接层。
2.2 深度神经网络
所谓深度神经网络就是指网络网络层数大于2的神经网络,如图6所示便是一个简单的深度神经网络,其包含有三个全连接层。并且,我们将输入层与输出层之间的所有层都称为隐藏层或隐含层(Hidden Layer)。
同时,值得注意的是通过上面引例的介绍我们可以知道,对于输出层之前的所有层,我们都可以将其看成是一个特征提取的过程,而且越靠后的隐含层也就意味着提取得到的特征越抽象。当原始输入经过多层网络的特征提取后,我们就可以将提取得到的特征输入到最后一层进行相应的操作(分类或者回归等)。
3 总结
在这篇文章中,笔者以线性回归为引例,首先回顾了房价预测模型;接着进一步回顾了多项式回归模型;然后进一步回顾了人工特征提取的概念;最后顺理成章的引出了深度学习的概念。所谓深度学习就是指将原始特征通过多层神经网络进行抽象特征提取,然后再将提取得到的特征输入到最后一层进行回归或者分类的处理过程。 本次内容就到此结束,感谢您的阅读!
本次内容就到此结束,感谢您的阅读!如果你觉得上述内容对你有所帮助,欢迎关注并传播本公众号!若有任何疑问与建议,请添加笔者微信’nulls8’加群进行交流。青山不改,绿水长流,我们月来客栈见!
引用
[1]动手深度学习 https://zh.gluon.ai/