深度学习模型,特别是深度神经网络,由多个层次构成,包括输入层、一个或多个隐藏层以及输出层。在开发深度学习模型时,必须选择最优的超参数值,如激活函数、批量大小和学习率等,以便对这些层进行微调。超参数控制学习过程,其值直接影响模型的其他参数,如权重和偏置,进而影响模型的性能。机器学习模型的准确性通常通过微调这些超参数来提高,因此,机器学习研究者必须深入理解这些超参数。
本文将深入探讨上述超参数,并观察它们如何影响模型性能。考虑了“Pima Indian Diabetes Dataset”,该数据集包含了美国亚利桑那州凤凰城附近768名妇女的信息,依赖变量是糖尿病。其中268人属于“阳性”类别,其余500人属于“阴性”类别。数据集包含8个属性:怀孕次数、OGTT(口服葡萄糖耐量测试)、血压、皮肤厚度、胰岛素、BMI(身体质量指数)、年龄和糖尿病家族史。
使用的神经网络结构包括一个8节点的输入层,接着是第一个有12节点的隐藏层,第二个隐藏层有8个节点,所有节点都连接到输出层的单个节点。输出层用于产生二进制输出值,并使用sigmoid激活函数,因为处理的是二分类问题。
下表显示了进行的不同实验设置,以研究超参数对模型性能的影响。批量大小是梯度下降技术中的一个重要超参数,它影响学习算法的动态。在小批量梯度下降中,批量大小设置为大于1且小于训练数据集中的总样本数。在Python中,可以在训练模型时指定批量大小,如下所示:
history = model.fit(X_train, y_train, validation_data=(X_test, y_test), epochs=NB_EPOCHS, batch_size=BATCH_SIZE, verbose=0, shuffle=False)
上述图表显示了使用小批量梯度下降时,不同批量大小的模型在训练和测试数据集上的分类准确性。图表显示,小批量大小5和10通常导致快速学习(在100个周期内训练数据集上的准确性超过0.72),但学习过程波动较大,分类准确性的方差较高。较大的批量大小16和32会减慢学习过程(在100个周期内训练数据集上的准确性低于0.72),但最终阶段(在80到100个周期之间)会产生更稳定的模型,表现为分类准确性的方差较低。
激活函数在神经网络中将输入的加权和转换为网络某层节点的输出。如果不使用激活函数,神经网络就变成了线性回归模型,因为这些函数使输入能够进行非线性转换,使它们能够学习和执行更复杂的任务。常用的非线性激活函数有sigmoid、tanh和ReLU。在Python中,可以使用Keras在构建模型时指定每个隐藏层的激活函数,如下所示:
from keras.models import Sequential
model = Sequential()
model.add(Dense(12, input_dim=8, activation='relu', kernel_initializer='uniform'))
model.add(Dense(8, activation='relu', kernel_initializer='uniform'))
model.add(Dense(1, activation='sigmoid', kernel_initializer='uniform'))
from keras import optimizers
sgd = optimizers.SGD(lr=0.001)
rmsprop = optimizers.RMSprop(lr=0.001)
adagrad = optimizers.Adagrad(lr=0.001)
adam = optimizers.Adam(lr=0.001)
adamax = optimizers.Adamax(lr=0.001)
# 编译模型
model.compile(loss='binary_crossentropy', optimizer=rmsprop, metrics=['accuracy'])