machine-learning - 深度神经网络 - 要调整的参数顺序
问题描述
我是这个 DNN 领域的新手,我厌倦了在 DNN 中调整超参数和其他参数,因为要调整很多参数,这就像没有计算机帮助的多变量分析。由于 DNN 中存在大量变量,人类如何朝着使用 DNN 的任务所能达到的最高精度迈进。我们如何知道使用 DNN 可以获得什么准确度,还是我必须放弃 DNN?我搞不清楚了。帮助表示赞赏。
我遇到的主要问题:
1. What are the limits of DNN / when we have to give up on DNN
2. What is the proper way of tunning without missing good parameter values
这是我通过学习该领域的理论得到的总结。如果我错了或被误解,我们将不胜感激。您可以添加我错过的任何内容。根据我的知识按重要性排序。
对于过拟合 -
1. reduce the number of layers
2. reduce the number of nodes of layers
3. add regularizers (l1/ l2/ l1-l2) - have to decide the factors
4. add dropout layers and -have to decide the dropout factor
5. reduce batch size
6. stop earlier
对于欠拟合
1. increase the number of layers
2. increase number of nodes of layers
3. Add different types of layers (Conv, LSTM, ...)
4. add learning rate decay (decide the type and parameters for the type)
5. reduce the learning rate
除了我们通常可以做的,
1. number of epochs (by seeing what is happening while model training)
2. Adjust Learning Rate
3. batch normalization -for fast learning
4. initializing techniques (zero/ random/ Xavier / he)
5. different optimization algorithms
自动调整方法
- Gridsearchcv - but for this, we have to choose what we want to change and it takes a lot of time.
解决方案
简短的回答:你应该做很多实验!
长答案:起初,您可能会因拥有大量可以调整的旋钮而不知所措,但您会逐渐变得有经验。一种快速获得关于如何调整模型超参数的直觉的方法是尝试复制其他研究人员发表的内容。通过复制结果(并尝试改进最先进的技术),您可以获得关于深度学习的直觉。
我个人在调整模型的超参数时没有遵循特定的顺序。相反,我尝试实现一个肮脏的模型并尝试改进它。例如,如果我发现验证准确度出现过冲,这可能表明模型在最佳点附近反弹,我将学习率除以 10,然后看看它是如何进行的。如果我看到模型开始过拟合,我会在过拟合之前使用提前停止来保存最佳参数。我还使用辍学率和权重衰减来找到它们的最佳组合,以便在保持正则化效果的同时使模型足够适合。等等。
为了纠正您的一些假设,添加不同类型的层不一定有助于您的模型不过度拟合。此外,有时(尤其是在使用迁移学习时,这是当今的一种趋势),您不能简单地将卷积层添加到您的神经网络中。
假设您正在处理计算机视觉任务,数据增强是另一种有用的方法,可以增加可用数据量来训练您的模型并执行其性能。
另外,请注意,Batch Normalization 也具有正则化效果。权重衰减是另一种被广泛使用的 l2 正则化实现。
另一种可以改善神经网络训练的有趣技术是用于学习率和动量的 One Cycle 策略(如果适用)。看看这篇论文:https://doi.org/10.1109/WACV.2017.58
推荐阅读
- javascript - 如何为拖动和滚动添加平滑度
- python - 如何制作一个测试大量数据的高效程序
- java - 共享首选项仅适用于首次应用重启。在重新启动应用程序第二次卡视图标题不保留
- azure - Azure DevOps:使用变量填写“Azure 订阅”字段
- django - 使用 Django 和 Nginx 将 HTTP 正确重定向到 HTTPS
- selectors-api - queryselectorall 不返回所有元素
- java - 如何使用本身加密的私钥/密码加密数据?
- firebase - Cloud Functions bucket.upload() 根本没有运行
- matlab - 创建重叠时间间隔的最佳选择
- c++ - “Python 异常
没有名为 _M_dataplus 的成员。”尝试打印字符串时