Recurrent Neural Network(RNN) - 循环神经网络(part 3) Gated RNN
0 前言
- 其实这节课的内容跟我其他这个系列的博客是不属于同一个课程的,但是因为是在 B 站看的视频,up 主可能不小心弄混了,于是我就也一起看了,多学点总没什么错。
- 虽然不是同一门课,但是确实是同一个老师,也是极其学习的内容,所以就当做一门课也没什么差别。这里给出这节课内容所属的课程网站 Applied Deep Learning / Machine Learning and Having It Deep and Structured
1 几种 RNN 结构
RNN 中有一个 Basic Function ,无论输入的序列多长,都会经过这个 Fuction。现在我们假设这个Function叫做 f:h′,y=f(h,x) f : h ′ , y = f ( h , x ),即输入h,x h , x,输出 h′,y h ′ , y. 注意 h′ h ′和 h h必须是 相同维数 的 Vector,因为本次的输出 会被当成下一次的输入 h h.
上述的 RNN 是单层的,我们也可以构造 Deep RNN,比如说我们再加一层,那我们就需要再加一个 basic function ,如下图:
RNN 也可以是双向的,如下图,最终的输出是由两个方向的 RNN 共同决定的,即函数 .
2 LSTM - Long Short-term Memory
Naive RNN: 考虑最简单的 RNN 结构,basic function 是 :f:h′,y=f(h,x) f : h ′ , y = f ( h , x ),那么到底是怎么把输入变成输出的呢?如下图:
LSTM: 如果将 LSTM 的 c 与 h 合并起来,就会发现与 Naive RNN 的 I/O 是一样的。那为什要将其分开为 c 和 h 呢? 因为 c 变化很缓慢,这就意味着 c 可以存储比较久的信息看。如下图:
LSTM 的一些计算过程如下:
以上的过程只用了 ht−1 h t − 1和 xt x t而没有用到 ct−1 c t − 1,但是我们也可以把 ct−1 c t − 1加进来,这就叫做 peephole 。但是 peephole 对结果的影响不大,而且我们也不希望参数太多,所以与 ct−1 c t − 1相乘的地方我们通常设置为 对角矩阵,这样子对 ct−1 c t − 1只是相当于进行了缩放,没有进行线性变换。
具体计算如下:
图中,
表示的是 element wise,也就是矩阵的逐元素相乘。
从图中的三个公式可以看出:- zi z i就是 input gate,控制着 z z对 的影响。
- zf z f就是 forget gate,控制着 ct−1 c t − 1对 ct c t的影响。ct−1 c t − 1代表着过去的记忆,zf z f决定过去的记忆对现在有没有影响,也就是是否要 forget。
- zo z o就是 output gate,控制着 ct c t对 ht h t的影响。
LSTM 之间的连接如下:
3 GRU - Gated Recurrent Unit
- GRU 是另一种架构: