2.4.4 深度学习
理论上说,参数越多,模型复杂度就越高,因为更多参数意味着能完成更复杂的学习任务,拟合更复杂的情况。但是,参数过多容易导致过拟合,并且大量的参数使得训练过程计算量非常高,带来的计算开销难以承受,因此深度学习在提出之初并没有受到广泛关注。而随着云计算、大数据时代的到来,计算能力的大幅度增强使得深度神经网络的计算开销变得可接受,而大数据带来的海量数据则可以有效降低过拟合风险,因此,深度学习开始受到广泛关注和研究。
典型的深度学习模型就是中间层数很多的神经网络。显然,对于一个神经网络模型,增加复杂度的办法就是增加单层神经元的数量和增加中间层的层数。前面提到过,一层中间层的神经元模型就可以无限逼近任意一个连续函数,可以看出,单中间层的神经网络已经具有非常强的学习能力,因此,继续增加单层神经元数量带来的收益相对没那么明显。而增加中间层数量不仅可以增加神经元的数量,提高了模型的复杂度,还可以增加激活函数的层数,带来更多的可能性。
但是,中间层太多的神经网络模型有时候会因此误差在传递过程中发散,而不能收敛到一个稳定状态,因此难以用反向传播算法进行优化。因此有学者提出了无监督逐层训练,也就是所谓的“预训练”。这是一种多中间层网络的常用训练手段,其基本方法是每次训练一层中间层,训练时将上一层的输出作为输入,本层的输出作为下一层的输入,训练完成之后再对整个网络进行微调。这样的预训练加微调的训练方法可以看作先将大量参数进行分组,先找到局部比较合理的参数设置,再对这些局部较优的参数结合起来寻找全局最优,这样就在保持整个模型足够大复杂度的同时,有效降低了训练开销。
另一种节省开销的方法是“权值共享”,即让一组神经元使用相同的连接权。例如,在卷积神经网络(Convolution Neural Network,CNN)中,用反向传播算法进行训练,无论是卷积层还是采样层,每一神经元都使用相同的连接权,从而大幅度减少训练的计算开销。
如果从另一个角度来理解,中间层对上一层的输出进行处理的机制,可以看作是对输入信号的逐层处理,把初始的、与输出目标联系不太密切的输入,逐步地转化为与输出更密切的表示。也就是说,通过多个中间层的处理,将输入的低维特征转化为高维特征,再用数学模型对高维的特征进行拟合,这样可以将深度学习理解为“特征学习”或者“表示学习”。以往在用机器学习解决问题的时候,往往需要人为地设计和处理特征,也就是所谓的“特征工程”,而深度学习相当于让机器在海量的数据中自己寻找特征,再完成对数据的学习。
但是,深度学习的强大也带来了对应的问题——黑箱化。黑箱的意思是,深度学习的中间过程不可知,深度学习产生的结果不可控。一方面,我们很难知道深层神经网络具体在做些什么,另一方面,我们很难解释神经网络在解决问题的时候,为什么要这么做。在传统的机器学习模型中,算法的结构大多充满了逻辑(例如,线性模型和树模型),这种结构可以被人分析,最终抽象为某种流程图或者公式,具有非常高的可解释性。而深度学习似乎始终蒙着一层面纱,难以捉摸。深度学习的工作原理,可以理解为通过一层层神经网络,使得输入的信号在经过每一层时,都做一个数学拟合,这样每一层都提供了一个函数,通过每一层函数的叠加,最终的输出就无限逼近目标。这样一种“万能近似”,可能只是输入和输出在数值上的耦合,而不是真的找到了一种代数上的表达式。因此,未来关于深度学习可解释性的研究,可能会是人们对深度学习的真正探索。