几个小技巧,LSTM seq2seq模型训练提速数倍

>本文测试用的模型

神经网络类型:LSTM seq2seq

深度:5

Embedding 维度:300

其它技术:双向encode、残差技术、dropout技术、注意力机制

>测试用的语料集

QA语料集,2000组对话,单句最长小于200字符。

 

>行百里,半九十

下图是LSTM seq2seq模型训练轮数与预测准确率增长曲线,,batch_size=10,训练了65轮准确率达到100%。在训练初期(10%以下)与后期(90%以上)准确率曲线平缓,增长很慢,初期与后期训练轮数占了半数以上。所以提速训练,应该从初期与后期着手。

>batch_size值太大会导致测试准确率低

在LSTM seq2seq模型训练中,一般使用小批量梯度下降,一般教材推荐在内存许可情况下,尽量增大batch_size,以加速训练。实际使用中,发现如果训练batch_size与模型实际预测不一致时,训练校验准确率达到100%,测试准确率不等于校验准确率,校验准确率是小批量校验的,使用的batch_size与训练相同,模型实际预测时是单条进行的,因此测试准确率使用单条进行的。小批量梯度下降使用一批训练数据的平均loss值更新梯度,反映的是一批数据与标签符合情况,为了能够正确预测单条数据,每批训练数据需要随机抽取,以达到每轮每批训练数据的组合不相同。当batch_size大于1,测试准确率能否等于校验准确率,取决于每批训练数据随机抽样组合充分混合程度。batch_size增大,测试准确率与校验准确率偏离越大,测试准确率波动是随机的。如下图所示。当训练语料集很大,训练很耗时间,如果选用batch_size大于1,花了很长时间训练出来的模型有达不到目标准确率风险,因此,大语料集推荐使用batch_size=1进行训练。

 

>分阶段调整学习率,加速LSTM seq2seq模型训练

从前面训练轮数与预测准确率增长曲线图可以看到,在90%准确率之前的初期与中期训练阶段,需要较大的学习率,快速调整权重参数,使模型快速收敛,准确率到达90%的后期阶段,有10%没有训练好的语料属于困难样本,如果学习率较大,会陷入局部震荡,这一轮的预测样本loss值调整变小收敛,会影响前面loss值已经收敛的部分样本,像跷跷板,这头loss值压下了,另一头翘起来了,来回震荡,如下图“25-29轮1-20条对话组loss值曲线”所示。学习率太大,会导致权重W调整步伐太大,会调整过头,结果是部分样本的loss值远远大于loss平均值,这时如果学习率保持不变,模型会陷入局部震荡状态,难以收敛。另一方面,当模型训练到这个状态,说明大部分的样本已经训练好,可以加快调整学习率的速度,loss值的峰值会跟随学习率逐步降低,模型快速收敛,准确率达到100%。

模型动态学习率调整选用多项式学习率迭代函数tf.train.polynomial_decay():

tf.train.polynomial_decay(

    learning_rate, #初始学习率

    global_step, #当前训练轮次,epoch

    decay_steps, #定义衰减周期

    end_learning_rate=0.0001, #最小的学习率

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值