![高能效类脑智能:算法与体系架构](https://wfqqreader-1252317822.image.myqcloud.com/cover/767/38894767/b_38894767.jpg)
2.1.1 推理
图2.1中展示了包含两个突触前神经元和一个突触后神经元的示例。在与神经网络相关的文献中,特别是在讨论神经网络硬件时,承载神经元输出激活值的边缘通常称为轴突,而承载神经元输入的边缘通常称为树突。在神经网络的推理过程中,从前一层得到了激活值(如果当前层是第一层,则是输入值)乘以对应的突触权重
,然后将它们的值相加得到神经网络的输出激活值(如式(2.1)所示)。其中i和j代表神经元的序号,而l代表的是层的序号。而偏置项
是为了增添更多的设计灵活性:
![](https://epubservercos.yuewen.com/DA231B/20422784301680706/epubprivate/OEBPS/Images/021-5-i.jpg?sign=1739309740-z1LeZ7RpEUdM3JfB9SVwS9USYLQ0rn8K-0-5c456b3430b95b816efaebd34f539eba)
![](https://epubservercos.yuewen.com/DA231B/20422784301680706/epubprivate/OEBPS/Images/2a1.jpg?sign=1739309740-LJzKGFD3EPFXMBkpRkYJd4osU7ML5ozr-0-7a1c7183f00417cec2ab6b2db506c7f9)
图2.1 人工神经网络基本运算图解:从两个突触前神经元和
激活后,首先分别用突触权重
和
相乘,然后加上偏置项
。将得到的和输入非线性激活函数得到
,即得到了突触后神经元的激活值
为了便于标记,我们使用同时代表神经元和它的激活值。准确来说它的具体含义应该由上下文来确定。如式(2.2)所示,该层中每个神经元的激活值可以通过将“和”传递给一个非线性激活函数获得。
![](https://epubservercos.yuewen.com/DA231B/20422784301680706/epubprivate/OEBPS/Images/022-i.jpg?sign=1739309740-shs0SgmX0q4qM1m6xOof76uFCGkHN3FT-0-02cf22a578b4b3309ce21562a31b0382)
在式(2.2)中,f(·)是一个非线性的激活函数。如图2.2所示,目前比较流行的激活函数有sigmoid函数,tanh函数(hyperbolic tangent function,双曲正切函数)和ReLU(Rectified Linear Unit,修正线性单元)函数。在脑子中要时刻牢记非线性激活函数对一个神经网络是至关重要的,因为激活函数的非线性使得神经网络能够用适当数量的参数逼近任意函数。事实上,如果没有非线性激活函数,多层神经网络本质上会退化为一个单层的神经网络,其中权重矩阵是网络中所有权重矩阵的级联乘积。通常对激活函数的另一个要求是它应该是可微的(至少是分段的),这一要求对于许多形式的学习是必不可少的,这一点将在下一节详细说明。
![](https://epubservercos.yuewen.com/DA231B/20422784301680706/epubprivate/OEBPS/Images/2a2.jpg?sign=1739309740-8fNHEUmIPhHbSeFZPDyRV2oKxbuC94GS-0-60770aeb3df3a021e33410b185cd4458)
图2.2 目前比较流行的激活函数图像。激活函数的一个重要作用是将非线性引入神经网络。如果没有非线性特点,多层神经网络将退化为简单的矩阵与向量的乘法
![](https://epubservercos.yuewen.com/DA231B/20422784301680706/epubprivate/OEBPS/Images/2a3.jpg?sign=1739309740-h9eWFGvHcf7BX9H6XJIbFtQB3MG9v1J2-0-9f2b05b553694cf8100037df30ec538a)
图2.3 前馈神经网络图解。连接神经网络的输入和输出的层被分别称为输入层和输出层,夹在输入层和输出层之间的层为隐藏层
对于神经网络来说,神经元和突触是神经网络的基本构件,有了这些组件就可以形成一个神经网络。图2.3所示的是一个简单的前馈神经网络(FNN)。第一层和最后一层分别称为输入层和输出层。其将数据输入到神经网络并输出计算结果。在输入层与输出层之间的神经网络层被称为隐藏层,大部分前馈神经网络至少有一个隐藏层,而许多深度网络甚至有十多个甚至上百个隐藏层。神经网络的前向操作是将输入传递到网络中,一层一层地计算每个神经元的激活值,并达到最终输出的过程。在下一节中,将介绍相反方向的操作,即我们要学习的反向传播算法。