LSTM 设计思想
姑且不看偏置。 W W W 和 U U U 是加权的矩阵,写模型的时候用 nn.Linear(in_dim, out_dim)
就成; σ \sigma σ 是 Sigmoid 函数
- 第一条,遗忘门,定义为 有多少内容需要被遗忘;
- 第二条:输入门,定义为 有多少输入值有多少能进入到 RNN 模型里;
- 第三条:输出门,定义为 有多少内容能够成为输出值
这三个 0 到 1 的值,是聚合当前的输入特征 x t x_t xt 和 上一时刻的隐藏状态 h t − 1 h_{t-1} ht−1 所计算得到的。它们表示的意思是,聚合当前的输入信息以及记忆信息(之前的信息),来决定模型不同的位置有多少比例保留下来。
- 第四条:表示 "当前信息",使用 tanh 映射到 -1到 1之间;
- 第五条:表示 "当前的记忆信息",根据上一时刻的信息有多少被遗忘以及当前输入有多少能进入所聚合得到;
- 第六条:表示 隐藏状态,由当前的记忆信息的一定比例计算得到
从这六条式子中,一定要知道,LSTM 接收 3 个输入值分别为 x t x_t xt、 h t − 1 h_{t-1} ht−1 和 c t − 1 c_{t-1} ct−1
根据 LSTM 由三个输入,可以设计一个 Gate Fusion Module,输入三个 Tensor 聚合得到一个 Tensor,用 tensor. Repeat(x,y,z) 来对其维度。这样做可以简单聚合不同模态的信息
GRU
理解起来和前者的叙述类似
最终要的地方是,可以作为 Gate Fusion,所设计的 Gate Fusion 以两个 tensor 作为输入,就用 GRU 这一套计算公式,如果以三个 tensor 作为输入,就用 LSTM 这一套公式,剩下的对齐维度跑通 forward 函数就行