Neural network 如何设置训练神经网络的学习率
关于在NN中选择隐藏层和单位的数量,请参考此答案:Neural network 如何设置训练神经网络的学习率,neural-network,Neural Network,关于在NN中选择隐藏层和单位的数量,请参考此答案: 帖子建议增加隐藏单位的数量,直到泛化错误开始增加。 但我的问题是学习速度。给定一个隐藏单元的数字值(即图形中的一个数据点或一个特定架构,例如10个隐藏单元),我如何设置学习速率和要训练的历元数? 1.使用固定的学习率(在检查其收敛后,即成本下降),运行n个时期或直到成本(或验证错误)稳定(如果它确实以良好的渐进方式下降) 2.与1相同,提前停止 3.如1或2所示,但在特定(线性或对数)范围内尝试不同的学习速率 4.如图3所示,包括学习率衰减
帖子建议增加隐藏单位的数量,直到泛化错误开始增加。
但我的问题是学习速度。给定一个隐藏单元的数字值(即图形中的一个数据点或一个特定架构,例如10个隐藏单元),我如何设置学习速率和要训练的历元数?
1.使用固定的学习率(在检查其收敛后,即成本下降),运行n个时期或直到成本(或验证错误)稳定(如果它确实以良好的渐进方式下降)
2.与1相同,提前停止
3.如1或2所示,但在特定(线性或对数)范围内尝试不同的学习速率
4.如图3所示,包括学习率衰减
5.如3或4中所述,包括作为正则化的权重衰减,或者更好的是,退出 参数的数量从1增加到5。1是最快的,但听起来并不令人满意(为什么不试试其他学习率?)。3-5个是耗时的。因为如果我不高兴,我需要通过增加隐藏单元的数量来尝试另一种架构。然后重复,直到获得帖子中所示的图表
我是否正确理解和练习了这一点?用于降低泛化错误的学习率可能取决于问题。从以前的经验来看,最佳学习速率可能会根据许多参数而有所不同,这些参数包括历元大小、学习迭代次数、隐藏层和/或神经元的数量以及输入的数量和格式。为了确定所研究的每个问题的理想学习条件,经常使用试错法 过去有一些论文为给定训练数据量、隐藏层、神经元和输出的神经网络参数提供了合理的起点。这可能是一个很好的起点
也许还有其他动态模型可以用来鼓励最小化局部极小值以外的泛化误差。每个问题都有自己的理想参数,需要对参数进行修补或使用某种形式的动态或自动模型来找到理想的参数。用于降低泛化误差的学习率可能取决于问题。从以前的经验来看,最佳学习速率可能会根据许多参数而有所不同,这些参数包括历元大小、学习迭代次数、隐藏层和/或神经元的数量以及输入的数量和格式。为了确定所研究的每个问题的理想学习条件,经常使用试错法 过去有一些论文为给定训练数据量、隐藏层、神经元和输出的神经网络参数提供了合理的起点。这可能是一个很好的起点
也许还有其他动态模型可以用来鼓励最小化局部极小值以外的泛化误差。每个问题都有自己的理想参数,需要修补参数或使用某种形式的动态或自动模型来找到理想的参数。这是一个困难的问题;甚至还有一个机器学习的子领域专门研究这个问题,叫做 解决超参数问题的最基本方法是蛮力搜索(brute force search),在该方法中,您尝试沿网格系统地改变超参数设置(“网格搜索”),并选择最佳设置。这很慢,而且也很烦人,因为似乎应该有更好的方法 关于改进网格搜索,有几种不同的想法:
- 进化方法将一些适应度评分分配给超参数组合,然后尝试重新使用一起表现良好的参数设置组合。我最近在这个营地看到的最流行的方法是
- 贝叶斯方法试图将某种先验分布置于研究者认为对每个超参数合理的值之上。然后,通过评估几个不同的超参数设置,您可以以统计最优的方式将结果性能与先验性能结合起来
- 进化方法将一些适应度评分分配给超参数组合,然后尝试重新使用一起表现良好的参数设置组合。我最近在这个营地看到的最流行的方法是
- 贝叶斯方法试图将某种先验分布置于研究者认为对每个超参数合理的值之上。然后,通过评估几个不同的超参数设置,您可以以统计最优的方式将结果性能与先验性能结合起来
- 这是一个难题;甚至还有一个机器学习的子领域专门研究这个问题,叫做
解决超参数问题的最基本方法是蛮力搜索(brute force search),在该方法中,您尝试沿网格系统地改变超参数设置(“网格搜索”),并选择最佳设置。这很慢,而且也很烦人,因为似乎应该有更好的方法
关于改进网格搜索,有几种不同的想法: