正文共1927个字,预计阅读时间10分钟。
针对rnn网络训练速度较慢,不方便并行计算的问题,作者提出了一种SRU的网络,目的是为了加快网络的训练。
SRU模型、GRU模型与LSTM模型设计上十分的相似,LSTM包含三个门函数(input gate、forget gate和output gate),而GRU模型是LSTM模型的简化版,仅仅包含两个门函数(reset gate和update gate)。reset gate决定先前的信息如何结合当前的输入,update gate决定保留多少先前的信息。如果将reset全部设置为1,并且update gate设置为0,则模型退化为RNN模型。
SRU模型结构类似于GRU网络,但又与GRU网络有所区别,图1为lstm网络结构,图2为gru网络结构,图三为sru网络结构。从图1和图2可以看出,一次计算需要依赖于上一次的状态s计算完成,因此作者修改网络结构为图3,类似于gru网络,只包含forget gate和reset gate,这两个函数可以在循环迭代前一次计算完成,便于并行计算。
LSTM模型公式
GRU模型公式
SRU模型公式
实验步骤
1:本次实验采用SST2数据。实验之前首先对文本按单词进行分词,然后采用word2vec进行预训练(这里采用按字切词的方式避免的切词的麻烦,并且同样能获得较高的准确率)。
2:由于本次实验对比采用的是定长模型,因此需要对文本进行截断(过长)或补充(过短)。
3:实验建模Input。本次实验采用文本标签对的形式进行建模(text,label),text代表问题,label代表正负情绪标签。
4:将text进行Embedding(batch_size, sequence_len, embedding_size)表示。
5:对text采用双向序列模型计算特征(sequence_len, batch_size, rnn_size)。
SRU代码实现
6:对时序模型特征进行选择,这里采用max-pooling。
7:损失函数采用负对数损失函数。
参数设置:
1:、这里优化函数采用论文中使用的ADAM优化器。
2、学习速率为1e-4。
3、训练100轮,大概需要0.5个小时的时间。
4、这里训练采用dropout=0.5和l2约束防止过拟合。
6、batch_size这里采用256字。
7、rnn_size为200
实验效果对比:
实验效果对比
注:这里分别实验了双向的GUR算法、双向的LSTM算法和双向的SRU算法。单向GRU/LSTM/SRU的算法只能捕获当前词之前词的特征,而双向的GRU/LSTM/SRU算法则能够同时捕获前后词的特征,因此实验采用的双向的序列模型。从实验结果来看,LSTM算法性能优于GRU算法和SRU算法,SRU算法优于GRU算法;但是GRU算法训练速度要比SRU算法、LSTM算法快,实际使用可以根据自己的要求做出权衡。
参考文献
TRAINING RNNS AS FAST AS CNNS(https://arxiv.org/pdf/1709.02755.pdf)
原文链接:https://www.jianshu.com/p/e7e308584b20