现在,我们已经有了一套完备的代码,那么我们可以通过调整这套代码,看一下各项参数等对训练结果的影响。
首先,我们先看一下参数epochs。这个参数实际就是训练数据用来跑了几遍。之前是设置为5,我们现在设置为不同的看一下。
首先我们先设置一下初始参数。如果每次都把训练集的数据跑一遍,那就跑的太慢了,所以训练集进行了精简,保留了前6000条(10%的数据量,结果不可能太差,并且速度会更快)。测试集数据取全集,这块因为只跑一遍,并不会有大的影响。学习率设置为0.2。
好了,我们现在开始吧。我们将epochs设置为1,2,3,5,8,12,16,20,30,50看一下效果。
1:92.05%????????2:93.08%????????3:93.79%????????5:94.59%????????8:94.71%
12:95%????????16:95.21%????????20:94.69%????????30:95.08%? ? 50:94.79%
有点很奇怪的是,书上的结论说,随着迭代次数的增加,虽然会出现一个蜜月期(6-7次迭代),但再往后就会下落。但是当我仅用了6000条数据的时候,却没有很快出现这个问题,而是到了30-50次迭代才开始有所下降(也不算明显)。
请看书上的插图:
而且随着学习率的降低(当然不是量级的变化),性能能进一步提升,但是迭代次数的蜜月期一般就只是在6-7的样子,比较稳定。
大家也可以动手跑一下,尤其是电脑性能更好的可能能跑的更快,那就试验下全集。我这里只是给大家打个样。像迭代次数这样的超参数,实际也没有一个定论到底多少是合适的,比如对于这个数据集可能6-7是合适的,对于不同的数据集这个迭代次数的蜜月期可能完全不同。
学习率也是一样。
好了现在我们看下学习率。首先先把迭代次数调到12次(是个比较好的效果区域)。
我们测试学习率,按 2.0,1.0,0.8,0.4,0.2,0.1,0.05,0.01,0.001,0.0001看下效果。
2.0:其实这个值是不对的,学习率还是要低于1,跑模型的时候sigmoid都报告警了,不过结果还是跑出来了一个74.71%,勉强吧。
1.0:也差不多,只是不会报错,79.76%;
0.8:90.85%? ? ? ? 0.4:94.44%? ? ? ? 0.2:95%? ? ? ? 0.1:94.69%,0.05:94.68%
0.01:92.58%? ? ????0.001:88.95%? ? ? ? 0.0001:82.02%
可以看出,在学习率0.4-0.05这一段是比较合适的,其中0.2最高。当然这个也不是一定的,也要看数据集和模型,然后可以通过一定的倍数(比如2-3倍,或者就是数量级的变化每次差10倍),来进行尝试,找到最合适的学习率。选择好的学习率,会让你的模型最终输出的结果更好一些,这是不是很神奇?
计算机拥有强大的计算能力,能让我们一遍遍的调整超参数(而且还不止一个),找到最合适的结果。但是至少从当前来看,即便计算机以各种方式提升模型效果,仍然和人类的基础本能存在差异,尤其是需要大量并行处理,或者是需要一定的分析的场景如语义理解。所以,将计算机的神经网络模型,等同于生物学上的神经网络的模拟,是不对的,它们其实是在走两条不同的路。