Deep learning调参经验
点击上方“Datawhale”,选择“星标”公众号
第一时间获取价值内容
训练技巧对深度学习来说是非常重要的,作为一门实验性质很强的科学,同样的网络结构使用不同的训练方法训练,结果可能会有很大的差异。这里我总结了近一年来的炼丹心得,分享给大家,也欢迎大家补充指正。
参数初始化
下面几种方式,随便选一个,结果基本都差不多。但是一定要做。否则可能会减慢收敛速度,影响收敛结果,甚至造成Nan等一系列问题。
下面的n_in为网络的输入大小,n_out为网络的输出大小,n为n_in或(n_in+n_out)*0.5
Xavier初始法论文:
http://jmlr.org/proceedings/papers/v9/glorot10a/glorot10a.pdf
He初始化论文:
https://arxiv.org/abs/1502.01852
uniform均匀分布初始化:
w = np.random.uniform(low=-scale, high=scale, size=[n_in,n_out])Xavier初始法,适用于普通激活函数(tanh,sigmoid):scale = np.sqrt(3/n)
He初始化,适用于ReLU:scale = np.sqrt(6/n)
normal高斯分布初始化:
w = np.random.randn(n_in,n_out) * stdev # stdev为高斯分布的标准差,均值设为0Xavier初始法,适用于普通激活函数 (tanh,sigmoid):stdev = np.sqrt(n)
He初始化,适用于ReLU:stdev = np.sqrt(2/n)
svd初始化:对RNN有比较好的效果。参考论文:https://arxiv.org/abs/1312.6120
数据预处理方式
zero-center ,这个挺常用的.
X -= np.mean(X, axis = 0) # zero-center
X /= np.std(X, axis = 0) # normalizePCA whitening,这个用的比较少.
训练技巧
要做梯度归一化,即算出来的梯度除以minibatch size
clip c(梯度裁剪): 限制最大梯度,其实是value = sqrt(w1^2+w2^2….),如果value超过了阈值,就算一个衰减系系数,让value的值等于阈值: 5,10,15
dropout对小数据防止过拟合有很好的效果,值一般设为0.5,小数据上dropout+sgd在我的大部分实验中,效果提升都非常明显.因此可能的话,建议一定要尝试一下。 dropout的位置比较有讲究, 对于RNN,建议放到输入->RNN与RNN->输出的位置.关于RNN如何用dropout,可以参考这篇论文: http://arxiv.org/abs/1409.2329
adam,adadelta等,在小数据上,我这里实验的效果不如sgd, sgd收敛速度会慢一些,但是最终收敛后的结果,一般都比较好。如果使用sgd的话,可以选择从1.0或者0.1的学习率开始,隔一段时间,在验证集上检查一下,如果cost没有下降,就对学习率减半. 我看过很多论文都这么搞,我自己实验的结果也很好. 当然,也可以先用ada系列先跑,最后快收敛的时候,更换成sgd继续训练.同样也会有提升.据说adadelta一般在分类问题上效果比较好,adam在生成问题上效果比较好。
除了gate之类的地方,需要把输出限制成0-1之外,尽量不要用sigmoid,可以用tanh或者relu之类的激活函数.1. sigmoid函数在-4到4的区间里,才有较大的梯度。之外的区间,梯度接近0,很容易造成梯度消失问题。2. 输入0均值,sigmoid函数的输出不是0均值的。
rnn的dim和embdding size,一般从128上下开始调整. batch size,一般从128左右开始调整.batch size合适最重要,并不是越大越好.
word2vec初始化,在小数据上,不仅可以有效提高收敛速度,也可以可以提高结果.
尽量对数据做shuffle
LSTM 的forget gate的bias,用1.0或者更大的值做初始化,可以取得更好的结果,来自这篇论文: http://jmlr.org/proceedings/papers/v37/jozefowicz15.pdf, 我这里实验设成1.0,可以提高收敛速度.实际使用中,不同的任务,可能需要尝试不同的值.
Batch Normalization据说可以提升效果,不过我没有尝试过,建议作为最后提升模型的手段,参考论文:Accelerating Deep Network Training by Reducing Internal Covariate Shift
如果你的模型包含全连接层(MLP),并且输入和输出大小一样,可以考虑将MLP替换成Highway Network,我尝试对结果有一点提升,建议作为最后提升模型的手段,原理很简单,就是给输出加了一个gate来控制信息的流动,详细介绍请参考论文: http://arxiv.org/abs/1505.00387
来自@张馨宇的技巧:一轮加正则,一轮不加正则,反复进行。
Ensemble
Ensemble是论文刷结果的终极核武器,深度学习中一般有以下几种方式
同样的参数,不同的初始化方式
不同的参数,通过cross-validation,选取最好的几组
同样的参数,模型训练的不同阶段,即不同迭代次数的模型。
不同的模型,进行线性融合. 例如RNN和传统模型.
Deep learning调参经验相关推荐
- 深度学习训练的小技巧,调参经验。总结与记录。
深度学习训练的小技巧,调参经验.总结与记录. 2016-10-23 23:07 390人阅读 评论(0) 收藏 举报 版权声明:本文为博主原创文章,未经博主允许不得转载. 经常会被问到你用深度学习训练 ...
- 智能车调参经验(超级详细!!!手把手教)【一】
调参作为智能车比赛中最为耗时和痛苦的事情,在网上浏览了许多人的调参经验的博客却发现大家分享的内容对新手并不太友好,所以作为一枚小白打算记录一下此次参加智能车比赛中调参遇到的问题以及经验所得,不仅希望能 ...
- 调参经验: 关于deep learning(rnn、cnn)
点击上方"机器学习与生成对抗网络",关注星标 获取有趣.好玩的前沿干货! https://www.zhihu.com/question/330766768 编辑:机器学习算法与知识 ...
- 计算机能力挑战赛是线上的吗,全国高校计算机能力挑战赛验证码识别竞赛一等奖调参经验分享...
前言:这是为验证码识别竞赛而开发的一个基于pytorch实现的端到端的验证码识别系统.前后开发大概有2个月,其中大部分时间都在调参,后期参考kaggle大神经验,加入了一些trick,但是由于第一个榜 ...
- 强化学习中的调参经验与编程技巧(on policy篇)
©PaperWeekly 原创 · 作者|张恒瑞 单位|北京交通大学 研究方向|强化学习 在强化学习的训练过程中,常常会遇见以下问题: 在某一环境中可以 work 的超参数拿去训练别的环境却训练不出来 ...
- 关于神经网络的调参经验技巧和调参顺序
文章目录 前言 一.写在前面 超参数和参数区分 超参数选取尺度的考虑 二.调参顺序 1.learning rate 2.batch size 3.其他参数 3.1Hidden Units(隐含层单元数 ...
- lightgbm调参经验
有人问我怎么调gbdt的参数,因为我的gbdt是采用lgb这个库搞的,故而以lgb来介绍,当然可能具体函数不一样,但总体相差不大. For Recommendation in Deep learnin ...
- PID参数解析+调参经验笔记(经验法)
在最前面推荐一个大佬的讲解,真的很浅显易懂,建议先看了解大概PID:链接 ps:2022/1/2更新pid通俗理解: out_speed = p*err+d*now_speed;//pid最核心算法 ...
- xgboost 调参经验
本文介绍三部分内容: - xgboost 基本方法和默认参数 - 实战经验中调参方法 - 基于实例具体分析 1.xgboost 基本方法和默认参数 在训练过程中主要用到两个方法:xgboost.tra ...
最新文章
- c语言怎样在不足n位数的整数前补0,C# String 前面不足位数补零的方法
- 关于unity的一个不错的插件平台
- Redis BitMap适应场景
- Python学习系列(一)(基础入门)
- Java多线程--list.parallelStream().forEach()使用实例
- 转:Merge into的使用详解
- 如何修改新浪微博对其他应用的授权
- 一篇能加深理解linux 虚拟文件系统的博文
- python调用 matlab库_python调用matlab的搜索结果-阿里云开发者社区
- 京东发布虎年春晚互动攻略 春晚联名款金碗套装首次曝光
- fota mcsync洛达检测_详细解析最新推出的顶配版二代悦虎主板洛达1562M数字音频长续航款...
- guns使用注意问题
- Python运行时报错 ModuleNotFoundError: No module named ‘exceptions‘
- 尚硅谷RabbitMQ学习笔记(上)
- 倒立摆及其应用//2021-2-23
- dns缓存时间 linux,如何在Linux服务器上刷新DNS缓存
- KMeans原理和密度聚类
- 转:中国人世界观的变化
- 给大家推荐一个进阶直播课,免费的!
- Cypher查询语言--Neo4j中的SQL