视频链接
- [门控循环单元(GRU)]www.bilibili.com/video/BV1mf…
- [代码]www.bilibili.com/video/BV1mf…
- [QA]www.bilibili.com/video/BV1mf…
注解
一、为什么要引入GRU?
00:46 RNN无法处理长序列,因为RNN将序列的全部信息全部放在一个隐藏状态中,距离如今很久之前的信息对将来的预测帮助微乎其微,这是一个原因;还有另一个原因是,一个序列中的每一个观察值的重要性不同。因此我们要引入”门“这个概念,我们有以下两种门:
- 能“关注“的机制(更新门)
- 能”遗忘“的机制(重置门)
二、什么是门?
04:05 将上一层的隐藏状态与当前层的Input输入到Reset gate(重置门)和Update gate(更新门)中,分别得到两个输出和
从公式来看,这两个门相当于一个全连接层
通过学习、、、、、参数,即可得到重置以及更新的效果
三、重置门是怎么工作的?
07:43 上面我们通过Reset gate和Update gate得到了两个值和,那么我们要怎么根据这两个值来求出当前层的隐藏状态呢?此时我们引入候选隐状态
上式的符号“”代表矩阵对应位置元素相乘(Hadamard Product 哈达玛积)
这里可以通过公式理解候选隐状态的含义,经过了一个Sigmoid函数的处理,矩阵中的每个元素是一个值域为之间的值,若我们的网络认为这个元素对后续的预测作用不大时,中的元素值会趋近于0,该元素与上个隐藏状态的对应元素相乘,即可达到一个“遗忘”的效果
四、更新门是怎么工作的?
10:58 求出了候选隐状态之后,我们就可以利用剩下的值来求得该层的“真正”隐状态
类比上面的分析,我们可以看出,当趋近于1时,由于当前层的输入只包含在中,该层就几乎不参考的值,即这一层几乎不做更新;当趋近于0时,此时就跟RNN的作用是相似的,这里不多做赘述。实际上,和的值会在这个区间内浮动,灵活性很强。