你都有哪些炼丹神器深度学习(rnn、cnn)调参的经验?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了你都有哪些炼丹神器深度学习(rnn、cnn)调参的经验?相关的知识,希望对你有一定的参考价值。

对于 rnn 和 cnn 这种深度学习模型,常用的炼丹神器可能包括:

    调节学习率:学习率较小可以保证模型在训练时稳定,但是训练速度较慢;学习率较大可能会使模型在训练时快速收敛,但是有可能导致过拟合。

    调节隐藏单元数量:隐藏单元较多可以增加模型的表示能力,但是有可能导致过拟合。

    调节激活函数:激活函数的选择会影响模型的表示能力和泛化能力。

    调节正则化系数:正则化系数较大可以降低模型的复杂度,但是有可能导致模型表示能力降低。

    调节批量大小:批量大小较小可以使模型更稳定,但是训练速度较慢;批量大小较大可以提升训练速度,但是有可能导致模型的泛化能力下降。

    常用的调参方法包括网格搜索、随机搜索和贝叶斯优化等。

参考技术A Massive Exploration of Neural Machine Translation Architectures(NMT 里各个超参的影响)
Training Tips for the Transformer Model(训练 Transformer 时会发生的各种现象)
RoBERTa: A Robustly Optimized BERT Pretraining Approach(BERT 预训练技巧,虽然跟大部分人没啥关系)
CV 我不算太熟,不过也可以勉强推荐几篇:
Training ImageNet in 1 Hour(大批量训练技巧)
Bag of Tricks for Image Classification with Convolutional Neural Networks(各种训练技巧集大成)
Bag of Freebies for Training Object Detection Neural Networks(同上)
EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks(当前对参数利用最有效的 CNN,类似地还有一篇 EfficientDet)
6、初始学习率:
有时受 batch size、sequence length 各种因素的影响,loss 很大(比如说好几万),对于这种数字人是没有数感的,建议首先计算一下 per token loss(如果是多任务,可以每个任务单独算;类似地,某些 CV 任务可以计算 per pixel loss),心里有点感觉。脱离损失函数的形式谈学习率没有意义(例如单是对 batch size 求和或者取平均这个差异就会使梯度差成百上千倍)。
参考技术B 预处理(数据尺寸,数据Normalization)
Batch-Size
学习率
优化器
损失函数
激活函数
Epoch
权重初始化

深度学习调参都有哪些技巧

深度学习调参有哪些技巧?


下面就分享一些自己的深度学习模式调试技巧(主要是CNN)。

由于某些需要,我最近参加了一些CNN建模和调优任务。 由于我个人的习惯,我不习惯深度调试,通过一个简单的试错法学习模式,往往给人一种“黑盒子”的印象,需要一些时间来关注深度的学习和调试 学习模型以及数据的可视化(可视化和模型调试之间有很强的联系,所以后面我没有区分这两者)本文也是对这些任务的总结。

我自己本就是一个学习计算机体系结构,有这样的专业背景,中途转行做算法策略,所以其实我对大型机器学习系统在开发建设方面的训练和加速有更多的兴趣和关注。 然而,机器学习系统和常规系统基础设施(如Redis / LevelDB和一些分布式计算基础设施等)的这个领域仍然不同,虽然可以说它是一个基础设施,但它运行在这个基础设施上业务问题 有更强有力的直接关系,所以我也花点精力专注于数据,业务建模的技术进步和实际的问题场景。

最后,让我谈谈我的感受。 卷积神经网络自从2012年在ImageNet竞赛中作为AlexNet模型出现以来,已经成为图像识别领域的标准。 即使是文字和音频领域也开始使用卷积神经网络进行建模。 然而,以卷积神经网络为代表的深度神经网络被批评为“黑盒子”,给行业DL模型的应用和推广带来一些障碍。

参考技术A 你好
获取数据:确保要有高质量的输入/输出数据集,这个数据集要足够大、具有代表性以及拥有相对清楚的标签。缺乏数据集是很难成功的。
预处理:将数据进行集中是非常重要的,也就是要使数据均值为0,从而使每个维度的每次变动为1。有时,当输入的维度随量级排序变化时,最好使用那个维度的log(1+x)。基本上,重要的是要找到一个0值的可信编码以及自然分界的维度。这样做可使学习工作得更好。情况就是这样的,因为权值是通过公式来更新的:wij中的变化 \propto xidL/dyj(w表示从层x到层y的权值,L是损失函数)。如果x的均值很大(例如100),那么权值的更新将会非常大,并且是相互关联的,这使得学习变得低劣而缓慢。保持0均值和较小的方差是成功的关键因素。
批处理:在如今的计算机上每次只执行一个训练样本是很低效的。反之如果进行的是128个例子的批处理,效率将大幅提高,因为其输出量是非常可观的。事实上使用数量级为1的批处理效果不错,这不仅可获得性能的提升同时可降低过度拟合;不过这有可能会被大型批处理超越。但不要使用过大的批处理,因为有可能导致低效和过多过度拟合。所以我的建议是:根据硬件配置选取适合的批处理规模,量力而为会更加高效。
梯度归一化:根据批处理的大小来拆分梯度。这是一个好主意,因为如果对批处理进行倍增(或倍减),无需改变学习率(无论如何,不要太多)。
学习率计划:从一个正常大小的学习率(LR)开始,朝着终点不断缩小。

满意请采纳本回答被提问者采纳
参考技术B 参数初始化:可以先用随机初始化的方式训练一个简单的网络模型,再将训练好的权值初始化给复杂的网络模型,复杂的网络模型采用高斯初始化可能会更好

以上是关于你都有哪些炼丹神器深度学习(rnn、cnn)调参的经验?的主要内容,如果未能解决你的问题,请参考以下文章

deep learning(rnncnn)调参的经验?

深度学习调参都有哪些技巧

深度学习调参(炼丹)指南来了!

深度学习调参有哪些技巧?

深度学习杂谈(调参损失函数trick正负样本...)

RNN概述-深度学习 -神经网络