3.2.3 基于神经网络的填补方法

人工神经网络(Artif icial Neural Network,ANN),简称神经网络,是指由大量简单的处理单元按一定规则相互连接而构成的网络模型。它是在现代神经生物学基础上提出的数学模型,通过对人脑神经系统的抽象、简化和模拟,实现复杂信息的处理。

图3-5 典型的神经元模型

神经网络中的基础结构为神经元,也可称作处理单元或者节点。图3-5以网络模型中第k个神经元为例,介绍其典型结构。图3-5中所有指向神经元的线以及从神经元射出的线表示该神经元与其他神经元间的连接,与输入端相连的神经元借助连接向图中神经元传递输入值,与输出端相连的神经元借助连接获取图中神经元的输出值。假设某一时刻神经元的输入为xi=[xi1,xi2,…,xis]T(i=1,2,…,n),s表示在输入端的神经元数目,xij(j=1,2,…,s)表示来自输入端第j个神经元的输入,则神经元的数学描述如式(3-62)所示:

式(3-62)中,ϕ(·)表示神经元的激活函数;wjk(j=1,2,…,s)表示输入端第j个神经元与图中神经元的连接权重,简称权重,用于模拟不同神经元的连接强度;bk表示神经元的阈值;netik表示神经元输出。

激活函数的作用是对输入、权重和阈值计算而来的数值进行缩放,从而为模型引入非线性因素,并提高其拟合能力。神经网络理论发展至今,已存在诸多类型的激活函数,例如修正线性单元(Rectif ied Linear Unit,ReLU)、S型函数(Sigmoid Function)、双曲正切函数(Hyperbolic Tangent Function,Tanh Function)、Softplus函数(Softplus Function)、线性函数(Linear Function)以及阶跃函数(Step Function)。这些函数的形式和数学描述如图3-6所示。

图3-6 典型的激活函数示意图

各类激活函数具备不同的特点,例如,Sigmoid函数、Tanh函数曲线平滑,能够对取值范围较大的自变量x实施“挤压”,并将其分别映射到指定范围[0,1]、[-1,1]。阶跃函数能够将自变量x映射到集合{0,1}中,适用于二分类问题。ReLU函数将小于0的自变量映射为0,将大于0的自变量映射为自身取值,函数的运算简单高效,但在零点不可导。Softplus函数和ReLU函数的曲线形式十分相似,并且曲线平滑,处处可导。线性函数不对自变量x进行任何变换,故因变量和自变量的取值完全相同。

针对不同场景和具体问题,需选取适合的激活函数以提高建模精度和效率。通常情况下,隐藏层神经元的激活函数可选用ReLU函数、Sigmoid函数、Tanh函数,而输出层神经元的激活函数一般为线性函数。

前馈神经网络是一类典型的神经网络模型,在此类网络中,信息传递与处理的方向从输入层到各隐藏层再到输出层逐层展开,故取名为前馈。前馈神经网络的结构如图3-7所示。图3-7中若干个神经元依次排列成层次型结构,上层中的神经元与下层中的神经元之间存在连接。根据功能的不同,可将各层分为输入层、隐藏层和输出层。输入层负责接收外界输入并传递至隐藏层;隐藏层是神经网络内部的信息处理层,负责对输入数据进行整合处理,根据实际需要可设置一个或者多个隐藏层;输出层负责对隐藏层传入的数据进一步处理,并向外界输出运算结果。

图3-7 前馈神经网络

在前馈神经网络中,每个神经元均代表以其输入为自变量的局部非线性函数,若干个神经元的并行与串联可看作是对多个局部非线性函数的组合。由此,基于前馈神经网络能够建立关于网络输入的非线性模型,而神经元的权重和阈值构成了模型的未知参数。通过对模型参数的学习与求解,前馈神经网络能够拟合任意复杂度的非线性函数。

神经网络模型能够实现不完整数据的有效填补。一方面,正如3.2.1节和3.2.2节所述,基于线性回归的填补方法难以适用于属性间存在非线性关系的数据集,而传统基于非线性回归填补方法的建模过程相对复杂。鉴于神经网络强大的非线性映射能力,其能够合理挖掘不完整数据属性内复杂的关联关系,以此进行缺失值填补。另一方面,传统的线性模型和非线性模型仅能拟合单个不完整属性,而神经网络是多入多出(Multi-input-multi-output,MIMO)型的结构,即网络既可接收多个输入,也能向外界传出多个输出。因此,神经网络能够同时对多个不完整属性进行拟合,具备更加高效的结构。

基于神经网络的填补方法首先建立关于不完整属性的非线性模型,利用现有数据求解模型参数,从而挖掘不完整数据属性间的关联关系。接着,根据不完整样本中的已知信息计算网络输出,并以该网络输出来填补缺失值。

多层感知机是前馈神经网络的一类经典模型,其结构和图3-7所示的网络结构完全相同。下面以多层感知机模型为例,介绍一种基于神经网络的填补方法。

令X表示样本数量为n,属性个数为s的不完整数据集,xi=[xi1,xi2,…,xis]T(i=1,2,…,n)表示第i个样本,Jco表示完整属性的下标集合,Jin表示不完整属性的下标集合。针对数据集X,构建以完整属性为输入属性、不完整属性为目标属性,并且各层神经元数量分别为|Jco|、n(1)、|Jin|的3层网络模型。将完整样本集合Xco作为训练集,样本中与完整属性集合Jco对应的数值作为网络输入,与不完整属性集合Jin对应的数值作为期望输出。

首先,将样本xi∈Xco中与完整属性集合Jco对应的属性值输入网络,根据式(3-63)求解隐藏层神经元的输出netik(1):

式(3-63)中,ϕ(·)表示隐藏层神经元的激活函数;wlk(1)表示第l个输入层神经元与第k个隐藏层神经元的连接权重;Jco(l)表示集合Jco中第l个元素,用于提取样本中与完整属性集合Jco对应的属性值;bk(1)表示第k个隐藏层神经元的阈值。

接着,利用式(3-64)计算输出层神经元的输出,即最终的网络输出:

式(3-64)中,表示输出层的激活函数,wkj(2)表示第k个隐藏层神经元与第j个输出层神经元的连接权重,bj(2)表示第j个输出层神经元的阈值。

以上是针对不完整数据集X所构建的多层感知机填补模型,模型中的权重与阈值是未知参数,需进一步展开求解。模型参数的计算过程一般称为训练过程或学习过程。

代价函数通常是指由网络输出与期望输出间的误差构成的函数。由于网络输出随着模型参数的调整而变化,因此代价函数也可看作是以模型参数为自变量的函数。在基于神经网络的填补方法中,一般可根据所有完整样本在目标属性的拟合误差平方和建立代价函数,如式(3-65)所示:

式(3-65)中,Jin(l)表示集合Jin中的第l个元素,用于提取样本中不完整属性集合Jin所对应的属性值并将其作为期望输出。

网络训练实际上是对代价函数进行优化的过程,即寻找到一组模型参数,使代价函数在该参数下的取值最小。而代价函数取值最小,就意味着网络输出与期望输出间的误差达到最小值,由此网络模型能够实现对期望输出的高精度建模。由最小化代价函数求解最佳模型参数的方法可称为优化算法(Optimization Algorithm)。梯度下降(Gradient Descent,GD)算法是十分经典的优化算法,其基本思路是将模型参数的求解视为一个迭代式的计算过程,在此过程中模型参数沿着梯度的负方向不断调整,从而使代价函数的取值逐渐减小并最终稳定。

下面介绍梯度下降算法的原理,由于该算法需反复求解并更新模型参数,不妨令Wt表示第t次迭代所得模型参数构成的向量,Wt+1表示第t+1迭代中待求解模型参数构成的向量,L(W)表示以模型参数为自变量的代价函数。对L(Wt+1)在Wt处做一阶泰勒公式展开,可得式(3-66):

式(3-66)中,∇L(Wt)表示代价函数在Wt处的梯度,Wt+1可进一步表示为Wt+ηp,η为较小的常数值,p为单位向量。Wt+1=Wt+ηp表明本次迭代中待求解的Wt+1将在Wt的基础上进行细微调整。由此,式(3-66)可进一步推导出式(3-67)。

式(3-67)中,L(Wt)、η、|p|和|∇L(Wt)|均为常量,cos(p,∇L(Wt))∈[-1,1],该值可根据单位向量p的方向确定。为了使本次迭代中的代价函数L(Wt+ηp)取值最小,cos(p,∇L(Wt))需取最小值。根据余弦函数的性质,当向量p与∇L(Wt)的方向完全相反时,cos(p,∇L(Wt))取最小值-1。因此,在每次更新参数时梯度下降算法令模型参数沿梯度的负方向不断调整,直至最终收敛。

目前,在梯度下降算法的基础上演变出各种版本的改进算法,例如,传统的梯度下降算法在参数更新时需利用所有训练样本计算代价函数,而样本数量一旦过大,参数更新将变得缓慢,进而使训练过程耗时。针对该问题,随机梯度下降(Stochastic Gradient Descent,SGD)算法根据任意样本在目标属性的拟合误差更新参数,即每向网络中输入一个样本就进行一次参数调整。SGD算法能够使模型训练变得高效,但由于每次仅根据一个样本调整参数,在迭代中模型参数往往不会始终向着整体最优方向调整,而是会以一定的波动大体上朝最优方向移动。小批量梯度下降(Mini Batch Gradient Descent,MBGD)算法是GD和SGD算法的折中,每次利用数据集中一小批样本进行参数更新,既能加快网络模型的训练过程,又能够保证训练平稳进行以及最终所得参数的准确性。此外,诸如自适应梯度下降(Adaptive Gradient Descent,AdaGrad)算法在训练期间自适应调整学习率,以此实现对梯度下降算法的改进。

反向传播(Back Propagation,BP)算法是应用于网络训练的重要方法,基于BP算法的学习过程,包含前向传播和反向传播两部分。前向传播是指数据输入网络后,经隐藏层和输出层的计算处理后得到网络输出的过程。反向传播是指将网络输出与期望输出间的误差按照由输出层到输入层的方向逐层传播,以此指导模型参数调整的过程。BP算法通过迭代式开展前向传播与反向传播,不断地调整模型参数,使所建模型的误差逐渐降低并最终稳定。

在基于BP算法的训练过程中,首先根据式(3-64)计算网络输出yij(j=1,2,…,|Jin|),接着求解代价函数,并采用梯度下降等优化算法调整模型参数。模型参数的调整规则如式(3-68)所示:

式(3-68)中,t表示迭代次数;η表示学习率;表示代价函数关于每个模型参数的偏导数,取值如式(3-69)至式(3-73)所示。

式(3-69)中,ϑ'表示激活函数ϑ(·)关于函数输入的导数,若ϑ(·)为线性函数,则ϑ'=1。

式(3-71)中,ϕ'表示激活函数ϕ(·)关于函数输入的导数,若ϕ(·)为Sigmoid函数,则ϕ'的计算规则如式(3-72)所示。

填补模型训练完毕后,可应用所得模型填补缺失值。针对不完整样本xi,根据式(3-64)计算网络输出,与样本缺失值相应的网络输出将作为填补值。

上述神经网络填补方法仅借助一个多层感知机即可填补数据集中所有的缺失值,尽管建模高效,但对现有数据的利用可能并不充分。考虑以下场景,当数据集中存在众多不完整属性样本,完整属性样本相对较少时,利用少数完整属性拟合多数不完整属性的过程可能存在较大误差。若不完整属性样本仅存在一个缺失值,那么将数据集中完整属性样本相应部分的现有值作为输入,并参与缺失值求解,而那些未能输入网络的现有值无法被有效利用,则会导致已知信息的浪费。

为了合理利用不完整数据集中的现有值,可考虑构建多个网络模型,并采用模型集群的方式实行缺失值填补。基于模型集群的神经网络填补方法将在4.3节展开详细讨论。除此之外,第4章探讨了多种面向不完整数据的神经网络填补法,包括基于自组织映射网络的填补方法、基于单层感知机的填补方法、基于多层感知机的填补方法、基于自编码器及其变体的填补方法,以及面向不完整数据的属性关联性神经元建模及填补方法。在这些填补方法中,除自组织映射网络与单层感知机外,其他网络模型均采用属性间相关性填补缺失值。

总体而言,神经网络模型构造简单灵活,并且具备强大的非线性映射能力。基于神经网络的填补方法通过不完整数据的回归建模合理挖掘数据属性间的非线性关系,从而提高填补精度。