Python数据科学

深度学习入门--超参数优化

2019-04-19  本文已影响4人  爱吃西瓜的番茄酱

神经网络中,除了权重偏置等参数,超参数也是一个很重要的概念。权重偏置可以通过学习自动更新,而超参数必须人为设定。

超参数一般包括:各层的神经元数量、batch大小、学习率或权值衰减等。其中最常用的一个超参数就是学习率lr,在前面各节的学习中,一般设置学习率lr=0.01

调整超参数一般会伴随着很多次的试错,用于调整超参数的数据称为验证数据。验证数据是区别于训练数据和测试数据的。

训练数据用于参数(权重和偏置)的学习;
验证数据用于超参数的性能评估;
测试数据用于最后,确认其泛化能力。

MNIST数据集中只有训练集和测试集,获得验证集的最简单的方法就是从训练数据中事先分割20%作为验证数据。

validation_rate = 0.20
validation_num = x_train.shape[0] * validation_rate
x_train, t_train = shuffle_dataset(x_train, t_train)  # 打乱训练数据
x_val = x_train[:validation_num]
t_val = t_train[:validation_num]
x_train = x_train[validation_num:]
t_train = t_train[validation_num:]

超参数的优化大致有以下四个步骤:

接下来以学习率和权值衰减系数这两个超参数作为优化对象。学习率的初始范围设定为1e-6到1e-3;权值衰减系数的初始范围设定为1e-8到1e-4。用Python表示如下:

weight_decay = 10 ** np.random.uniform(-8, -4)
lr = 10 ** np.random.uniform(-6, -2)
实验结果如下: 实线是验证数据的识别精度,虚线是训练数据的识别精度

从图中可知,直到“Best-5”左右,学习进行的都还顺利,因此,我们观察一下“Best-5”之前的超参数的值:

Best-1(val acc:0.84) | lr:0.009107549843421056, weight decay:1.087256554998607e-06
Best-2(val acc:0.78) | lr:0.008307545298324982, weight decay:9.251749470621621e-06
Best-3(val acc:0.75) | lr:0.009315204712346222, weight decay:2.0373543375477983e-06
Best-4(val acc:0.72) | lr:0.004437068918001415, weight decay:8.082242577466839e-05
Best-5(val acc:0.72) | lr:0.006810033550884976, weight decay:1.1392727714375553e-06

从在各个结果可以看出,学习率在0.001到0.01、权值衰减系数在1e-5到1e-6之间时,学习可以顺利进行。

像这样不断缩小超参数的范围并重复相同的操作,直至最终选择一个合适的超参数的值。

每天学习一点点,每天进步一点点。

上一篇下一篇

猜你喜欢

热点阅读