上一次,基于
感知机模型
,构建了神经网络的基本结构,在MNIST的验证数据集上,得到>92%的预测准确率。接下来,介绍过拟合问题和缓解方法,再为基本结构引入隐藏层,使这个不借助计算框架的神经网络,在MNIST数据集上的预测准确率,提高到98%以上。过拟合与正则化在训练数据集上,训练迭代次数不足,模型没有学到训练样本的一般特征,称为欠拟合(under-fitting);反之,有大量参数的复杂模型,经过多轮训练,会将训练数据中,不具一般性的噪声,也学习到模型参数里,结果在训练数据上得到很好的拟合表现,在未知数据上预测效果却不好,这种情况称为过拟合(Over-fitting)。"With four parameters I can fit an elephant, and with five I can make him wiggle his trunk."--Enrico Fermi criticized the complexity of Dyson’s model by quoting Johnny von Neumann, 1953"四参可使拟象,俱五参,栩然动其鼻。"弗里曼.戴森回忆,恩瑞克.费米曾经引用 了冯.诺伊曼的论断:“四个参数可以拟合出大象”,来提醒他反思研究工作的物理意义和数学自洽;2010年,一篇发布在《物理学期刊》(American Journal of Physics) 上的文章,提供了用四个复参数勾勒大象的方法。
通过大量参数,在训练数据上拟合复杂模型,可能很好地反映出训练数据集上的细微特征,包括不具一般性的样本噪声,过拟合为模型引入“偏见”,增加了模型的泛化误差。过拟合的缓解方法,是根据模型的复杂程度,增加罚项(penalty term),使模型的结构风险最小化。
总损失中增加的罚项部分,也称为L2正则化项(regularizer),其中,入是根据模型复杂度设定的罚项系数;乘数0.5用于简化计算;||w|| 是权值参数w的L2范数,计算方法参见之前在第二篇中,学习策略部分的介绍。
你可以进一步了解正则化处理,也可以跳到”隐藏层“部分继续阅读,不影响正则化方法的使用。再深一点:关于正则项L2正则化的直观效果是:含有相对大分量的权值参数w,其罚项项也越大;各分量相对小而分散权值w,罚项也较小。例如:输入向量x = [1,1,1,1],和两个权值向量w1=[1,0,0,0],w2=[0.25,0.25,0.25,0.25]。做内积运算后结果均为1;然而W1的L2罚项为1,W2由于各分量相对小而分散,罚项只有0.25。L2正则化后的模型,倾向于均衡评估输入样本点上全部各个维度的特征,而不是少数大分量值特征对分类结果的影响,来提高模型在测试数据集上的泛化(generalization)能力,缓解过拟合风险。由于输入样本点各个维度特征分量之间差异,对结果的影响,偏置b并不做倍数放大,通常只对权值参数w,做正则化处理。隐藏层(Hidden Layer)感知机线性模型能很好的处理线性可分样本点的类别划分,却无法处理如下非线性可分问题:
通过引入隐藏层,将模型去线性化,可使模型能处理非线性可分样本的分类识别;
原始输入先经过隐藏层处理,再传递到输出层;隐藏层中的节点,代表了从输入特征中抽取得到的更高层特征。把新增隐藏层中的节点h看作神经元,这些神经元通过自身的激活函数产生神经元输出。激活函数这里使用ReLU(Rectified Linear Units)作为激活函数,形式简洁,有如下效果
单侧抑制,仅激活输出大于阈值0的信号
宽阔的激活边界
稀疏的激活性
随着神经网络深度(隐藏层数)的增加,ReLU降低信号的激活率的作用愈加显著,有助于重要特征的高效提取。从图像可以看到,ReLU函数不是处处可导的,但是反向传播梯度仍然可以计算,接下来的算法部分会介绍。
以上是ReLU和另一个常用激活函数tanh的图像对比。
下面是不再常用的S型激活函数和softplus激活函数的图像。
算法
由于总损失增加了正则化损失部分:
反向传播时,权值矩阵W的也相应增加了正则化部分梯度:
增加了隐藏层之后,隐藏层的M个节点和输入层节点之间,有了新的权值矩阵W1和偏置b1;
隐藏层到输出层的参数仍然保留,名称改为W2,b2,以方便对应。
隐藏层到输出层参数梯度计算方法不变,以隐藏层输出的M个元素数组h,转置为列向量后,作为输入,
所以W2,b2反向传播梯度,正则化后,成为:
对W1,b1仍然可以设置初始值,然后用梯度下降法(gradientdescent),让参数不断更新梯度△W1和△b1,来极小化损失函数。首先,误差反向传播到隐藏层:
再看激活函数ReLU(x) =max(0,x),不是处处可导的,但是观察函数性质,当输出为负数时,经过ReLU之后被抑制,其梯度降为0;如果输出为非负数,则导数为1,即误差传递到此处是自变量x本身。
所以实际反向梯度△h为
得到正则化后,参数更新的梯度:
以上推导得出了反向传播的全部参数更新梯度。
实现
你可以在Github上,获得上述算法的python实现,不借助计算框架,在上一次全连接神经网络的基本结构上,增加了正则化处理,缓解过拟合问题,并添加了一个隐藏层,使模型能处理非线性可分特征,进一步提高识别效果。以下是设置单隐藏层500个隐藏层节点的训练过程:
验证集上识别正确率稳定在98以上%。
以上,介绍了具有一个隐藏层的全连接神经网络,随着深度(隐藏层)增加,神经网络能在复杂的输入样本上提取更多的特征,得以在一些数据集上,超过了人工识别准确率。增加深度也带来了新挑战:连接节点和参数过多,导致反向传播训练效率降低,且增加了过拟合风险;下一次,将在目前网络结构的基础上,引入卷积核(Convolutional kernel)处理,使之成为一个卷积神经网络(CNN), 通过进一步实践,了解这一挑战的应对方法。(完)索引从0到1:神经网络实现图像识别1.目标问题:MNIST手写数字识别数据集3.第一个神经网络:从二分类到多分类4.更好的神经网络-加入隐藏层 -本篇参考[1] 斯坦福大学 class CS231n:The Stanford CS class CS231n[2] Jürgen Mayer, Khaled Khairy, Jonathon Howard. Drawing an elephant with four complex parameters .American Journal of Physics, 2010.
长按订阅,获得更新
可以通过“原文” 查看文中链接和Github源码。
领取专属 10元无门槛券
私享最新 技术干货