LSTM 具有更长的记忆能力,但是 LSTM 结构相对较复杂,计算代价较高,模型参数量较大。们尝试简化 LSTM 内部的计算流程,特别是减少门控数量。GRU 把内部状态向量和输出向量合并,统一为状态向量,门控数量也减少到 2 个:复位门 (Reset Gate)和更新门(Update Gate)。
目录
复位门:
用于控制上一个时间戳的状态进入 GRU 的量。门控向量
由当前时间戳输入
和和上一时间戳状态
变换得到。激活函数一般选择sigmoid,来将
限制到0~1.
只控制状态向量h,而不控制输入x。
接着构建新输入,由
与
经过变化后再由激活函数tanh优化得到。其中
决定对于
的接受程度,为0时表示不接受
的输入,输入仅由
决定。为1时二者共同作用产生
。
更新门:
更新门用控制上一时间戳状态和新输入
对新状态向量
的影响程度。 门控向量
由当前时间戳输入
和和上一时间戳状态
变换得到。激活函数一般选择sigmoid。得到的
的值用于控制
,1-
用于控制
。由此可以看出二者处于相互竞争的位置,
为0时全部来自上个时间戳的状态向量,为1时为新输入。
GRU实战:
基于情感分析的GRU实战整体内容和SimpleRNN,LSTM基本一样,只不过在构建循环网络时调用封装好的GRU即可。
# 构建RNN
self.rnn = keras.Sequential([
layers.GRU(units, dropout=0.5, return_sequences=True),
layers.GRU(units, dropout=0.5)
])
具体内容可以参考