我刚接触DNN领域,对调整超参数和其他参数感到非常厌烦,因为需要调整的参数太多了,这就像在没有计算机帮助下的多变量分析。面对DNN内部庞大的变量,人类如何才能达到任务的最高准确度?我们如何知道使用DNN能达到的准确度是多少,还是我必须放弃DNN?我迷失了。欢迎提供帮助。
我的主要问题是:
1. DNN的极限在哪里 / 什么时候我们必须放弃DNN2. 调整参数的正确方法是什么,以免错过好的参数值
这是我在这个领域学习理论后得出的总结。如果我有误解或理解错误,欢迎纠正。你也可以补充我遗漏的部分。根据我的知识,按重要性排序如下。
针对过拟合 –
1. 减少层数2. 减少层的节点数3. 添加正则化器(l1/ l2/ l1-l2) - 需要决定因子4. 添加 dropout 层并 - 需要决定 dropout 因子5. 减小批次大小6. 提前停止
针对欠拟合
1. 增加层数2. 增加层的节点数3. 添加不同类型的层(卷积层、LSTM等)4. 添加学习率衰减(决定类型和类型的参数)5. 降低学习率
除此之外,我们通常可以做的是,
1. 轮数(通过观察模型训练时的表现)2. 调整学习率3. 批量归一化 - 用于快速学习4. 初始化技术(零/随机/Xavier/he)5. 不同的优化算法
自动调整方法
- Gridsearchcv - 但对于这个,我们必须选择想要更改的内容,并且这需要很多时间。
回答:
简短回答:你应该进行大量的实验!
详细回答:起初,你可能会因为有太多可以调整的旋钮而感到不知所措,但你会逐渐积累经验。快速获得关于如何调整模型超参数的直觉的方法是尝试复制其他研究人员已经发表的内容。通过复制结果(并尝试超越现有水平),你会获得关于深度学习的直觉。
就我个人而言,我在调整模型超参数时并没有特定的顺序。相反,我会尝试实现一个粗糙的模型,然后尝试改进它。例如,如果我看到验证准确度有过冲,这可能表明模型在最佳点附近波动,我会将学习率除以十,看看效果如何。如果我看到模型开始过拟合,我会使用提前停止来保存过拟合前的最佳参数。我还会在 dropout 率和权重衰减之间进行调整,以找到最佳组合,使模型足够拟合的同时保持正则化效果。依此类推。
为了纠正你的一些假设,添加不同类型的层并不一定会帮助你的模型避免过拟合。此外,有时(特别是在使用当今流行的迁移学习时),你不能简单地向神经网络添加卷积层。
假设你在处理计算机视觉任务,数据增强是另一种有用的方法,可以增加可用于训练模型的数据量,并提升其性能。
另外,请注意批量归一化也有正则化效果。权重衰减是l2正则化的另一种实现方式,广泛使用。
另一个可以改善神经网络训练的有趣技术是学习率和动量(如果适用)的一周期策略。查看这篇论文:https://doi.org/10.1109/WACV.2017.58