根据第2章的内容不难发现,无论是用于解决何种问题的全连接神经网络,获得一个全连接神经网络模型的步骤都是基本相似的。如图3.1所示,第一步是建立模型,也就是确定这个未知函数的集合;第二步就是设计损失函数,针对不同的任务需要设计出能够完美反映任务完成情况的损失函数。这两步都是需要模型的创建者来选定的,建立模型主要是为了构建出函数集合的基本形态,这组函数内部的参数是可以有很多不同的组合的,而设计损失函数就是为了后续能够准确而快速地确定参数。至于究竟哪组参数能够取得最好的效果,这就是第三步的参数学习,这一步就不是人类来完成的了,而是由机器来进行学习。
图3.1 DNN模型确定步骤
全连接神经网络的关键在于“全连接”,指每一个神经元都与上一层每个神经元的输出相连。全连接神经网络具有网络结构简单、网络组成直观等优点,但是它也具有不可忽视的缺点。从全连接神经网络建立的三个步骤来看,每个步骤都存在着一定的问题,比如参数学习步骤,一般采用的优化方法都是梯度下降法,但是梯度下降法极易导致只能得到局部最优值,而到达不了全局最优。对于此问题,现在也有了很多改进方法,例如随机梯度下降法、动量法等。而对于损失函数设计这一步来讲,损失函数现在常用的有两类:一类是平方差损失函数,常用于回归任务;另一类是交叉熵损失函数,常用于分类任务。这两种损失函数都是根据不同的任务来确定,相对来讲是比较确定的。
在模型建立这一步,存在的问题就较大一些。如图3.2所示,以全连接神经网络解决手写数字识别项目为例,全连接神经网络的建立一般都是根据输入来确定需要多少层网络,每一层网络有多少个神经元,类似于搭积木的过程,从下至上,每一层神经元都需要铺满,最终才能得到想要的神经网络模型,这样就会导致神经网络模型的结构不够灵活。假设对一张16×16的图片进行分类,那么就需要设计一个包含256个神经元的输入层、一个包含10个神经元的输出层以及隐藏层。如果想要对64×64的图片做相同的分类任务,就只能通过增加每层神经元的个数以及增加网络层数来完成这个任务,这样整个网络的结构就显得不够灵活。
图3.2 手写数字识别DNN网络结构
DNN模型的第二个问题就是参数量过大。仍旧以手写数字识别项目为例,输入为16×16的图片,那么输入层就需要有256个神经元,数字总共有10个,则输出层就需要有10个神经元,假设隐藏层每层有1000个神经元,共有3个隐藏层,那么需要学习的参数就有256×10 3 +10 3 ×10 3 +10 3 ×10 3 +10 3 ×10个偏置 w 再加上1000+1000+1000+10个权重 b ,总计2269010个参数,这仅仅只是一个简单网络针对小输入所需要计算的参数量。倘若输入的图片大小为128×128甚至更大,网络的层数为10层乃至更多,那么就会造成参数量过大,甚至发生参数爆炸的问题。这是由于全连接神经网络每个神经元都与上一层所有神经元都连接导致的,这种连接方式会使得参数量随着网络规模的增大呈现指数级的增长。如果参数规模过大,将会使得整个网络模型的训练过程都变得更加复杂、更加消耗时间,也因此造成对计算资源以及计算机内存的要求极高。
全连接神经网络参数量巨大,容易带来参数量爆炸的问题,也使得全连接神经网络模型的自由度增加。这种较高的自由度使得全连接神经网络极其容易过拟合,从而导致模型泛化能力较差,在训练数据不充分或者有噪声数据存在的情况下,模型就会容易表现出过度的行为。
为了克服全连接神经网络的这些缺点,学者们提出了大量的改进方法,例如稀疏连接、卷积神经网络、循环神经网络、注意力机制等,这些改进方法都可以有效地减少神经网络参数量,进而增强神经网络的表达能力。