首页 > 解决方案 > 神经网络超参数调整 - 设置随机种子是个好主意吗?

问题描述

我正在尝试调整基本的神经网络作为练习。(基于 coursera 课程的示例:神经网络和深度学习 - DeepLearning.AI)我面临随机权重初始化的问题。假设我尝试调整网络中的层数。我有两个选择:

两个版本各有利弊。我最大的担忧是,如果我使用随机种子(例如:),tf.random.set_seed(1)那么确定的值可能会“过度拟合”到种子,并且如果没有种子或者值更改(例如:tf.random.set_seed(1)-> tf.random.set_seed(2). On另一方面,如果我在没有随机种子的情况下运行我的实验更多次,那么我可以检查更少的选项(由于计算能力有限)并且仍然只检查可能的随机权重初始化的一个子集。在这两种情况下,我都觉得运气是一个重要因素进行中。

是否有最佳实践如何处理此主题?

TensorFlow 是否为此目的内置了工具?我感谢任何描述或教程的来源。提前致谢!

标签: tensorflowmachine-learningdeep-learningneural-networkhyperparameters

解决方案


在深度学习(通常是机器学习)中调整超参数是一个常见问题。将随机种子设置为固定数字可确保可重复性公平比较。重复相同的实验将导致相同的结果。您可能知道,避免过度拟合的最佳做法是对数据进行训练测试拆分,然后使用 k 折交叉验证来选择最佳超参数。如果您测试一个超参数的多个值,您需要确保可能影响模型性能的其他情况(例如训练-测试-拆分或权重初始化)对于每个超参数都是相同的,以便公平比较表现。因此,我总是建议修复种子。

现在,问题在于,正如您已经指出的那样,每个模型的性能仍将取决于随机种子,例如您的情况下的特定数据拆分或权重初始化。为了避免这种情况,可以进行重复的 k 折交叉验证。这意味着您多次重复 k 折交叉验证,每次使用不同的种子,选择该运行的最佳参数,测试测试数据并平均最终结果,以获得对性能 + 方差的良好估计,从而消除种子在验证过程中的影响。或者,您可以一次执行 k 折交叉验证并训练每个拆分n 次使用不同的随机种子(消除了权重初始化的影响,但仍然具有训练-测试-拆分的影响)。

最后,TensorFlow 没有为此目的的内置工具。作为练习者,你必须注意这一点。


推荐阅读