热身:一个基于矩阵的快速计算神经网络输出的方法

    我们先介绍一种符号来表示网络中的权重参数,这种表示法不会引发歧义。我们用来表示从第层的第个神经元到第层的第个神经元的连接的权重。例如,下图展示了从第二层的第四个神经元到第三层的第二个神经元的连接的权重:

    一开始你会觉得这种表示很麻烦,而且的确需要一些功夫来掌握它。但是经过一些努力,你就会发现这种表示简单而自然。这种表示的一个奇怪之处就是和下标的顺序。你可能会认为用表示输入神经元,用表示输出神经元更加合理。然而并不是这样的。在下面我会解释其中的原因。

    tikz17

    利用这些记法,第层第个神经元的激活值通过下面的式子与第层神经元的激活值联系起来(比较上一章节中的等式(4)和它附近的讨论内容):

    这里的求和针对的是第层的所有神经元。为了将这个式子写成矩阵形式,我们为每一层定义一个权重矩阵。矩阵的每一项就是连接到第层神经元的权重,这就是说,中第行第列的元素就是w^l<em>{jk}。相似地,我们为每一层定义一个偏置向量_。你大概可以猜到这是如何工作的——偏置向量的每一项就是的值,每一项对应第层中的一个神经元。最后,我们定义一个激活向量,其中的每一项就是激活值。

    就是说,向量化的函数是对向量中的每一个元素求平方。

    如果你记住了这些记法,那么等式(23)可以改写成下面简洁优美的矩阵形式:

    这个式子给我们对一层的激活值是如何与上一层中激活值产生关联的进行全局思考:我们仅仅将权重矩阵作用于上一层的激活值,然后加上偏置向量,最后用函数作用于这个结果,(就得到了本层的激活函数值)。相比于之前我们采用的神经元到神经元的视角,这种全局的视角通常更加简明和容易理解(涉及到更少的下标!)。你可以把它当做一种脱离下标魔咒,同时还能对正在进行的事情保持精确的阐释。这种表达式在实际操作中也非常有用,因为大多数矩阵库提供了更快的方式来实现矩阵乘法,向量加法以及函数向量化操作。实际上,上一章节中的代码隐式地使用了这种表达式来计算网络的行为。