ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

深度学习调参经验总结

2022-02-23 13:00:24  阅读:256  来源: 互联网

标签:loss 函数 tanh 调参 ReLU 任务 深度 CNN 经验总结


深度学习调参技巧总结

关于deep learning(rnn、cnn)

  • σ′(⋅)=σ(⋅)(1−σ(⋅)),tanh′=1−tanh2
    batch_size:将数据集划分为不同的 batch,是为了限制 RAM 的使用,防止内存溢出;
    batch_size = 256;
    ℓ 层的神经网络,对于着 ℓ−1 个层间权值矩阵;

  • 简单参数
    hyperparameters:
    learning rate:一般从 0.01 开始设起,变化的幅度为 10 倍;

  • 激活函数:做非线性映射

    Sigmoid 和 tanh 激活函数的问题在于,在函数的最左侧和最右侧,斜率为 0;

  • 这样当 BP 时,复合函数的求导(连乘) ==> 导致梯度消失;
    ReLU 收敛的速度要比 tanh 的速度快 6 倍,其收敛速度足够快;
    CNN 尽量不要用 sigmoid(RNN 会用到 Sigmoid 和 tanh)

  • 首先试 ReLU,因为快,但需要小心;
    如果 ReLU 失效,使用 Leaky ReLU 或者 Maxout

  • 当然神经网络的输出层一般还是 Sigmoid 函数,因为其值接近于概率输出分布;

  • 不管什么模型,先在一个较小的训练集上train和test,看看它能不能过拟合。如果不能过拟合,可能是学习率太大,或者代码写错了。先调小学习率试一下,如果还不行就去检查代码,先看dataloader输出的数据对不对,再看模型每一步的size是否符合自己期待。

  • 看train/eval的loss曲线,正常的情况应该是train loss呈log状一直下降最后趋于稳定,eval loss开始时一直下降到某一个epoch之后开始趋于稳定或开始上升,这时候可以用early stopping保存eval loss最低的那个模型。如果loss曲线非常不正常,很有可能是数据处理出了问题,比如label对应错了,回去检查代码。

  • 不要一开始就用大数据集,先在一个大概2w训练集,2k测试集的小数据集上调参。

  • 优化器优先用adam,学习率设1e-3或1e-4,再试Radam(LiyuanLucasLiu/RAdam)。不推荐sgdm,因为很慢。

  • lrscheduler用torch.optim.lr_scheduler.CosineAnnealingLR,T_max设32或64,几个任务上试效果都不错。(用这个lr_scheduler加上adam系的optimizer基本就不用怎么调学习率了)

  • 有一些任务(尤其是有RNN的)要做梯度裁剪,torch.nn.utils.clip_grad_norm。

  • 参数初始化,lstm的h用orthogonal,其它用he或xavier。

  • 激活函数用relu一般就够了,也可以试试leaky relu。

  • batchnorm和dropout可以试,放的位置很重要。优先尝试放在最后输出层之前,以及embedding层之后。RNN可以试layer_norm。有些任务上加了这些层可能会有负作用。

  • metric learning中先试标label的分类方法。然后可以用triplet loss,margin这个参数的设置很重要。

  • batchsize设置小一点通常会有一些提升,某些任务batchsize设成1有奇效。

  • embedding层的embedsize可以小一些(64 or 128),之后LSTM或CNN的hiddensize要稍微大一些(256 or 512)。

  • 模型方面,可以先用2或3层LSTM试一下,通常效果都不错。

  • weight decay可以试一下,一般用1e-4。

  • 有CNN的地方就用shortcut。CNN层数加到某一个值之后对结果影响就不大了,这个值作为参数可以调一下。

  • GRU和LSTM在大部分任务上效果差不多。

  • 对于大多数任务,数据比模型重要。面对新任务时先分析数据,再根据数据设计模型,并决定各个参数。例如nlp有些任务中的padding长度,通常需要达到数据集的90%以上,可用pandas的describe函数进行分析。

标签:loss,函数,tanh,调参,ReLU,任务,深度,CNN,经验总结
来源: https://blog.csdn.net/lj_FLR/article/details/123087426

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有