LSTM+GRU
参考:脑补链接。。图片都是这里的,我只是补充一些。。
了解一下RNN
卷积神经网络就通过各种卷积核共享参数,降低参数量并且可以利用空间位置信息。但是输入的大小要是固定的,所以在NLP方面,对于输入大小不固定,信息还要与前后关联,这种序列数据就需要循环神经网络了。RNN通过共享全连接的权重来大大的减少参数量。
RNN的工作原理是:第一个词被转换成机器可读的向量(词向量吗)。然后RNN逐个处理向量序列,学习词与词之间的语义关系(时序信息)。
RNN 就是将先前的隐藏状态传递给序列的下一步。隐藏状态充当神经网络的记忆。它保存着网络以前见过的数据信息。
H t = f ( X W x h + H t − 1 W h h + b h ) H_t = f(XW_{xh} + H_{t-1}W_{hh} +b_h) Ht=f(XWxh+Ht−1Whh+bh) X为输入,W权重,H时间步的隐藏变量,b偏置。在传递的过程中W是共享的。不同的时间步,RNN使用的是同一个模型的参数。
激活函数tanh的作用就是将结果保持在-1,1 的范围内,防止出现某个数过大
LSTM和GRU是作为短期记忆的解决方案而创建的。它们具有称为门(gate)的内部机制,它可以调节信息流。这些门可以了解序列中哪些数据重要以进行保留或丢弃。这样,它可以将相关信息传递到长序列中进行预测。
只保留相关信息进行预测,忘记不相干信息。
LSTM
- 遗忘门:此门决定应丢弃或保留哪些信息。来自先前隐藏状态和来自当前输入的信息通过sigmoid函数传递。值介于0和1之间。越接近0越容易遗忘,越接近1则意味着要保留。
- 输入门:更新单元状态。先前的隐藏状态和当前输入传递给sigmoid函数。这决定了通过将值转换为0到1来更新哪些值。0表示不重要,1表示重要。你还将隐藏状态和当前输入传递给tanh函数,将它们压缩到-1和1之间以帮助调节网络。然后将tanh输出与sigmoid输出相乘。sigmoid输出将决定哪些信息很重要,需要tanh输出保存。
- 单元状态:现在我们有足够的信息来计算单元状态。首先,单元状态逐点乘以遗忘向量。如果它乘以接近0的值,则有可能在单元状态中丢弃值。然后我们从输入门获取输出并进行逐点加法,将单元状态更新为神经网络发现相关的新值。这就得到了新的单元状态。
- 输出门:输出门决定下一个隐藏状态是什么。请记住,隐藏状态包含有关先前输入的信息。隐藏状态也用于预测。首先,我们将先前的隐藏状态和当前输入传递给sigmoid函数。然后我们将新的单元状态传递给tanh函数。将tanh输出与sigmoid输出相乘,以决定隐藏状态应携带的信息。它的输出是隐藏状态。然后将新的单元状态和新的隐藏状态传递到下一个时间步。
遗忘门决定了哪些内容与前面的时间步相关。输入门决定了从当前时间步添加哪些信息。输出门决定下一个隐藏状态应该是什么。
I t = σ ( X t W x i + H t − 1 W h i + b i ) 输 入 门 F t = σ ( X t W x f + H t − 1 W h f + b f ) 遗 忘 门 O t = σ ( X t W x o + H t − 1 W h o + b o ) 输 出 门 C ^ t = t a n h ( X t W x c + H t − 1 W h c + b c ) 候 选 记 忆 细 胞 C t = F t ⨀ C t − 1 + I t ⨀ C ^ t 点 乘 得 到 记 忆 细 胞 H t = O t ⨀ t a n h ( C t ) 得 到 下 一 个 时 间 的 隐 藏 状 态 I_t = \sigma(X_tW_{xi} + H_{t-1}W_{hi} +b_i) 输入门\\ F_t = \sigma(X_tW_{xf} + H_{t-1}W_{hf} +b_f) 遗忘门\\ O_t = \sigma(X_tW_{xo} + H_{t-1}W_{ho} +b_o) 输出门\\ \hat{C}_t = tanh(X_tW_{xc} + H_{t-1}W_{hc} +b_c) 候选记忆细胞\\ C_t = F_t\bigodot C_{t-1} + I_t \bigodot \hat{C}_t 点乘得到记忆细胞\\ H_t = O_t\bigodot tanh(C_t) 得到下一个时间的隐藏状态 It=σ(XtWxi+Ht−1Whi+bi)输入门F