《神经网络和深度学习》系列文章十:“热身”,一个基于矩阵的快速计算神经网络输出的方法

出处: Michael Nielsen的《Neural Network and Deep Learning》,本节译者:哈工大SCIR硕士生 李忠阳 (https://github.com/eecrazy)。


目录

1、使用神经网络识别手写数字

2、反向传播算法是如何工作的

  • 热身:一个基于矩阵的快速计算神经网络输出的方法
  • 关于损失函数的两个假设
  • Hadamard积
  • 反向传播背后的四个基本等式
  • 四个基本等式的证明(选读)
  • 反向传播算法
  • 什么时候反向传播算法高效
  • 反向传播算法再理解

3、改进神经网络的学习方法

4、神经网络能够计算任意函数的视觉证明

5、为什么深度神经网络的训练是困难的

6、深度学习


在讨论反向传播算法之前,我们先介绍一个基于矩阵的快速计算神经网络输出的方法来热热身。实际上在上一章的末尾我们经见过这个方法了,但是那时我说得很快,因此有必要详细回顾一下。另外在熟悉的上下文背景中,也能让你对反向传播会用到的符号记法感到习惯一些。


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




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

我们用一种相似的记法来表示网络的偏置和激活值。确切地,我们用blj表示第l层第j个神经元的偏置,用alj表示第l层的第j个神经元的激活值。下图展示了这种记法的一个例子:




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




这里的求和针对的是第l−1层的所有神经元k。为了将这个式子写成矩阵形式,我们为每一层l定义一个权重矩阵wl。矩阵wl的每一项就是连接到第l层神经元的权重,这就是说,wl中第j行第k列的元素就是wljk。相似地,我们为每一层定义一个偏置向量bl。你大概可以猜到这是如何工作的——偏置向量的每一项就是blj的值,每一项对应第l层中的一个神经元。最后,我们定义一个激活向量al,其中的每一项就是激活值alj。


最后一个我们需要改写成矩阵形式的想法就是把σ这样的函数向量化。我们在上一章中简单提到了向量化,这里面的思想就是我们想把一个函数比如σ,应用到一个向量v中的每一项。我们用一个直观的记号σ(v)来表示这种作用在每一个元素上的函数操作。就是说,σ(v)的每一项就是σ(v)j=σ(vj)。比如,如果我们有一个函数f(x)=x2,f的向量化形式具有如下作用:




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


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




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


当使用等式(25)来计算al的时候,我们顺便也计算出了中间结果zl≡wlal−1+bl的值。这个数值非常有用,以至于值得我们专门给它一个名字:我们称zl为对第l层神经元的加权输入(weighted input)。在本章的后续部分中我们将大量地使用到加权输入zl。等式(25)有时候会被写成与加权输入有关的形式,即al=σ(zl)。值得注意的是zl由zlj=∑kwljkal−1k+blj组成,这就是说,zlj就是第l层第j个神经元激活函数的加权输入。


下一节我们将介绍“关于损失函数的两个假设”


本文来源于哈工大SCIR

原文链接点击即可跳转


本文由机器之心经授权转载,禁止二次转载。

入门
登录后评论
暂无评论
暂无评论~
返回顶部