深度学习是指深度神经网络的应用。简单来说,神经网络由多个神经元组成(可由下面的公式表示),而深度神经网络则是由多个神经网络层堆叠而成。
x 是输入, W 是神经网络的参数,也称为权重。神经网络的学习过程就是不断更新参数 W 的过程,也就是所谓的训练过程。训练好的模型可以用于推理和预测未知数据。 f 是激活函数(Activation Function)。 W 与 x 相乘只是一个线性变换,即使多个乘法叠加起来,仍然是线性变换,或者说没有激活函数的多层网络会退化成一个单层线性模型。激活函数在神经网络中引入了非线性因素,使得多层神经网络理论上可以拟合任何输入数据到输出数据的模式。从模拟生物神经元的角度看,激活函数的作用是使得有些神经元被激活,而其他神经元被抑制。常见的激活函数有Sigmoid和ReLU。2.2节中我们对Sigmoid函数进行了可视化,ReLU的公式为 f ( x ) = max(0, x )。
图2.5展示了一种最简单的神经网络结构:将 z [ n ] = W [ n ] · a [ n -1] + b [ n ] 和 a [ n ] = f ( z [ n ] )进行堆叠,前一层的输出 a [ n -1] 作为下一层的输入。这种网络又被称为前馈神经网络(Feedforward Neural Network,FNN),或者多层感知机(Multilayer Perceptron,MLP)。在多层网络中,为了区分不同的层,用方括号上标来表示,例如 a [1] 是第一层的输出, W [1] 是第一层的参数。
图2.5 神经网络的前向传播
这是神经网络前向传播的过程:假设输入
x
是一个3维的向量,其中的每个圆圈表示向量的一个元素(即一个标量值)。图中同时演示了第一层的
a
[1]
向量化计算方式,以及
的标量化计算方式。在实际应用中,通常需要使用现代处理器的向量化引擎来完成这些计算。
神经网络的训练过程就是不断更新各层的 W 和 b 。
首先,以某种随机初始化方式初始化各层的 W 和 b 。例如,可以初始化为正态分布的小数。
接着,确定一个损失函数(Loss Function)
L
。损失函数计算了神经网络预测值
与真实值之间的差距,训练的目标就是让损失函数尽可能小。例如,在预测房价的案例中,我们使用误差的平方(Squared Error)作为损失函数。某个样本的损失函数为
。
然后,计算损失函数对每层参数的导数。损失函数
L
关于第
l
层的
W
[
l
]
和
导数为
和
,再按照下面的公式更新
和
:
其中, α 是学习率,即参数更新的速度。如果学习率太大,可能会导致振荡并且不容易收敛;如果学习率太小,收敛速度会过慢。
各层的导数也被称为梯度,参数沿着梯度的反方向下降,这种方法被称为梯度下降法。在计算各层的导数时,通常是从最后的损失函数开始,逐层向前计算梯度。即先计算第 n 层的梯度,得到第 n 层的梯度后,再根据链式法则计算第 n -1层的梯度。图2.6展示了神经网络的反向传播过程。
图2.6 神经网络的反向传播
在神经网络训练过程中,有一些需要人为设定的参数,这些参数不能通过模型的反向传播算法来自动学习,而需要手动选择和调整。这些参数又被称为超参数(Hyperparameter)。超参数的选择通常基于经验或反复试验。以下是一些超参数:
● 学习率:即刚才提到的 α ,控制每次更新参数的步长。
● 网络结构:包括模型的层数、每层的神经元数量、激活函数的选择等。不同的网络结构在不同任务上可能表现出不同的性能。
神经网络训练通常包括以下三个步骤:
● 一次前向传播。
● 一次反向传播。
● 一次更新模型权重。
图2.7展示了在神经网络的第 i 层进行训练时,以上三个步骤的输入和输出。
图2.7 前向传播、反向传播和更新模型权重的输入和输出
● 输入:在前向传播过程中,输入有两部分:第 i -1层的输出 a [i-1] 和第 i 层的模型权重 W [ i ] 以及偏置 b [ i ] 。
● 输出:又被称为激活(Activation),是权重与输入相乘之后,经过激活函数得到的结果。
● 输入:在反向传播过程中,输入有三部分:第
i
层的输出
a
[
i
]
、第
i
层的模型权重
W
[
i
]
和偏置
b
[
i
]
,以及损失函数
L
对第
i
层输出的导数
。
● 输出:根据链式法则,可以求出损失函数对第
i
层模型权重的导数
和
,也就是梯度。
得到梯度后,需要沿着梯度下降的方向更新模型权重。如果使用最简单的梯度下降法,优化器直接在模型原有权重基础上做减法,不需要额外保存状态,例如
。
复杂一点的优化器,比如Adam [4] ,在梯度下降时引入了动量的概念。动量是梯度的指数移动平均,需要维护一个梯度的移动平均矩阵,这个矩阵就是优化器的状态。因此,优化器状态、原来的模型权重和梯度共同作为输入,可以得到更新后的模型权重。至此,才能完成一轮模型的训练。
对于一个神经网络,其训练过程如图2.8所示。图2.8演示了3层神经网络,前向过程用FWD表示,反向过程用BWD表示。
图2.8 前向传播(图中用FWD表示)、反向传播(图中用BWD表示)和更新模型权重
模型训练需要前向传播和反向传播,而模型推理只需要前向传播,只不过输入层换成了需要预测的 x 。