神经网络超参数调优 – 设置随机种子是否是个好主意?

我在练习中尝试调整一个基本的神经网络。(基于Coursera课程的一个例子:Neural Networks and Deep Learning – DeepLearning.AI)我遇到了随机权重初始化的难题。假设我想调整网络中层的数量。我有两个选择:

  • 1.: 将随机种子设置为固定值
  • 2.: 在不设置种子的情况下多次运行我的实验

两种方法各有优缺点。我最大的担忧是,如果我使用随机种子(例如:tf.random.set_seed(1)),那么确定的值可能会“过度拟合”到种子,并且在没有种子或更改值的情况下可能无法正常工作(例如:tf.random.set_seed(1) -> tf.random.set_seed(2))。另一方面,如果我在没有随机种子的情况下多次运行我的实验,那么我可以检查的选项较少(由于计算能力有限),并且仍然只能检查可能的随机权重初始化的子集。在两种情况下,我都觉得运气在过程中起着重要作用。

处理这个问题有没有最佳实践?

TensorFlow 是否有内置的工具用于此目的?我很感激任何描述或教程的来源。提前感谢!


回答:

你的问题并没有绝对的对错答案。你几乎已经自己回答了这个问题。然而,在接下来的内容中,我将通过以下几点进行更详细的扩展:

  1. 随机初始化的目的是为了打破对称性,这是导致神经网络无法学习的原因:

…唯一可以完全确定的是,初始参数需要“打破”不同单元之间的对称性。如果两个具有相同激活函数的隐藏单元连接到相同的输入,那么这些单元必须具有不同的初始参数。如果它们的初始参数相同,那么应用于确定性成本和模型的确定性学习算法将始终以相同的方式更新这两个单元…Deep Learning (Adaptive Computation and Machine Learning series)

  1. 因此,我们需要神经网络的组件(特别是权重)被不同的值初始化。有一些关于如何选择这些值的经验法则,例如Xavier初始化,它从均值为0的正态分布中采样,基于网络层的数量选择特定的方差。这是一篇非常有趣的文章值得一读

  2. 尽管如此,如果按照第2点中提到的适当规则,初始值很重要但不是极其关键的。它们很重要,因为过大或不当的初始值可能导致梯度消失或爆炸问题。另一方面,不同的“适当”权重不应该极大地改变最终结果,除非它们引起了上述问题,或者使神经网络陷入某些局部最大值。然而,请注意,后者还取决于许多其他方面,例如学习率、使用的激活函数(一些函数比其他函数更容易爆炸/消失:这是一个很好的比较)、神经网络的架构(例如全连接、卷积等:这是一篇很酷的论文)以及优化器。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注