machine-learning - 如何分解大型网格搜索?
问题描述
我希望为不同的神经网络配置运行一个非常大的网格搜索。完整地说,使用我当前的硬件运行是不切实际的。我知道可能有比朴素网格搜索更好的技术(例如随机、贝叶斯优化),但是我的问题是我们可以对首先包含的内容做出哪些合理的假设。具体来说,就我而言,我希望在
- A:隐藏层数
- B:隐藏层的大小
- C:激活函数
- D:L1
- E: L2
- F:辍学
我的一个想法是(1)c
通过在 AC 上运行网格搜索来识别网络配置,(2)选择 c
具有最低(例如 MSE)错误(针对测试数据集),以及(3)通过配置运行c
网络在 DF 上进行单独的网格搜索,以确定最合适的正则化策略。
在这种情况下,这是一种明智的方法吗?还是理论上我可以通过使用在第一次网格搜索(即 AC)中显示出更高错误的网络配置来获得更低的最终错误(即在正则化之后)?
解决方案
你提到的是一种合理的方法。它类似于用于选择特征的所谓的贪婪前向特征选择方法。在您的情况下,它是模型参数而不是特征。
这个想法是有效的,并且在实践中被广泛使用。无论你的硬件多么强大,它永远都不足以尝试可能的组合,这基本上是无限的。
然而,这种方法并不能保证第一次网格搜索中最好的那个将是总体上最好的。正如您所说,您可以通过使用在第一次网格搜索中具有较高错误的 netfork 配置来获得较低的最终错误。但在实践中,差异应该不大。
我建议你从基本参数开始。比如学习率,或者优化器。它们的效果应该远远超过其他参数,如激活函数、隐藏层数(如果您不是比较单层与非常深的网络,而是比较 1-2 层的差异)。当您找到最佳配置时,您应该再次尝试重要的配置(lr、优化器),同时保持找到的配置相同。
推荐阅读
- cryptography - 从未使用 geth 加密包生成的 secpk256 公钥获取以太坊地址
- sql - sql查询基于where子句中的多列组合并处理'IN'或Not In运算符
- asterisk - Asterisk 编解码器 G.711.1
- python - BBox标签工具
- powershell - Powershell import-module 找不到模块 Configci
- docker - 为什么我有 tidy 缺少运行 docker 容器的错误
- javascript - 如何访问使用装饰器的对象?
- angular - 激活星云主题选项卡
- apache-zeppelin - 如何在封闭网络中设置 Hellium
- php - Wordpress 传输到仅加载 wp_header 元素的子域上的实时 Web 服务器