序列模型懒人简介(RNN、Seq2Seq、LSTM、GRU、Transformer)

点关注不迷路哦!点关注不迷路哦!点关注不迷路哦!

RNN主要用于处理序列数据。RNN采用循环的结构,每个单元的输出与当前输入和之前的隐状态向量有关,每个单元输出一个预测值和传递到下一个单元的隐状态向量。很容易发现RNN有以下问题:1、输入与输出长度相同;2、不适合解决长期依赖。
序列模型懒人简介(RNN、Seq2Seq、LSTM、GRU、Transformer)_第1张图片

Seq2Seq结构,采取了两个RNN结构,一个作为解码器encoder,一个作为编码器decoder。解码器将序列数据转化为上下文向量,编码器解析这个向量,当输出为停止符时结束。显然,Seq2Seq的提出是为了适应输入输出长度不同的场景。
序列模型懒人简介(RNN、Seq2Seq、LSTM、GRU、Transformer)_第2张图片

LSTM(1997)主要用于解决长期依赖,在长序列中有更好的表现。相比于RNN只传递了一个隐状态向量(hidden state)h,LSTM额外传递了一个隐状态向量(cell state)c。需要理解LSTM首先需要理解LSTM的图表示,LSTM首先将当前输入与隐状态向量h拼接,并输出四个状态向量(3个sigmoid激活的门控状态和1个tanh激活的状态向量),这4个状态向量分别用于:1、忘记节点,对传递的c进行选择性的忘记;2、选择记忆,通过一个门控状态和一个状态向量得到当前结果;3、输出阶段,通过一个门控状态向量来决定当前得到的c如何转换为输出到下一个节点的h。LSTM整体逻辑如下图所示,可以看到c与h都可以表示当前序列,但是c的变化是累加的,而h的变化由c通过门控状态向量得到,可能产生很大不同。显而易见,LSTM引入了多个需要训练的网络,参数量大。
序列模型懒人简介(RNN、Seq2Seq、LSTM、GRU、Transformer)_第3张图片

GRU(2014)比LSTM的参数量更少。GRU相对于LSTM,抛弃了cell state而将其整合到了隐状态向量h中,将GRU内部结构看做黑盒,那么GRU与RNN是具有相同结构的。相对来说,GRU比LSTM少一个门控单元,GRU有2个门控单元(reset gate和update gate)和1个状态向量。通过更新门实现了以z的权重保留当前的状态向量,并以(1-z)的权重保留传递的状态向量。我们可以粗暴地认为,LSTM通过两个隐状态向量c/h进行预测,但是GRU牺牲一个门控,从而在传递的隐状态向量h(GRU)中整合了c/h(LSTM)。
序列模型懒人简介(RNN、Seq2Seq、LSTM、GRU、Transformer)_第4张图片

Transformer主要用于解决训练并行问题,在长期依赖上也有很好地效果。缺点是对于长序列,由于所有向量之间会进行self-attention,会引起参数量过大(Transformer XL对Self-attention的QK的连接进行了处理,控制了参数量)。Transformer在结构上引入了较多深度学习的元素和结构(残差网络、Norm、Encoder-Decoder、前馈网络、多头自注意力、位置编码、Embedding),但最主要的结构在于多头自注意力,而多头自注意力的基本单元即是Self-Attention。Self-Attention通过让输入(多个向量组成的矩阵)两两之间计算Attention Value,实现每个向量能够关注到其它向量的信息。多头自注意力的多头在于,从不同的子维度对向量执行Self-Attention,再将concat结果作为输出。多头的目的目前没有太合理的解释,已有解释如:1、多头起到滤波器作用,从子维度提取到更丰富的信息;2、多头相当于多个基学习器集成,降低过拟合。序列模型懒人简介(RNN、Seq2Seq、LSTM、GRU、Transformer)_第5张图片

你可能感兴趣的:(rnn,lstm,gru)