基于Dropout深度神经网络的手写体数字识别(Matlab)

一.Dropout方法简述

  深度神经网络包含多个非线性隐含层,这使得他们成为非常有表现力的模型,可以学习其输入和输出之间非常复杂的关系。然而在有限的训练数据情况下,这些复杂的关系中的许多将是噪声采样的结果。因此即使同一分布中抽取,它们也将存在于训练集中,而不存在于实际测试数据中。

  在无限计算中,“正规化”一定大小模型的最佳方法是平均预测所有可能的参数设置,并根据给定训练数据的后验概率对每个设置进行加权。对于简单的或者小的模型,这有时可以近似得很好,但是我们想用更少的计算来处理贝叶斯黄金标准的性能。我们建议通过对参数共享的指数数量的学习模型的预测进行近似的加权几何平均来实现。模型组合几乎总能提高机器学习方法的技能。然而,对于大型神经网络来说,平均输出这一显而易见的想法应用到大型网络时,大量分开训练的网络是需要高昂代价的。而且,大型网络通常需要大量的训练数据,可能没有足够的数据来训练不同的网络。即使能够训练很多不同的大型网络,在测试时同时使用这些网络也会很难达到实际应用中快速响应的要求。

  Dropout是一种能够解决这两大问题的方法。它能够避免过拟合并且提供了一种高效训练大型网络的方法。“Dropout”这一术语表达的意思是抛弃一个神经网络中的部分节点。这里的抛弃,指的是将节点暂时从神经网络中移除,包括它全部的输入和输出。

基于Dropout深度神经网络的手写体数字识别(Matlab)_第1张图片

  在进行dropout操作时,每个节点有p的概率被置为1,有(1-p)的概率被置为0。当然,被置为0的节点即视为被暂时移除。在测试网络时,通过一种简单的平均化方法来使网络达到效果。即在测试的时候不经过dropout,在节点的输出上直接乘以概率p。这就保证了测试时的输出能够和预期输出相匹配。通过这样的缩放,具有共享权重的2n个网络就可以被组合成单个神经网络在测试时被使用。

二.实验仿真

       我选择了含有两个隐含层的标准深度神经网络,以MNIST手写体数字库为测试训练样本,搭建了一个基于dropout的手写体数字识别神经网络。采用的网络结构为输入层784个节点,两个隐含层均为1000个节点,输出层为10节点。在本次的实验中并未对输出层使用dropout,而仅仅侧重于对隐含层的dropout,相信在对输入层也进行dropout后会取得更好的效果。根据dropout我的理解是,对输入层的dropout能够加强神经网络抗噪的能力。在训练样本个数方面,我做了分别选择了60000个样本和1000个样本进行对比。因为Dropout按照原理来说,能够在小样本的情况下避免过拟合问题,所以在这里我刻意减小训练样本的个数来验证小样本下抗过拟合这一特性。

基于Dropout深度神经网络的手写体数字识别(Matlab)_第2张图片

参考文献: Nitish Srivastava Geoffrey Hinton Alex Krizhevsky Ilya Sutskever Ruslan Salakhutdinov Dropout: A Simple Way to Prevent Neural Networks from Overfitting. Journal of Machine Learning Research 15 (2014) 1929-1958


你可能感兴趣的:(深度神经网络)