把一个训练样本输入给神经网络,计算输出与正确输出的(向量)差的模平方(自己与自己的内积)。再把全部 n 个样本的差的模平方求平均,得到 e:
e 称为均方误差 mse。e 越小则神经网络的输出与正确输出越接近。神经网络的行为就与想要的行为越接近。 目标是使 e 变小。在这里 e 可以看做是全体权值和偏置值的一个函数。这就成为了一个无约束优化问题。如果能找到一个全局最小点,e 值在可接受的范围内,就可以认为这个神经网络训练好了。它能够很好地拟合目标函数。这里待优化的函数也可以是 mse 外的其他函数,统称 Cost Function,都可以用 e 表示。 经典的神经网络的训练算法是反向传播算法(BP,Back Propagation)。BP 算法属于优化理论中的梯度下降法(Gradient Descend)。将误差 e 作为全部权值 W 和全部偏置值 B的函数。算法的目的是在自变量空间内找到 e 的全局极小点。 首先随机初始化全体权值 W和全体偏置值 B,之后在自变量空间中沿误差函数 e 在该点的梯度方向的反方向(该方向上方向导数最小,函数值下降最快)前进一个步长。步长称为学习速率(Learning Rate,η)。如此反复迭代,最终(至少是期望)解运动到误差曲面的全局最小点。 下图是用 matlab训练一个极简单的神经网络。它只有单输入单输出。输入层有两个神经元,输出层有一个神经元。整个网络有4个权值加3个偏置。图中展示了固定其他权值,直播,只把第一层第一个神经元的权值和偏置做自变量时候的 mse 曲面,以及随着算法迭代,解的运动轨迹。
图9 最终算法没有收敛到全局最优解(红+)。但是解已经运动到了一个峡谷的底部。由于底部过于平缓,解“走不动”了。所得解比最优也差不到哪去。 对于一个稍复杂的神经网络,e 对 W和 B的函数将是一个非常复杂的函数。求梯度需要计算该函数对每一个权值和偏置值的偏导数。所幸的是,每一个权值或偏置值的偏导数公式不会因为这个权值或偏置值距离输出层越远而越复杂。计算过程中有一个中间量,每层的权值和偏置值的偏导数都可根据后一层的以统一形式计算出来。每层再把计算过程中产生的传递给前一层。这就是“反向传播”名称的由来——沿着反向向前传。这与计算网络输出时,计算结果向后传相反。如此可逐层计算出全部权值和偏置值的偏导数,得到梯度。具体推导这里不给出了,可以参考[1]第八章和[2]第十一章。正是反向传播能够让我们训练神经网络“深处”的参数,这就是“Deep Learning”的含义。 梯度下降法有很多变体。通过调整步长 η 可以提高收敛速度;通过增加冲量可以避免解陷入局部最优点。还可以每一次不计算全部样本的 mse,而是随机取一部分样本,根据它们的 mse 更新权值。这样可以减少计算量。梯度下降是基于误差函数的一阶性质。还有其他方法基于二阶性质进行优化,比如共轭法、牛顿法等等。优化作为一门应用数学学科,是机器学习的一个重要理论基础,在理论和实现上均有众多结论和方法。参考[1]。 三、卷积神经网络 现在把卷积滤波器和神经网络两个思想结合起来。卷积滤波器无非就是一套权值。而神经网络也可以有(除全连接外的)其它拓扑结构。可以构造如下图所示意的神经网络: 图10 该神经网络接受个输入,产生个输出。图中左边的平面包含 n×n 个格子,每个格子中是一个[0,255]的整数值。它就是输入图像,也是这个神经网络的输入。右边的平面也是 n×n 个格子,每个格子是一个神经元。每个神经元根据二维位置关系连接到输入上它周围 3×3 范围内的值。每个连接有一个权值。所有神经元都如此连接(图中只画了一个,出了输入图像边缘的连接就认为连接到常数 0)。右边层的个神经元的输出就是该神经网络的输出。 (责任编辑:本港台直播) |