目前神经网络技术受到追捧,一方面是由于数据传感设备、数据通信技术和数据存储技术 的成熟与完善,使得低成本采集和存储海量数据得以成为现实;另一方面则是由于计算能力的大幅提升,如图形处理器(Graphics Processing Unit,GPU)在神经网络算法中的应用和算法的不断改进带来的计算效率提升。
常见的神经网络模型有深度神经网络、卷积神经网络、循环神经网络,以及由这些基本网 络优化而形成的各种深度学习模型。
13.1 从一个具体任务开始:识别数字
神经网络通过对大量手写数字的训练样本的学习,从而自动找到识别手写 数字的规则,实现对手写数字的识别。神经网络手写数字识别的训练数据一般采用 MNIST 数据 集,它不但提供了大量形式各异的手写数字样本,同时也提供了各个样本的标注信息,从而便 于研究者使用。
13.2 理解神经元是什么
神经元是神经网络算法的基本单元,它本质上是一种函数,接受外部刺激并根据输入产生 对应的输出。它的内部结构可以看作线性函数和激活函数的组合,线性函数运算结果传递给激 活函数,最终产生该神经元的输出结果。神经元也经历了逐步发展并完善的过程,其中典型的神经元有感知器和 S 型神经元等。
13.2.1 感知器是什么
感知器有时也被称为感知机,是由康奈尔航空实验室的科学家弗兰克·罗森布拉特在 1957 年所提出的一种人工神经网络。它可以被视为一种形式最简单的前馈式人工神经网络,是一种 二元线性分类器。感知器接收多个二进制输入并产生一个二进制输出。
感知器工作原理如下。
(1)感知器接收多个二进制输入,每个输入对应一个权重。
(2)感知器二进制输入的加权值对输出有重大影响。
(3)通过感知器加权值与阈值比较,决定最后的二进制输出值。
上述过程可用如下代数形式表达。
有时候为了简便,我们会把感知器规则 写成另外的通用形式,如下所示。
其中,wx=Σwi xi,b 为阈值的相反数,也称为感知器的偏置。
13.2.2 S型神经元是什么
S 型神经元与感知器相比,其优点在于:权重和偏置的微小变化只会导致输出的微小变化。
S 型神经元与感知器最大的区别在于它的输入和输出不再是二进制的离散值,而是 0 ~ 1的连续值。总的来说,S 型神经元的特点如下。
(1)S 型神经元有多个输入值,这些输入值为 0 ~ 1 的任意值。
(2)S 型神经元输入的加权值经过 sigmoid 函数处理后,输出一个 0 ~ 1 的数值。
S 型神经元与感知器的不同之处在于:S 型神经元是一个平滑的函数,而感知器是一个阶跃函数。也就是说,感知器只能输出 0 或者 1,而 S 型神经元能够输出 0 ~ 1 的任何数值。
S 型神经元的表达式可以写为任何一个权重和偏置的微小变化Δw 和 Δb 都会导致 S 型神经元的输出产生一个微小变化。
13.3 理解典型神经网络多层感知器
最基本、也是最典型的神经网络— 多层感知器(Multi- Layer Perception,MLP)
13.3.1 神经网络结构是什么
一个典型的神 经元网络结构包括 3 个层:输入层、隐藏层、输出层。
(1)输入层。输入层是神经网络的第一层,图像通过数值化转换输入该层,该层接收输入 信号(值)并传递到下一层,对输入的信号(值)并不执行任何运算,没有自己的权重值和偏置值。图像将像素点信息转换为输入层神经元激活值,像素点数量等于输入层神经元数量。
(2)隐藏层。隐藏层是神经网络中介于输入层和输出层之间的合成层。一个神经网络包含 一个或多个隐藏层,隐藏层的神经元通过层层转换,不断提高和已标注图像的整体相似度,最 后一个隐藏层将值传递给输出层。
(3)输出层。输出层是神经网络的最后一层,接收最后一个隐藏层的输入而产生最终的预 测结果,得到理想范围内的期望数目的值。该层神经元可以只有一个,也可以和结果一样多。
13.3.2 搞懂MLP的工作原理是什么
手写数字的神经网络算法分类中包括如下几个主要环节,即图像数值化、神经 元相互激活传递和代价函数最小化等内容,需要我们重点把握。
1.图像数值化:将图像转化为数值
图像(手写数字)识别的第一项工作就是将 图像通过各像素点进行数值化处理,这项工作往往发生在神经网络的输入层。
其次,MLP 神经网络的最后一层包含 10 个神经元,分别代表 0 ~ 9 这 10 个数字。这 10 个神经元的激活值也是 0 ~ 1 的数值,激活值越大表示输入值对应该神经元的可能性越大。
最后,神经网络的中间层为隐藏层,它可以包含多层结构和多个神经元。神经网络处理信息的 核心就在于每一层神经元的激活值的计算和上一层神经元激活值影响下一层神经元激活值的方式。
2.激活规则:神经元间如何相互影响
神经网络的大致工作过程是,图像经过数值化处理后进入输入层神经元,输入层神经元沿 着某条路径激活下一层神经元,下一层神经元又将这种激活状态传播到后续各层的神经元,最 终在输出层产生预测结果。
神经元的激活规则就是,某个神经元激活值由上一层神经元激活值的某种加权方式来决 定。例如,神经元 c1 激活值由上一层神经元激活值的某种加权形式来表达,如 σ (w1a1+w2a2+... +wnan+b),其中 ai 是上一层某个神经元的激活值;wi 是上一层该神经元激活值对神经元 ci 激活 值影响的权重;b 则是神经元 c1 被激活的难易程度,即偏置;σ 是 sigmoid 函数,主要作用是将 函数值压缩为 0 ~ 1。
3.激活规则的关键:神经网络非线性矫正
早期神经网络的非线性函数经常使用 sigmoid 函数来将数值压缩为 0 ~ 1,但现在更多使用 relu 函数或者 tanh 函数来进行处理。
总的来说,上述 3 个函数有着各自的优缺点和使用场景。
第一,sigmoid 函数和 tanh 函数亲缘关系较近,一般认为 tanh 函数是 sigmoid 函数的改造版 本。在神经网络的隐藏层中,tanh 函数的表现要优于 sigmoid 函数,因为 tanh 函数范围为 -1 ~ 1, 数据的平均值为 0,有类似数据中心化的效果。
第二,在神经网络的输出层中,sigmoid 函数的表现要优于 tanh 函数,这是因为 sigmoid 函 数输出结果为 0 ~ 1,而 tanh 函数输出结果为 -1 ~ 1。输出结果为 0 ~ 1 更符合人们的习惯认知。
第三,relu 函数不同于上述两个函数,在深层网络中使用较多。工程实践中,sigmoid 函数和 tanh 函数会在深层网络训练中出现端值饱和的现象,从而导致网络训练速度变慢。因此,一般在神经网络层次较浅时使用 sigmoid 函数和 tanh 函数,而在深层网络中使用 relu 函数。
4.代价函数与参数优化
代价函数的一个合理形式是
当分类准确时这个代 价函数值就较小,当分类错误时这个代价函数值就较大。我们可以通过不断调整参数值来优化代价函数,最终确定合适的模型参数。
13.4 MLP的代价函数与梯度下降
MLP 神经网络学习过程由信号的正向传播与误差的反向传播两个过程组成。
(1)正向传播时,输入样本从输入层传入,经各隐藏层逐层处理后传向输出层。若输出层 的输出值与实际值不符,则转入误差的反向传播阶段。
(2)误差的反向传播是将输出误差以某种形式通过隐藏层向输入层逐层反向传播,并将误差分 摊给各层的所有单元,从而获得各层单元的误差信号,此误差信号即作为修正各单元权值的依据。
(3)这个信号的正向传播与误差的反向传播的各层权值调整过程,是周而复始地进行的。 权值不断调整的过程,也就是神经网络的学习训练过程,此过程一直进行到神经网络输出的误 差减小到可接受的程度或进行到预先设定的学习次数为止。
13.4.1 代价函数:参数优化的依据
13.4.2 梯度下降法:求解代价函数最小值
识别手写数字的任务 中,梯度下降法的工作过程主要如下。
(1)首先,随机给定一系列的权重值与偏置值。当然,这样最后的识别效果一般来说都会 很糟糕。
(2)接下来,算法需要不断改进。改进的方向就是使代价函数的数值不断减小;代价函数是输出层神经元激活值的表达式,如 。
(3)代价函数越小,就表示输出层神经元激活值的真实值与预测值的差距越小,手写数字 识别效果较好。
(4)梯度下降就是随机设定参数的初始值,然后沿着负梯度方向进行迭代(可调节步长或 迭代次数改进梯度下降效率),直到达到代价函数的最小值。
一般的做法是,首先将训练样本打乱顺序并划分为许多小组,每个小组都包含若干 数量的训练样本。然后,使用某个小组数据来计算一次梯度。这种梯度下降法就是随机梯度下降法。
13.5 反向传播算法的本质与推导过程
13.5.1 反向传播算法:神经网络的训练算法
反向传播(Back Propagation,BP)算法是一种重要的神经网络训练算法,“反向”的含义主要是指误差的反向传播。
1.反向传播算法有什么用
反向传播算法可以看成梯度下降法在神经网络中的变形版本,它的原理主要是利用链式法 则通过递归的方式求解微分,从而简化对神经网络梯度下降优化参数时的计算。在输入数据固 定的情况下,反向传播算法利用神经网络的输出敏感度来快速计算神经网络中的各种超参数, 从而大大减少训练所需时间。
2.反向传播算法是什么
提升激活值可以采用的方法为改变权重 wi 和偏置 b、改变上层神经元激活值 ai。不 过,我们并不能改变上一层神经元激活值,我们能够改变的只是权重和偏置。
上一层神经元权重和偏置的变化情况会综合考虑输出层各神 经元的“要求”。这就是反向传播算法的核心思想,通过调整上一层各神经元的权重和偏置来实 现下一层各神经元激活值的“期待”,重复这个过程到神经网络的所有层。
13.5.2 寻根究底:搞懂反向传播算法的数学原理
1. 代价函数如何表达
2.代价函数偏导链式传递规律
上述代价函数对权重的偏导数只是一个训练样本的结果。由于总代价函数是 n 个训练样本 代价函数的均值,因此总代价函数对权重的偏导数为。
虽然神经网络算法强大,应用广泛,但是它有个比较明显的不足就是可解释性较差。