1.模型的复杂表示
在上一节中("众里寻他千百度"-深度学习的本质),讨论了如何通过简单的回归模型预测未来一天的youtube频道的观看人数。事实上,在上一节的案例介绍中,使用的是线性回归模型。现在,考虑更复杂的情况。因为线性回归模型的特点是只能简单的认为前一天的观看人数和后一天的观看人数之间是简单的直线关系,但是在现实的情况中,可能二者之间的关系比较复杂,可能呈现出先上升后下降再上升的态势。因此,需要考虑如何表示复杂的曲线,来增强模型的拟合能力。
图1 复杂曲线的表示_1
在上图中,红色的曲线可以看成由三段直线组成,在机器学习中称为分段直线(Picese Linear Curve)。在图1中可以通过常数项(Constant)和多个蓝色曲线的总和来表示红色的曲线,其中,“0号位”的直线代表常数项。由于红色曲线左侧的直线与“1号位”中间的直线斜率相等,因此,可以红色曲线左侧的直线可以通过“0号位”的直线代表常数项与“1号位”分段直线相加来表示。依此类推,红色曲线中间的直线可以通过“0号位”的直线代表常数项与“2号位”分段直线相加来表示;红色曲线右侧的直线可以通过“0号位”的直线代表常数项与“3号位”分段直线相加来表示。如此,便证明了可以通过常数项和多个蓝色曲线的总和来表示红色的曲线。
图2 复杂曲线的表示_2
前一天的观看人数和后一天的观看人数之间的关系可能并不是分线段直线的表示形式,可能是在图2中黑色的连续曲线(Continuous Curve)的形式。经过进一步分析发现,在黑色曲线上标记合适点(图2中绿色的点)或者标记足够的点,便可以使用分线段的直线来近似表示黑色的连续曲线。
由于分线段的直线可以使用常数项和多个蓝色曲线表示,这就等价于使用足够多的蓝色曲线可以近似表示黑色的连续曲线。因此,复杂模型表示问题的本质在于如何寻找蓝色曲线的函数表达式。
如图3所示,可以通过sigmoid函数曲线(虚线)来代替蓝色的曲线。在机器学习中,蓝色的曲线也被称为Hard Sigmoid。
图3 sigmoid曲线
(1)
Sigmoid函数的函数表达式见公式(1),函数中包括了3个参数c、b和w。其中,c决定了Sigmoid曲线的高度,b决定了Sigmoid曲线变化的快慢,w决定了Sigmoid曲线的坡度。
综上所述,可以使用三个不同的Sigmoid函数之和加上一个常数项来近似表示红色的曲线,见公式(2)。在式(2)中,i代表不同的Sigmoid函数,本例中i取整数1至3。
(2)
2.多元特征的引入
未来一天的观看人数可能不仅仅只和前一天的观看人数有关,可能还和前几天的观看人数都有联系。在这种情况下可以将多元的情况引入,模型的表现会更好。由此,可以将公式(2)进一步拓展为公式(3)。
在公式(3)中,下标j表示输入x的编号,如果人为未来一天的观看人数与前三天的观看人数都有关系,j的取值即为1至3。
现在假定i和j的取值均为整数1至3,进一步讨论公式(3)的表达形式。假设,Sigmoid函数里的表达式是一个整体,用符号r表示,r和x之间的关系见公式(4)。
(4) 可以将其进一步表示成矩阵的形式见式(5),式(5)的简写表达为式(6)。
(5)
(6)
在式(6)中,,,为向量,为矩阵。
将向量r代入Sigmoid函数,可得向量a,见公式(7)。
(7) 由于式(3)本质上为3个Sigmoid函数之和,只是权重c不同,类似于用权重c加权,再加上常数项b。因此式(3)可以写成和作点积,再加上常数项b的形式,见公式(8)。 (8)
3.神经网络的形成
如果将公式(6)值公式(8),通过符号学派的符号表示,可以发现其实当前的模型已经形成了一个“网络”形状的结构,见图4。在图4中,最右侧的黄色方块表示模型的输入即x,也被称为特征(Feature)。与输入直接相连的箭头表示权重w(Weight)和输入对应的x相乘。输入箭头指向的浅蓝色方块中是“+”号,同时代表偏差(bias)的绿色方块指向浅蓝色方块,表示权重和输入相乘的结果与偏差相加。蓝色的球形表示Sigmoid函数,浅蓝色方块的箭头又指向蓝色球形,表示经浅蓝色方块得到的结果r代入Sigmoid函数。经过蓝色的球形之后,得到黄色的方块a。依此类推,a和权重c相乘,加上常数项最终得到结果y。
图4 复杂模型的符号表示
在深度学习中,将蓝色的球形,也就是这里的Sigmoid函数,称为激活函数(Activation Function)。由于图4所表示的“网状结构”与人脑的神经元十分类似,因此激活函数也被称为神经元(Neruon)。图4中,一排的神经元(3个Sigmoid)被称为隐藏层(Hidden Layer)。隐含层的个数以及每层神经元的个数均为超参数,需要依据经验和专业领域的认知确定。这样,图4便构成了一个神经网络(Nerual Network)。
激活函数不止Sigmoid函数一种。除了Sigmoid之外,常用的激活函数还有Relu函数(Rectified Linear Unit),其函数表达式见公式(9)。
(9)
公式(9)所表达的含义是,取0和某直线的最大值,并乘以权重C,调节曲线的高度。事实上,图1中的深蓝色曲线就是由两个Relu函数曲线相加得到的,见图5。至于激活函数的确定也是一个超参数,需要训练模型之前事先给定。
图5 蓝色曲线的Relu表示
4.网络的训练过程
神经网络的训练过程(Train)和上一节中介绍的回归模型的训练步骤基本一致,包括确定包含未知参数的函数、定义损失函数、优化参数三个步骤。
根据公式(6)至公式(8),不难发现神经网络模型打的未知参数包括、、和b。由此,确定了包含未知参数的函数。
损失函数的定义与上一节一样,将样本估计值与实际值之间的均方误差作为损失函数,这里即为。因此,优化参数的过程即为寻找一组最优的参数使得损失函数最小,将神经网络模型中的所有参数按照顺序排成一个列向量,通过梯度下降算法,可得参数的一次更新(Update)过程见公式(10)。
(10)
公式(10)也可通过矩阵向量表示,记为公式(11)。
(11)
图6 神经网络的训练
在实际的训练过程中,每次更新参数不会使用所有的训练数据,而是将训练数据划分多个批次(Batch)进行训练,如图6所示。在图6中,假设训练资料的样本总个数为N,每个批次包含样本个数为B,每个批次中的样本随机划分。第一个批次的损失记为,第一次参数更新即用减去倍的对的梯度得到,见公式(12)。依此类推,可以对所有的批次进行参数的更新。当参数优化经历了所有批次之后,模型训练经历了一个完整的回合(Epoch)。每个批次的样本个数(Batch Size)以及训练的回合数(Epoch)也是超参数。
(12)
5.从神经网络到深度学习
图7 深度学习的符号表示
在上文中,建立了一个带有1个隐藏层的神经网络模型。随着隐藏层的不断增加(在图7的示例中,神经网络模型包含了两个隐藏层。),隐藏层的深度不断变深,便得到了深度学习(Deep Learning)模型。因此,从网络结构的角度来看,深度学习之所以称之为“深”的根本原因是隐藏层数变深。伴随着算力和数据量不断革新,深度学习模型也揭开了“山外有山比山高”的序幕。
图8 深度学习模型的演化
2012年,推出的AlexNet模型有8层隐藏层,把图像分类(基准资料)的错误率为16.4%;2014年,推出的VGG模型有19层隐藏层,图像分类的错误率降低至7.3%;2014年,推出的GoogleNet有22层隐藏层,图像分类的错误率降低至6.7%;到了2015年,推出的Residual Net将隐含层的个数迅速增加至152层,图像分类的错误率降低至3.57%。深度学习模型的演化过程真正揭示了“山外有山比山高”的含义。
更多学习资料请关注我的微信公众号白泽图鉴获取!!!