城子河新闻网

首页 > 正文

深度学习100问之提高深度学习模型训练效果(调参经验)

www.wfradio.com.cn2020-03-05

欢迎使用公用号码:程序员关]

语句

1)本文仅供学术交流,不作商业用途。因此,每个部分的具体参考材料在细节上并不一致。如果某个部分无意中侵犯了每个人的利益,还是希望韩海联系博客作者将其删除。

2)博客只是肤浅的。如果文章中有任何不妥之处,请指出并共同进步。谢谢你。

3)这是第一个版本。如果有任何错误,您需要继续修改、添加或删除。我希望你能给我更多的建议。我们都分享一点点,为祖国科学研究的进步做出贡献。

文章目录欢迎使用公用号码:程序员关]语句: ZAP :序言:art: 1,网络结构:card_file_box: 2,数据:rocket: 3,学习率: crank : 4,优化器:tada: 5,初始化:pencil: 6,训练轮数 批量:sparkles: 14,显卡:rocket: 15,summary

0,Preamble

最近,在炼丹过程中,我验证了疾病,并找到了一些方法来提高深度学习网络模型的训练效果。 我想和你分享它们。

1。网络结构

首先,我认为最重要的是确定你的总体网络结构,因为除了主流方向,如简历和自然语言处理,其他方向才刚刚开始与深入学习相结合。说得委婉一点,这是创新;说得直白一点,这是注水。因此,您需要选择一个主框架结构。此前,你在美国有线电视新闻网(CNN)写了一篇广受欢迎和高度赞扬的文章《大华卷积神经网络》(全是干货)。如果你需要童鞋,你可以看看。

例如,因为个人实践的方向类似于划分领域,所以尝试的更有效的网络结构是:

你认为它看起来像炼丹炉=-=,而我们是炼丹师。

2,数据

事实上,这个问题是我一直好奇的。对于当前的监督学习,分数的质量决定了最佳学习结果的程度,即最终网络输出结果的质量。

根据公认的原则,没有免费的午餐,没有数据或应用场景,任何算法都不能谈论效果。该算法的最终目的是适应这种趋势或分布。不同数据集的特征分布是不同的,甚至同一数据集的划分方法和比例的不同也会导致特征分布的不同。

所以我仍然记得看到一个大老板说这个行业的培训效果正在提高,数据占了很大一部分。事实上,可以理解,如果你能更好地处理数据,最终的训练效果会更好!

有几种常用的方法,例如:

手动注释。众所周知,人们花钱进行多重包装。特别有名的应该是:另一个是让实验室的小弟帮忙。咳咳。

适当的预处理,我们熟悉的是数据清洗、降噪;另一个是删除冗余数据,减少过度拟合。

等等。

我写了一篇深度学习的入门笔记(9):一篇关于深度学习数据处理的热门文章。如果需要的话,我可以看看。

3。学习率

已设置。建议首次将初始学习率设得高一点,这样可以加快收敛速度,节省时间,快速得到最优解,然后再慢慢调整。例如,学习速率是动态变化的,这通常称为学习速率衰减。例如,每轮乘以一个衰减系数,或者根据损耗的变化动态调整学习速率等。可以避免后期振荡,使模型的训练更加稳定。

我之前写了一篇关于深入研究100个问题后学习率下降的热门文章。如果有必要,我可以看看童鞋。

4。优化器

常见的优化器包括等。

总和优化器是最常用的两种优化器:

根据每个数据计算一个局部估计值,以最小化成本函数。由于学习速度决定了每一步的大小,训练时间通常较长,但有一个良好的初始

上图是不同优化器的比较。您可以通过图片更直接地看到比较结果!

5。初始化

公共变量初始化包括零值初始化、随机初始化、均匀分布初始化、正态分布初始化、正交矩阵初始化、截断正态分布初始化和初始化、初始化等。

通常使用正态分布初始化或截断正态分布初始化。有些论文认为正交分布的初始值可以带来更好的效果等。个人的结论各不相同,但在做实验时还是有必要尝试一下。例如,最近一次尝试的初始化和初始化效果比以前的更好。真是意外。

我写了一篇关于深度学习的入门笔记(12):一篇关于体重初始化的热门文章。如果需要的话,我可以看看。

6。训练轮数

理论上,当模型收敛时迭代可以停止,所以验证集通常被用作停止迭代的条件。如果连续几轮模型损失没有相应减少,迭代停止。

或者简单而粗略地设置更多的迭代,保存更多的模型,然后根据损失函数曲线判断哪一轮是最好的结果。

之前,我写了一篇关于如何解决神经网络中的几个拟合方法的热门文章,深度学习了100个问题。如果你需要童鞋,你可以看看。

7。第一次运行模型时,可能不会添加drop

data,但它可用于防止后期优化过程中的过度拟合,尤其是当数据量相对较少时。

的缺点是需要将训练集分成不同的子集并输入到每次迭代中,这需要更大的训练集,因此当训练集很小时,退出可能不会很好地工作。

众所周知,扩大数据集是最好的正则化方法,因此当扩大数据集时,丢失的计算成本可能高于它带来的正则化效果,这要求我们在实际使用场景中进行权衡。

之前,我写了一篇关于如何解决神经网络中的几个拟合方法的热门文章,深度学习了100个问题。如果你需要童鞋,你可以看看。

?8.正则化

为了防止过度拟合,可以添加正则化,如上图所示。

从公式中可以看出:

增加正则化的目的是加强权重的稀疏性,使更多的值接近零。

添加正则化的目的是减少每个权重的调整范围,避免在模型训练过程中出现较大的抖动。

之前,我写了一篇关于如何解决神经网络中的几个拟合方法的热门文章,深度学习了100个问题。如果你需要童鞋,你可以看看。

9。预训练

预训练待训练数据可以加快训练速度,略微提高模型的最终效果。

也就是说,首先训练一个稍差的模型,然后把它注入到模型中,继续训练,直到获得更好的结果。常见的场景包括比赛、做活动等。为了在短时间内取得好的效果,需要一个更好的模型来快速使用。例如:

在以前看过的医学鉴定图像比赛中,很多人都是在上述的基础上做迁移学习,并首先导入相应的权重进行预训练,这样取得了很好的效果。

机器学习的方向也接触到一个例子,即预先训练直接建立的两层全连通网络,然后继续训练训练的模型,直到损失函数几乎不变。

10。激活功能

常用的激活功能有。

使用的场景不多,现在会有更多的人使用激活功能。从公式中可以看出,问题得到了解决,计算简单且易于优化(深入学习,100个问题,对消失/爆发梯度的深入理解),但某些神经元可能永远不会被激活,导致相应的参数永远不会更新()。

因此,必须注意的是,人们不能盲目相信一个函数被用到最后的情况。例如,在我的领域,图像中有负数。如果只使用它,那么负半轴的数据将永远无法被正确恢复。

此时,我发现了它的所有优点,而且证明它不会有问题

还有张量流学习笔记的预激活函数原理和代码。

11。特征提取

是深度学习中最常用的特征提取方法。目前,平均汇集似乎在大多数情况下更为常见:

是提取的最大信息向量,但是,当有多个有用的信息向量时,这样的操作会丢失很多有用的信息。

是平均所有的信息向量。当只有一些向量相关,而大多数向量不相关时,它将导致有用的信息向量被噪声淹没。

如果当有多个有用向量时,您想在最终的代表向量中保留尽可能多的有用向量信息,并且如果当只有一个重要的相关向量时,您想直接提取该向量作为代表向量以避免它被噪声淹没,那么唯一的解决方案是:加权平均,即。

12,扰频训练数据

读取数据时,尽量保持每一轮数据的迭代顺序不同,以避免每一轮模型中计算相同的数据,容易过拟合。

建议在将读取的数据转换成矩阵的过程中使用加扰,从而增加数据的随机性。

13,Batch Size

对于小数据量模型,当视频卡有足够的内存时,可以进行全量训练,即批量等于数据量,提高内存利用率,提高大矩阵乘法的并行化效率。最重要的是,确定的下降方向越准确,引起的训练冲击就越小,这样就可以在极值所在的方向上更准确地更新训练。

对于大数据,完整的训练会导致内存溢出,因此需要选择较小的批量。批量太小,耗时太长,梯度振荡严重,不利于收敛。如果批量太大,不同批次的梯度方向不变,容易陷入局部最小值。

如果此时batch_size选择为1,则此时为在线学习,每个校正方向都是各自样本的梯度方向校正,因此很难达到收敛。批量为1的图表非常可怕。过几天我会填一张图表给你看。

这样你就能理解视频卡的重要性了!

?14.图形

深度学习是一个需要高计算能力的领域。这个选择将从根本上决定你的深度学习经历。如果没有,或者更糟,可能需要几个月才能完成整个实验,甚至可能需要几天甚至更长时间才能看到参数调整和模型修改的效果。

在我目前的网络上运行一个实验需要大约10个小时,你能理解=-=。

良好的视频和记忆性能以及快速的训练速度;显卡内存大,训练批次大。当然,你必须考虑你自己的预算和实验室资金,否则,就推荐一个泰坦。

15,Summary

通过上面的总结,您可以看到参数调整需要考虑很多因素。这是一种非常偏向于经验的能力,所以这是多思考、多尝试的正确方式。

在新的一年里,祝你、祝我、祝我们都有更大的进步!

热门浏览
热门排行榜
热门标签
日期归档