3.1多层感知机模型
假设当前我们需要进行一个分类任务,通过一个函数关系式将两类点进行区分,第一类点为(0,0)、(1,1),第二类点为(0,1)、(1,0),此时我们发现仅仅通过线性关系式已经无法完成此类分类任务:
为解决此类问题,一种多层感知机模型便被提出,即通过在输入层和输出层间加一层或多层隐单元来实现不同样本点的分类任务,该模型即为我们之前所提到的多层前馈神经网络:
通过增加隐含层的节点数量,实现多维空间平面的构造,来实现不同样本点的分类任务,更多层感知器网络,可识别更为复杂的图形。其中,多层感知机有着以下定理:
定理1 若隐层节点(单元)可任意设置,用三层阈值节点的网络,可以实现任意的二值逻辑函数。
定理2 若隐层节点(单元)可任意设置,用三层S型非线性特性节点的网络,可以一致逼近紧集上的连续函数或按范数逼近紧集上的平方可积函数。
简而言之,对于我们平时遇到的任意二维空间的坐标点分类任务,可以通过三个节点的隐含层神经网络完成分类。下面,对神经网络调整权重的方法—梯度下降法进行介绍。
在正式开始介绍前,有必要先对前向传播、误差反传两个过程进行简要的介绍:
前向传播(前馈运算):
无论训练模型时计算误差还是模型训练完毕后获得样本预测,卷积神经网络的前馈运算都较直观。同样以图像分类任务为例,假设网络已训练完毕,即其中参数ω1, . . . , ωL-1 已收敛到某最优解,此时可用此网络进行图像类别预测。预测过程实际就是一次网络的前馈运算:将测试集图像作为网络输入x1 送进网络,之后经过第一层操作 ω1 可得 x2,依此下去……直至输出xL ∈ RC。其中, xL 是与真实标记同维度的向量。
在利用交叉墒损失函数训练后得到的网络中,xL 的每一维可表示 x1 分别隶属 C 个类别的后验概率。
这样,可以通过下式得到输入图像x1对应的预测标记:
反向传播(反馈运算):
深度学习模型采用随机梯度下降法和误差反向传播进行模型参数更新。
批处理的随机梯度下降法在训练模型阶段随机选取 n 个样本作为一批样本,先通过前馈运算得到预测并计算其误差,后通过梯度下降法更新参数,梯度从后往前逐层反馈,直至更新到网络的第一层参数,这样的一个参数更新过程称为一个“批处理过程”。不同批处理之间按照无放回抽样遍历所有训练集样本,遍历一次训练样本称为“一轮”(epoch)。在进行反馈运算的过程中,误差通过导数层层传递,对每个参数更新起到了作用,因此这一过程也成为误差的反向传递。
3.2梯度下降法
梯度的本意是一个向量(矢量),表示某一函数在该点处的方向导数沿着该方向取得最大值,即函数在该点处沿着该方向(此梯度的方向)变化最快,变化率最大(为该梯度的模)。在高等数学中,我们已经学习了偏导数,能够对任意参数进行偏导,来获得该参数变化最快的方向向量。在神经网络中,我们处理问题的本质是为了找到一个最优的损失函数f(x),使得其在预测问题上有着最小的误差:
然而在每次训练中,为了使得我们的损失函数能够以下降的方向使得误差逐步减小,我们就需要找到该函数此时的“梯度”在哪个方向。我们可以将这类问题视为一个由多个参数构成的“超平面”的下山问题,通过求得该点的梯度,乘以对应的步长,使得我们一步步接近损失函数的最低点,获得最优的分类结果:
明确了我们的任务,下来我们就需要求解每个参数的偏导数,以找出最大梯度方向:
层隐含层的神经网络为例,现在我们输入1、0,完成了一次前向传播,计算出了输出0.84以及损失0.0120,现在我们需要根据损失函数的结果完成参数的更新。
首先我们先更新参数b3,根据微积分中链式求导法则,我们需要先求出c对输出y的导数,然后传递到z3,最后传递到b3参数。
损失函数为输出与结果的差的二范数的形式,其定义式如下:
完成第一步求导,得到c对y的导数形式,带入前向传播的结果,求得导数值为-0.16
下面求解输出对z3的导数,在z3到输出的过程中,通过了sigmoid激活函数来规范了输出,其关系式如下:
求导,带入参数,得到结果为0.13:
最后,求解z3对b3的参数,z3的函数为神经网络中对应权重乘积的形式,其求导过程及结果如下:
得到了所有偏导数的结果,根据链式法则我们就可以得到c对b3的偏导数,即梯度:
同理,我们可以求得所有参数的梯度数值,过程不再给出,结果如下:
将所有的梯度乘以对应的步长,我们就得到每个参数的更新量,完成了一次梯度下降参数更新。梯度下降法能够保障每次前进的方向都是向着误差讲的方向发展,神经网络通过不断的执行梯度下降来实现参数优化及误差最小化,实现样本的学习。
在具备了模型及参数更新方法后,我们就可以搭建自己的神经网络了,随后,我们将会对基于这一原理的卷积神经网络进行学习,了解其基本架构及学习原理。