现在,我们把上述计算 的四个式子写到一个矩阵里面,每个式子作为矩阵的一行,就可以利用矩阵来表
示它们的计算了。令
带入前面的一组式子,得到
在式2中, 是激活函数,在本例中是 函数; 是某一层的权重矩阵; 是某层的输入向量; 是某层的输出
向量。式2说明神经网络的每一层的作用实际上就是先将输入向量左乘一个数组进行线性变换,得到一个新的向量,
然后再对这个向量逐元素应用一个激活函数。
每一层的算法都是一样的。比如,对于包含一个输入层,一个输出层和三个隐藏层的神经网络,我们假设其权重矩
阵分别为 ,每个隐藏层的输出分别是 ,神经网络的输入为 ,神经网络的输入为 ,如下图
所示:
则每一层的输出向量的计算可以表示为:
这就是神经网络输出值的计算方法。
神经网络的训练
现在,我们需要知道一个神经网络的每个连接上的权值是如何得到的。我们可以说神经网络是一个模型,那么这些
权值就是模型的参数,也就是模型要学习的东西。然而,一个神经网络的连接方式、网络的层数、每层的节点数这
些参数,则不是学习出来的,而是人为事先设置的。对于这些人为设置的参数,我们称之为超参数(Hyper-
Parameters)。
接下来,我们将要介绍神经网络的训练算法:反向传播算法。
反向传播算法(Back Propagation)
我们首先直观的介绍反向传播算法,最后再来介绍这个算法的推导。当然读者也可以完全跳过推导部分,因为即使
不知道如何推导,也不影响你写出来一个神经网络的训练代码。事实上,现在神经网络成熟的开源实现多如牛毛,
除了练手之外,你可能都没有机会需要去写一个神经网络。