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),即输入h,x,输出 h,y . 注意 hh 必须是 相同维数Vector,因为本次的输出 h 会被当成下一次的输入 h.

    李宏毅机器学习笔记-12.3 循环神经网络(Recurrent Neural Network-RNN)- part 3

  • 上述的 RNN 是单层的,我们也可以构造 Deep RNN,比如说我们再加一层,那我们就需要再加一个 basic function ,如下图:

    李宏毅机器学习笔记-12.3 循环神经网络(Recurrent Neural Network-RNN)- part 3

  • RNN 也可以是双向的,如下图,最终的输出是由两个方向的 RNN 共同决定的,即函数 y=f3(a,c).

    李宏毅机器学习笔记-12.3 循环神经网络(Recurrent Neural Network-RNN)- part 3

2 LSTM - Long Short-term Memory

  • Naive RNN: 考虑最简单的 RNN 结构,basic function 是 :f:h,y=f(h,x) ,那么到底是怎么把输入变成输出的呢?如下图:

    李宏毅机器学习笔记-12.3 循环神经网络(Recurrent Neural Network-RNN)- part 3

  • LSTM: 如果将 LSTM 的 c 与 h 合并起来,就会发现与 Naive RNNI/O 是一样的。那为什要将其分开为 c 和 h 呢? 因为 c 变化很缓慢,这就意味着 c 可以存储比较久的信息看。如下图:

    李宏毅机器学习笔记-12.3 循环神经网络(Recurrent Neural Network-RNN)- part 3

  • LSTM 的一些计算过程如下:

    李宏毅机器学习笔记-12.3 循环神经网络(Recurrent Neural Network-RNN)- part 3

    以上的过程只用了 ht1xt 而没有用到 ct1 ,但是我们也可以把 ct1 加进来,这就叫做 peephole 。但是 peephole 对结果的影响不大,而且我们也不希望参数太多,所以与 ct1 相乘的地方我们通常设置为 对角矩阵,这样子对 ct1 只是相当于进行了缩放,没有进行线性变换。

    李宏毅机器学习笔记-12.3 循环神经网络(Recurrent Neural Network-RNN)- part 3

  • 具体计算如下:

    李宏毅机器学习笔记-12.3 循环神经网络(Recurrent Neural Network-RNN)- part 3图中,李宏毅机器学习笔记-12.3 循环神经网络(Recurrent Neural Network-RNN)- part 3 表示的是 element wise,也就是矩阵的逐元素相乘。
    从图中的三个公式可以看出:

    • zi 就是 input gate,控制着 zct 的影响。
    • zf 就是 forget gate,控制着 ct1ct 的影响。ct1 代表着过去的记忆,zf 决定过去的记忆对现在有没有影响,也就是是否要 forget
    • zo 就是 output gate,控制着 ctht 的影响。
  • LSTM 之间的连接如下:

    李宏毅机器学习笔记-12.3 循环神经网络(Recurrent Neural Network-RNN)- part 3

3 GRU - Gated Recurrent Unit

  • GRU 是另一种架构:

李宏毅机器学习笔记-12.3 循环神经网络(Recurrent Neural Network-RNN)- part 3