当前位置: 首页 > 面试题库 >

deeplearning 调参经验?

颛孙兴旺
2023-03-14
本文向大家介绍deeplearning 调参经验?相关面试题,主要包含被问及deeplearning 调参经验?时的应答技巧和注意事项,需要的朋友参考一下

一、参数初始化 下面几种方式,随便选一个,结果基本都差不多。但是一定要做。否则可能会减慢收敛速度,影响收敛结果,甚至造成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为高斯分布的标准差,均值设为0

Xavier初始法,适用于普通激活函数 (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-centerX /= np.std(X, axis = 0) # normalize PCA 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和传统模型.

 类似资料:
  • InnerEye-DeepLearning Overview This is a deep learning toolbox to train models on medical images (or more generally, 3D images).It integrates seamlessly with cloud computing in Azure. On the modelling

  • X-DeepLearning (简称 XDL ) 是面向高维稀疏数据场景(如广告/推荐/搜索等)深度优化的一整套解决方案。 现有开源框架在分布式性能、计算效率、水平扩展能力以及实时系统适配性的等方面往往难以满足工业级生产应用的需求,XDL 正是面向这样的场景设计与优化的工业级深度学习框架,经过阿里巴巴广告业务的锤炼,XDL 在训练规模和性能、水平扩展能力上都表现出色,同时内置了大量的面向广告/推荐

  • 本文向大家介绍深度学习调参经验?相关面试题,主要包含被问及深度学习调参经验?时的应答技巧和注意事项,需要的朋友参考一下 参数初始化,uniform均匀分布初始化,normal高斯分布初始化 数据预处理,进行归一化,有几种常用方法 梯度归一,算出来的梯度除以minibatch size 还有梯度裁剪,限制梯度上限,dropout防过拟合,一般sgd,选择0.1的学习了,衰减型的,激活函数选择relu

  • 本文向大家介绍你有哪些deep learning(rnn、cnn)调参的经验? 相关面试题,主要包含被问及你有哪些deep learning(rnn、cnn)调参的经验? 时的应答技巧和注意事项,需要的朋友参考一下   答:1.参数初始化; 2.参数预处理方式; 3.训练技巧; 4.尽量对数据进行shuffle; 5.Ensemble  

  • 参数回调方式与调用本地 callback 或 listener 相同,只需要在 Spring 的配置文件中声明哪个参数是 callback 类型即可。Dubbo 将基于长连接生成反向代理,这样就可以从服务器端调用客户端逻辑 1。可以参考 dubbo 项目中的示例代码。 服务接口示例 CallbackService.java package com.callback; public interfa

  • 主要内容:1.JVM参数分类,2.堆参数设置,3.元空间参数,4.栈参数设置,5.收集器参数设置,6.GC策略参数配置,7.Dump异常快照,8.GC日志配置写在开头: X或者XX开头的都是非标准化参数 意思就是说标准化参数不会变,非标准化参数可能在每个JDK版本中有所变化 -XX:+PrintCommandLineFlags查看当前JVM设置过的相关参数 1.JVM参数分类 “-”、“-X”、“-XX” 标准参数(-):所有的JVM实现都必须实现这些参数的功能,而且向后兼容; -verbose