社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

题库 | 提高深度学习模型的训练效果有什么好的方式?

AI职通车 • 6 年前 • 541 次点击  

记得点击蓝字,关注我们呀~
AI 研习社为大家汇总了常见的计算机视觉面试题目,希望对大家有所帮助,欢迎大家在评论下方提出宝贵的建议~

  题目1:如何改善训练模型的效果?

1、通过提升数据,获取良好的数据。对数据预处理;零均值 1 方差化,数据扩充或者增强。

2、诊断网络是否过拟合欠拟合。通过偏差方差。正则化解决过拟合,早停法遏制过拟合。

3、通过学习率,激活函数的选择,改善网络全连接层个数啊层数啊,优化算法,随机梯度,RMSprop, 动量,adam,使用 batchnormlization。

4、权值初始化 Xavier 初始化,保持输入与输出端方差一致,避免了所有输出都趋向于 0。


  题目2:提高深度学习模型的训练效果有什么好的方式?

1:优化器。机器学习训练的目的在于更新参数,优化目标函数,常见优化器有 SGD,Adagrad,Adadelta,Adam,Adamax,Nadam。其中 SGD 和 Adam 优化器是最为常用的两种优化器,SGD 根据每个 batch 的数据计算一次局部的估计,最小化代价函数。

学习速率决定了每次步进的大小,因此我们需要选择一个合适的学习速率进行调优。学习速率太大会导致不收敛,速率太小收敛速度慢。因此 SGD 通常训练时间更长,但是在好的初始化和学习率调度方案的情况下,结果更可靠。

Adam 优化器结合了 Adagrad 善于处理稀疏梯度和 RMSprop 善于处理非平稳目标的优点,能够自动调整学习速率,收敛速度更快,在复杂网络中表现更优。

2:学习速率。学习速率的设置第一次可以设置大一点的学习率加快收敛,后续慢慢调整;也可以采用动态变化学习速率的方式(比如,每一轮乘以一个衰减系数或者根据损失的变化动态调整学习速率)。

3:dropout。数据第一次跑模型的时候可以不加 dropout,后期调优的时候 dropout 用于防止过拟合有比较明显的效果,特别是数据量相对较小的时候。

4:变量初始化。常见的变量初始化有零值初始化、随机初始化、均匀分布初始值、正态分布初始值和正交分布初始值。一般采用正态分布或均匀分布的初始化值,有的论文说正交分布的初始值能带来更好的效果。实验的时候可以才正态分布和正交分布初始值做一个尝试。

5:训练轮数。模型收敛即可停止迭代,一般可采用验证集作为停止迭代的条件。如果连续几轮模型损失都没有相应减少,则停止迭代。

6:正则化。为了防止过拟合,可通过加入 l1、l2 正则化。从公式可以看出,加入 l1 正则化的目的是为了加强权值的稀疏性,让更多值接近于零。而 l2 正则化则是为了减小每次权重的调整幅度,避免模型训练过程中出现较大抖动。

7:预训练。对需要训练的语料进行预训练可以加快训练速度,并且对于模型最终的效果会有少量的提升,常用的预训练工具有 word2vec 和 glove。

8:激活函数。常用的激活函数为 sigmoid、tanh、relu、leaky relu、elu。采用 sigmoid 激活函数计算量较大,而且 sigmoid 饱和区变换缓慢,求导趋近于 0,导致梯度消失。sigmoid 函数的输出值恒大于 0,这会导致模型训练的收敛速度变慢。

tanh 它解决了 zero-centered 的输出问题,然而,gradient vanishing 的问题和幂运算的问题仍然存在。

relu 从公式上可以看出,解决了 gradient vanishing 问题并且计算简单更容易优化,但是某些神经元可能永远不会被激活,导致相应的参数永远不能被更新(Dead ReLU Problem);leaky relu 有 relu 的所有优点,外加不会有 Dead ReLU 问题,但是在实际操作当中,并没有完全证明 leaky relu 总是好于 relu。

elu 也是为解决 relu 存在的问题而提出,elu 有 relu 的基本所有优点,但计算量稍大,并且没有完全证明 elu 总是好于 relu。

9:特征学习函数。常用的特征学习函数有 cnn、rnn、lstm、gru。cnn 注重词位置上的特征,而具有时序关系的词采用 rnn、lstm、gru 抽取特征会更有效。gru 是简化版的 lstm,具有更少的参数,训练速度更快。但是对于足够的训练数据,为了追求更好的性能可以采用 lstm 模型。

10:特征抽取。max-pooling、avg-pooling 是深度学习中最常用的特征抽取方式。max-pooling 是抽取最大的信息向量,然而当存在多个有用的信息向量时,这样的操作会丢失大量有用的信息。

avg-pooling 是对所有信息向量求平均,当仅仅部分向量相关而大部分向量无关时,会导致有用信息向量被噪声淹没。针对这样的情况,在有多个有用向量的情形下尽量在最终的代表向量中保留这些有用的向量信息,又想在只有一个显著相关向量的情形下直接提取该向量做代表向量,避免其被噪声淹没。那么解决方案只有:加权平均,即 Attention。

11:每轮训练数据乱序。每轮数据迭代保持不同的顺序,避免模型每轮都对相同的数据进行计算。

12:batch_size 选择。对于小数据量的模型,可以全量训练,这样能更准确的朝着极值所在的方向更新。但是对于大数据,全量训练将会导致内存溢出,因此需要选择一个较小的 batch_size。

如果这时选择 batch_size 为 1,则此时为在线学习,每次修正方向为各自样本的梯度方向修正,难以达到收敛。batch_size 增大,处理相同数据量的时间减少,但是达到相同精度的轮数增多。实际中可以逐步增大 batch_size,随着 batch_size 增大,模型达到收敛,并且训练时间最为合适。

PS:查看完整版,请点击链接:

https://www.yanxishe.com/blogDetail/17384

PPS:部分内容来源于网络,如有侵权,请联系我删除!


今日份最佳雇主候选推荐



点击 阅读原文,开始投票。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/53409