batch_size过大单条验证准确率小于批验证准确率现象深入测试-LSTM seq2seq模型

>本文测试用的模型

神经网络类型:LSTM seq2seq

深度:5层

Embedding 维度:300

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

>批验证准确率与单条验证准确率测试说明

批验证准确率与单条验证准确率使用的语料集都是训练语料集,批验证准确率使用训练的batch_size进行测试,单条验证准确率使用batch_size=1进行测试。

>batch_size值影响单条验证准确率

在LSTM seq2seq模型训练中,一般使用小批量梯度下降,一般教材推荐在内存许可情况下,尽量增大batch_size,以加速训练。实际使用中,发现如果训练batch_size与模型实际预测不一致时,训练批验证准确率达到100%,单条验证准确率不等于批验证准确率,批验证准确率是小批量校验的,使用的batch_size与训练相同,模型实际预测时是单条进行的,因此单条验证准确率使用单条进行的。如下图所示,训练语料集为2000组对话。

 

 

>使用的loss函数

模型使用seq2seq.sequence_loss()函数计算loss值,其中average_across_batch设置为True,返回的是批数据的loss平均值。

>批(batch)训练数据按顺序读取对单条验证准确率的影响

使用1000条对话组的语料集进行训练,训练数据按顺序读取,batch_size等于2,4,10,20,40,结果如下图所示。与随机读取相比,单条验证准确率偏差更大,训练轮数波动大,说明模型收敛困难。

从上图看,当batch_size等于40时单条验证准确率非常低,增加训练了10次,结果如下图所示。从曲线图可以看到,单条验证准确率波动很大,4.3%到100%,训练需要的轮数波动也很大。因此,批数据按顺序读取与单条验证准确率是负相关的。

>等差序列读入训练数据

随机读入数据混合不均匀,需要多轮迭代才能达到平衡混合的效果,有规律的组合数据混合数据的效率更高,能达到更好的平衡混合效果,使模型的收敛速度,稳定性更好。等差序列读入法是其中一种规律组合数据的方法,等差的步长采用1到语料集数量的一半,每一轮步长加1,起始数取0到步长n-1,生成n个等差序列,把n个等差序列拼接成一个组合序列,喂入模型训练。下面是生成等差训练序列的python代码。

使用1000条对话组的语料集进行训练,训练数据按等差序列读取,batch_size等于2,3,4,5,6,7,8,9,10,40,结果如下图所示。与随机读入相比,等差序列读入训练数据单条验证准确率有所提升,波动变小,在batch_size小于等于6时,单条验证准确率达到了100%。

>设置loss函数按batch返回值

使用1000条对话组的语料集进行训练,训练数据按等差序列读取,batch_size等于5,6,7,8,9,10,20,30,40,average_across_batch=False, loss函数按batch返回值,结果如下图所示。与average_across_batch=True相比,单条验证准确率波动小一些,batch_size小于10时,单条验证准确率有所提高,大于10时,单条验证准确率急速下降。

>在大的数据集测试

使用10000条对话组的语料集进行训练,训练数据按等差序列读取, average_across_batch=False, loss函数按batch返回值。

使用10000条对话组的语料集进行训练,训练数据按等差序列读取, average_across_batch=True, loss函数返回平均值。

 

使用10000条对话组的语料集进行训练,训练数据按等差序列读取, average_across_batch=True, loss函数返回平均值。

可以看到,在1万组语料集上面测试,loss函数按batch返回值与loss函数返回平均值测试结果基本与在1000组语料集测试结果类似。

>总结

对于LSTM seq2seq模型,在训练比较大的语料集时,采取等差序列读入训练数据与设置loss函数按batch返回值能改善模型的收敛稳定性,在保证单条校验准确率前提下,能采用相对大一些的batch_size训练模型,缩短训练时间。一般经验,采用batch_size小于语料集数量/200是可行的。

 

 

 

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值