Ten Techniques Learned From fast.ai - 2018
Chinese:称霸Kaggle的十大深度学习技巧
37 Reasons why your Neural Network is not working - 2017
Chinese: 训练的神经网络不工作?一文带你跨过这37个坑
YAO:OK 归一化推荐一看,其他just soso
零均值化:可避免参数梯度过大
归一化:可使不同维度的数据具有大致相同的分布规模
原因:S=W1*x1+W2*x2+b => dS/dW1=x1,dS/dW2=x2参与形成参数的梯度 => x1与x2本身差异巨大会导致梯度差异巨大,影响梯度下降的效果和速度
进一步讲,之所以会影响,是因为在实际操作中为了方便,所有维度共用同一套更新策略,即设置相同的步长,随着迭代进行,步长的缩减也是同步的,这就要求不同维度数据的分布规模大致相同。BTW,理论上讲,不同维度需要设置不同的迭代方案,则不受以上影响了。
初始化:使用非常接近零的随机数初始化参数,以打破网络的对称性
模型集成
Ten Techniques Learned From fast.ai - 2018
Chinese: 10大称霸Kaggle的深度学习技巧
【Great】半天2k赞火爆推特!李飞飞高徒发布33条神经网络训练秘技 - 2019
YAO: HERE HERE HERE HERE HERE HERE
Practical Advice for Building Deep Neural Networks
Chinese: 构建神经网络的一些实战经验和建议
【Great】如何优雅地训练大型模型 - 2020
【Great】听说你不会调参?以TextCNN为例的优化经验Tricks汇总 - 2019
YAO:OK
调优基本方法:用模型在Test上做Badcase分析以发现共性原因。一般从2个角度来解决,一是特征,二是模型结构。对于特征,要做一些特征分析,以找到对某些类别有区分度的特征。要考虑特征与特征之间的结合,如何判断与测试集结果是否相关。
Badcase原因:一般有4种,分别是标注错误、数据分布不平衡、缺乏先验知识、过于依赖A特征
原因归类和排序:按照Badcase原因进行归类,并按频次从高到低排列,也是需要解决问题的优先级。假设依次是:
特征提取方式不一致:统一训练集和测试集的代码,共用一套,并且使用的数据源也要一样,提升了0.4%
过于依赖A特征:基本思想是减少A特征,dropout和数据预处理时都可以
泛化能力差:针对部分文本,增加槽位抽取,比如把'黄渤'和'周星驰'都映射为artist,则两句话都变成了'我要看artist的电影'和'我想看artist的电影',则就不存在泛化能力问题了,当然前提是槽位抽取的准确率要过关!
缺乏先验知识:引入200万外部词表,同时计算'青花瓷'在整体语料中出现在其他类别的频率来部分解决,提升了0.5%
模型优先实操记录:
step-by-step: 夕小瑶版神经网络调参指南 上篇 - 2018
YAO: GREAT GREAT GREAT GREAT GREAT GREAT TO BE CONTINUED …… 做NER项目时再阅读
调参前请务必
learning_rate & num_steps
batch_size & momentum
learning_rate衰减策略
有哪些deep learning(rnn、cnn)调参的经验 - 2019
YAO: HEREHEREHEREHEREHEREHEREHEREHEREHERE
参数初始化:
数据预处理:
训练技巧之梯度:
YAO: HEREHEREHEREHEREHEREHEREHEREHEREHERE
Practical guide to hyperparameters search for deep learning models - 2018
超参数搜索不够高效?这几大策略了解一下
Complete Machine Learning Guide to Parameter Tuning in Gradient Boosting (GBM) in Python - 2016
hyperopt: 机器学习调参神器
Article: Optimizing hyperparams with hyperopt
Article: python调参神器hyperopt
最重要的超参,没有之一
Cyclical Learning Rates for Training Neural Networks - USNavy2017
CLR: Cyclic Learning Rate
Guide to Pytorch Learning Rate Scheduling - 2020
YAO: 赞!主流scheduling,并且有画图!
Using Learning Rate Schedules for Deep Learning Models in Python with Keras - 2016
Understanding Learning Rates and How It Improves Performance in Deep Learning - 2018
关键因素两个:新数据集大小、新数据集和原数据集的相似程度。有四个场景:
小 + 相似:因为小,finetune可能会过拟合;因为相似,它们高层特征相似,可以当作特征提取器:使用整个预训练网络,用提取的高层特征训练线性分类器
小 + 不相似:因为小,最好不要finetune;因为不类似,最好也不使用高层特征。可以当作特征提取器:提取前面几层的通用特征来训练简单分类器
大 + 相似:因为足够大,可以finetune整个网络,或后面多层
大 + 不相似:因为足够大,可以重新训练,但是实践中finetune还是有益的,可以finetine整个网络。但可能会较大偏离Base Model,如果想尽量维持Base Model的前提下,只是提高一些召回能力,用于finetuning的数据量不宜太大???
总结:新数据集小,当作特征提取器,相似时使用高层特征,不相似时使用低层特征;新数据集大,则都可以finetune整个网络或多层,若不相似,也可以从零重新训练模型
深度学习的GPU:深度学习中使用GPU的经验和建议 - 2018
YAO: HERE HERE HERE HERE HERE HERE
Code: https://github.com/tanglang96/DataLoaders_DALI (PyTorch)
Speed Up your Algorithms Part 1 — PyTorch - 2018
Chinese: PyTorch 算法加速指南
Github: https://github.com/PuneetGrov3r/MediumPosts/tree/master/SpeedUpYourAlgorithms
训练集训练好的模型应用于测试集后的结果(即伪标签),与训练集混合在一起后重新训练模型。?
一般模型能忍受10%的噪音,所以不要把所有测试集与训练集混合,建议保持比例在10:1左右。?
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。