3.2 神经网络基础结构
上一节介绍了神经网络的基本组成单元——神经元,这一节介绍单个神经元是怎么构成复杂的神经网络及其中参数是怎么定义的。
3.2.1 两层神经网络模型
神经网络模型是一种单向的层级连接结构,每一层可能有多个神经元,而不是像生物神经元一样聚合成大小不一的团。一般情况下,同层内的神经元之间是没有连接的。最普通的神经网络层类型是全连接层,全连接层中的神经元与其前后两层的神经元是完全成对连接的,但是在同一个全连接层内的神经元之间没有连接。
输出层是神经网络中比较特殊的层,由于它的输出结果通常是分类问题中对各类别的打分或求概率值,人们通常都不在输出层神经元中加激活函数,也可以认为它们有一个线性相等的激活函数。
图3-7是具有三个输入的两层神经网络,它包含一个四个神经元的隐藏层和一个两个神经元的输出层。需要注意的是,相邻层的所有神经元之间都存在连接,这种连接方式称为全连接,但同层的神经元之间不存在连接。
图3-7 两层神经网络模型
按照惯例,不含有超参数的层结构不计入神经网络的层数,例如图3-7中输入层不含超参数,因此整个网络是一个两层的神经网络。
用来度量神经网络大小和复杂度的标准主要有两个:神经元的个数和超参数的个数。图3-7中的神经网络包含6个神经元(输入层不计),可以学习的参数共有26个,计算公式如式(3-8)所示,式中有6个偏置超参数。现在实用的CNN大多包含很多参数,看起来非常难训练,但可以通过设计神经网络结构来合理地减少参数数目,例如多层共享参数。
其中n1、n2和n3分别是输入层、隐藏层和输出层的神经元数目。
3.2.2 前馈神经网络和循环神经网络
前面介绍了简单的单隐藏层神经网络,接下来研究两种更加复杂的情况。根据信息在神经网络中的传递方向可以将神经网络分为两大类,分别是前馈神经网络和反馈神经网络。
前馈神经网络,简称前馈网络,采用单向多层结构。在前馈神经网络中,每层的神经元可以接收前一层神经元的输出信号,同时其输出作为下一层神经元的输入。第一层叫作输入层,最后一层叫作输出层,其他中间层叫作隐藏层。整个神经网络中不存在反馈,信号从输入层向输出层单向传播,神经网络输出仅由当前的输入和神经网络参数决定。前馈神经网络主要包括MLP(多层感知器,Multi-Layer Perceptron)和CNN[4]。
在许多实际应用中,例如自然语言处理、机器翻译和视频压缩,人们希望综合利用前一段时间的所有信息,研究人员设计了RNN[5](循环神经网络,Recurrent Neural Network),以保存先前所有信息的状态。RNN以序列数据作为输入,在序列上递归,且所有循环单元链式连接,每个神经元同时将自身的输出信号作为下层神经元以及自身下一时刻的输入信号,具有记忆性、参数共享和图灵完备等特性。除了普通的RNN外,还有一种常见的改进,即LSTM[6](长短期记忆网络,Long Short-Term Memory),更多细节会在3.4.2节中介绍。
3.2.3 神经网络中的参数
前馈神经网络和循环神经网络往往都有多个神经元和隐藏层,可以用一种通用的方法对各个神经元及相关参数进行定义,以便描述神经网络的训练过程。
如图3-8所示,将第l-1层第一个神经元的输出结果定义为,其中下标表示第几个神经元,上标表示第几层。同理,将第l层的第一个神经元的输入定义为,偏置定义为。定义为第l-1层的第j个神经元的输出输入到第l层的第i个神经元的参数。
图3-8 神经网络参数定义
通过上述定义可以写出神经网络前向传播公式,如式(3-9)所示。
也可以将其写成向量的形式,如式(3-10)所示。
其中al-1表示第l-1层的输出向量,bl表示第l层的偏置向量,Wl表示第l-1层和第l层之间的权重矩阵,zl表示第l层的输入向量。