美文网首页
基于pytorch平台分类模型训练调式心得

基于pytorch平台分类模型训练调式心得

作者: 小小兰哈哈 | 来源:发表于2018-12-13 11:45 被阅读0次

    使用pytorch的心得及结论(一些定理):

    训练学习速率

    学习速率的调整对效果影响显著

    学习速率过大,则无法找到最优点,局部最优点也无法定位,因此无法收敛;

    学习速率过小,则只能徘徊在一段空间附近,只能找到局部最优,或者无法找到最优点。

    实验证明,最优的学习速率方案是先有个warmup步长,进行学习速率上升, 经过warmup到达最高点,然后逐渐下降。

    一定要找到一个合理的学习速率,使全局的学习速率保持到这个均值,才能达到比较好的效果,比如这次bi-gru的调整最优的平均速率是0.01

     在保持学习速率均值的情况下,三角学习率> 按照auc逐步衰减> 保持均值不变;

         2.  验证集选择

                     a. 交叉验证的效果好于特定的验证集,最好的训练效果是交叉验证,最后用测试集进行评估,也就是说,训练集、校正集、评估集是三个集合,互不交叉

         3. 不同模型merge的最好组合方法

                     a. merge的最好组合,是模型差异性越大越好,多次实验证明:单模型效果稍差的情况下,cnn与lstm的merge会好于两个lstm的merge效果,

                         模型差异性大的结果进行merge,会得到最好的效果。

         4. fintune微调方式

                    a. 数据量选择:fintune预训练的集合数据量> 精细标注样本的数据量

                    b. 预训练层选择:将后面的全连接层与loss计算部分随机初始化,只fintune 词向量层及编码层,效果较好。

                    c. fintune 优化方式: 1. 若预训练数据集和精分集合相关性小,则全网络fintune ; 2. 若相关性较大, 则低层取较低的学习率, 高层取较高的学习率;或者采用逐层解冻的方式

         5. 全连接层的设计:多加几个全连接层,相当于H= H1*relu(HW+b1)+b2,  经过多层线性变换,中间加relu,可以提高模型的非线性适应能力。

        6. elmo-bert的loss层或非预训练层:

                   a. bert的loss层:15% 替换,( 其中 80%:mask, 10% random,10% vocab)class num:vocab size;  output seq: 【0 0 0 mask_vocab 0 0 0 0】

                   b.  elmo的loss层, class num:vocab size , 前seq 预测 后seq

                 效果对比:在相同的网络结构条件下,bert的fintune比非预训练召回率好7%, elmo比非预训练召回率好3%。

        7. 双通道输入的预训练语言模型的网路设计:

                 预训练的input可以采用title+<SEP>+comment 拼接的方式, 使用相同的encode编码层,在双通道输入时,对编码层和embeeding层做微调。

    相关文章

      网友评论

          本文标题:基于pytorch平台分类模型训练调式心得

          本文链接:https://www.haomeiwen.com/subject/njmvhqtx.html