必看 | 全连神经网络的经典实践——补充内容

上一节已经实现了用神经网络完成MNIST手写数字识别任务,本节主要是讲解以下遗留问题,以及在神经网络设计上的一些细节。

超参数和验证集

一般而言,对于一个机器学习算法,我们通常会设置一些参数来控制算法本身的行为,习惯上将这些参数称为“超参数”,比如上一节开头设置的初始学习率、学习率衰减以及迭代的轮数等都属于超参数。与权重参数和偏置参数不同,超参数的值不是通过学习算法本身学习得来的,而是我们在程序一开始预先设定好的。在一些特殊的情况下,我们也可以在学习过程中设计个嵌套的学习过程,这个嵌套的学习过程学习超参数的取值,但是一般不会涉及这些高阶的内容。出于两点原因,我们会将一个参数设置为超参数:第一,它非常难以优化;第二,它必须作为一个超参数出现。为了能合理地设置超参数,一般会选择多次试验的方法,通过在模型中尝试不同的超参数并得到模型在测试集上的准确率来评判模型的效果。但是测试集中的样本不能以任何的形式参与到模型的训练过程中,因为经过训练的网络不仅要对己经观测到的数据能够做出正确的预测,还要能够对没有观测到的数据具有预测能力,所以测试集对于网络来说应该是未知的。为了能在训练过程中评估模型效果以方便对超参数的设置,我们需要一些同样是模型无法观测到的样本数据,这些样本数据就是验证集(Validation Set)的样本数据。测试集的样本数据无法被作为验证集的样本数据使用。基于这个原因,我们通常从训练集中划分出一部分的样本来构成验证集。严格来说,训练集中划分出的两个集合是不相交的。训练集会提供给模型用于训练的样本,模型通过训练达到学习并修正参数取值的目的。验证集会提供给模型用于验证的样本,模型通过验证的过程会给出一些性能信息(如打印出的准确率),根据这些信息我们可以估计出训练中或训练后的泛化误差程度,这都可以作为我们更新超参数的依据。通常,我们会在原始的训练集样本中划分出20%的量组成验证集。也有一种被称为交叉验证(Cross Validation)的方法,这一般会出现在数据集较小的情况下。

与简单模型的对比

在前面设计神经网络时,我们应用了多种优化方法,如L2正则化、滑动平均模型以及学习率衰减等,这些优化方法为提高模型在测试集上的预测正确率做出了一定的贡献。同时增加隐藏层提高了网络解决复杂问题的能力。假如我们不使用这些优化方法,最终训练出来的模型是什么效果呢?我们可以尝试编写一个简单的神经网络来完成MNIST手写数字识别任务,来比较一下有无优化方法的模型之间的效果区别。所以我们直接将数据集的样本数据以及 label 输入到网络中,然后计算softmax分类结果与交叉熵损失,之后通过随机梯度下降优化器反向传播梯度计算结果。在这个 SGD 中,学习率被设置为固定的0.2。在这些步骤都完成后,接下来的操作就是定义准确率的计算以及在会话内运行模型的训练、验证和测试的过程,代码如下:

在这里插入图片描述
在这里插入图片描述
代码中去掉了隐藏层,L2正则化,滑动平均模型,最终打印结果如下:

在这里插入图片描述
可以看出最终的精确度有所下降,所以可以证明优化方法对模型是有一定的效果的。

码字不易,点个赞支持一下,谢谢
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值