深度学习之人工神经网络学习

人工神经网络就是把这样的人工神经元互联成一个网络:一个神经元的输出作为另一个神经元的输入。神经网络可以有多种多样的拓扑结构。其中最简单的就是「多层全连接前向神经网络」。它的输入连接到网络第一层的每个神经元。前一层的每个神经元的输出连接到下一层每个神经元的输入。最后一层神经元的输出就是整个神经网络的输出。如下图,是一个三层神经网络。它接受 10 个输入,也就是一个 10 元向量。第一层和第二层各有 12 个神经元。最后一层有 6 个神经元。就是说这个神经网络输出一个 6 元向量。

 整个神经网络的计算可以用矩阵式给出。我们给出人工神经网络单层的式子。每层的神经元个数不一样,输入/输出维度也就不一样,计算式中的矩阵和向量的行列数也就不一样,但形式是一致的。假设我们考虑的这一层是第 i 层。它接受 m 个输入,拥有 n 个神经元(n 个输出),那么这一层的计算如下式所示:

 上标 i 表示第 i 层。是输出向量,n 元,因为第 i 层有 n 个神经元。第 i 层的输入,即第 i-1 层的输出,是 m 元向量。权值矩阵 W 是 n x m 矩阵:n 个神经元,每个神经元有 m 个权值。W 乘以第 i-1 层输出的 m 向量,得到一个 n 向量,加上 n 元偏置向量 b,再对结果的每一个元素施以激活函数 f,最终得到第 i 层的 n 元输出向量。可以看出整个神经网络其实就是一个向量到向量的函数。想要得到有用的神经网络,我们需要使用训练集,将训练集的输入送给神经网络,然后计算输出与正确输出的(向量)差的模平方(自己与自己内积),再把全部n个样本的差的模平方求平均,得到e:

e 称为均方误差 mse。e 越小则神经网络的输出与正确输出越接近。神经网络的行为就与想要的行为越接近。目标是使 e 变小。在这里 e 可以看做是全体权值和偏置值的一个函数。这就成为了一个无约束优化问题。如果能找到一个全局最小点,e 值在可接受的范围内,就可以认为这个神经网络训练好了。它能够很好地拟合目标函数。这里待优化的函数也可以是 mse 外的其他函数,统称 Cost Function,都可以用 e 表示。

经典的神经网络的训练算法是反向传播算法(Back Propagation, BP)。BP 算法属于优化理论中的梯度下降法(Gradient Descend)。将误差 e 作为全部权值和全部偏置值的函数。算法的目的是在自变量空间内找到 e 的全局极小点。

首先随机初始化全体权值和全体偏置值,之后在自变量空间中沿误差函数 e 在该点的梯度方向的反方向(该方向上方向导数最小,函数值下降最快)前进一个步长。步长称为学习速率(Learning Rate, LR)。如此反复迭代,最终(至少是期望)解运动到误差曲面的全局最小点。

对于一个稍复杂的神经网络,e 对权值和偏置值的函数将是一个非常复杂的函数。求梯度需要计算该函数对每一个权值和偏置值的偏导数。所幸的是,每一个权值或偏置值的偏导数公式不会因为这个权值或偏置值距离输出层越远而越复杂。计算过程中有一个中间量,每层的权值和偏置值的偏导数都可根据后一层的以统一形式计算出来。每层再把计算过程中产生的传递给前一层。这就是「反向传播」名称的由来——沿着反向向前传。这与计算网络输出时,计算结果向后传相反。如此可逐层计算出全部权值和偏置值的偏导数,得到梯度。正是反向传播能够让我们训练神经网络「深处」的参数,这就是「Deep Learning」的含义。

梯度下降法有很多变体。通过调整学习速率 LR 可以提高收敛速度;通过增加冲量可以避免解陷入局部最优点。还可以每一次不计算全部样本的 e,而是随机取一部分样本,根据它们的 e 更新权值。这样可以减少计算量。梯度下降是基于误差函数的一阶性质。还有其他方法基于二阶性质进行优化,比如共轭法、牛顿法等等。优化作为一门应用数学学科,是机器学习的一个重要理论基础,在理论和实现上均有众多结论和方法。

猜你喜欢

转载自blog.csdn.net/qq_33273962/article/details/83536877
今日推荐