1. 多层人工神经网络模型
-
多层感知机MLP(Multi-Layer Perceptron)也叫多层人工神经网络。一般的,常见的神经网络是如下图所示的层级结构。由输入层、隐藏层(可有多层)和输出层组成。神经网络中最基本的成分是神经元(neuron)。每层神经元与下一层神经元全互连,神经元之间不存在同层连接,也不存在跨层连接。这样的神经网络结构通常称为“多层前馈神经网络”(multi-layer feedforward neural networks),(前馈并不意味着网络中信号不能向后传,而是指网络拓扑结构上不存在环或回路),其中,输入层神经元仅接收外界输入,不进行函数处理;隐藏层和输出层则包含功能神经元,能将接收到的总输入值与一定的阈值进行比较,然后通过“激活函数”(activation function)处理以产生神经元的输出。若将阈值也作为输入信号在神经网络中标出,则除输出层之外,各层会多出一个固定输入为-1的“哑结点”(dummy node),该节点与下一层的连接权即为阈值。这样权重和阈值的学习就可以统一为权重的学习。为方便后续解释,下图中并未标出哑结点。
-
下图给出“单隐层网络”模型并解释各层功能及其作用方式:
输入层拥有d个神经元,代表输入样本在d个属性下的值;
输入层信号通过带权重的连接传递至隐藏层,隐藏层神经元分别接收到各自的总输入值ah(h=1,2…,q),将其与神经元的阈值进行比较,然后通过“激活函数”处理产生相应的输出bh(h=1,2,…,q);
隐藏层输出信号同样通过带权重的连接传递至输出层,输出层神经元分别接收各自的总输入值co(o=1,2,…,l),并通过激活函数处理产生最后输出y’o(o=1,2,…l),即对该样本x的预测y’(这里的y’为 l 维列向量)。输出层神经元代表分类结果,其个数取决于最终分类标签的个数。
神经网络的学习过程,就是根据训练数据来调整神经元之间的“连接权”(connection weight)以及每个功能神经元的阈值;换言之,神经网络“学”到的东西,蕴涵在连接权与阈值中。 -
为了方便理解,这里举出该神经网络模型的应用实例:识别手写数字。
假设样本为n个手写数字图像,每个数字图像由28×28像素组成,每个像素由灰度值表示。我们把28×28的像素展开变成一个有784个维度的一维行向量,即一个样本向量,那么此时输入层的神经元个数就会有784个,即图中的d=784。因为是识别单个手写数字,其结果会有0-9这十种情况,因此输出层就会有10个神经元,即图中的 l=10。至于隐藏层的层数以及单元数则作为要优化的额外超参数,可以通过交叉验证技术解决,在此不对其进行详细展开。 -
关于激活函数:
理想的激活函数是如下图(a)所示的阶跃函数,它将输入值映射为输出值“0”或“1”,显然“1”对应于神经元兴奋,“0”对应于神经元抑制。然而,阶跃函数具有不连续、不光滑等不太好的性质,因此实际常用Sigmoid函数作为激活函数,如下图(b)所示。有时,输出层神经元也采用线性激活函数,即直接以输入值c与阈值θ的比较结果作为最后的预测值y’输出。
2. 算法公式推导
(1)正向传播(Forward Propagation): 利用正向传播激活神经网络
- 接下来,我们利用上述的神经网络模型,进一步用数学表达式来详细解释神经网络如何通过正向传播从输入信号输出预测结果的各个步骤:
首先给定数据集 D:
即数据集D共有n个样本,且输入样本x(i)由 d 个属性描述,输出 l 维实值向量 y(i),如下所示:
将输入样本用矩阵X表示,输出值用矩阵Y表示:上标代表样本标号,下标代表相应的属性维度及分类维度。