0

循环神经网络:GRU

 2 years ago
source link: https://ylhao.github.io/2018/05/23/167/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

循环神经网络:GRU

创建时间:2018-05-23 16:55
字数:640 阅读:63

梯度消失和长距离依赖问题

RNN 中存在的梯度消失问题会导致难以学习到长距离依赖的问题。我的理解是由于梯度消失问题的存在,越早的时刻对参数的修正起到的作用就越小,也就是说模型很难捕捉到长距离依赖关系。

GRU的基本结构

在 RNN 中,向下传递的是隐层状态,在基本结构中,隐层状态的计算公式如下:

$$
\overrightarrow{h}t = tanh(W{hx} \overrightarrow{x}t + W{hh} \overrightarrow{h}_{t-1}) \
$$

GRU的结构

GRU 引入了 reset gateupdate gate。其结构图如下,图中的各符号的意义可以参考“循环神经网络:LSTM”这篇文章。其中 ∗∗ 表示按位乘。

reset gate rtrt

rt=σ(Wr⋅[ht−1,xt])rt=σ(Wr⋅[ht−1,xt])

update gate ztzt

zt=σ(Wz⋅[ht−1,xt])zt=σ(Wz⋅[ht−1,xt])

当前时刻的新信息

接下来计算当前时刻的新信息(candidate values, ˜hth~t)。这跟 LSTM 中的 candidates values(˜CtC~t) 是类似的。计算方式如下:
˜ht=tanh(Wh⋅[rt∘ht−1,xt])h~t=tanh(Wh⋅[rt∘ht−1,xt])
其中 ∘∘ 表示按位乘。

reset gate 的作用

reset gate 用来控制计算当前时刻的新信息时,保留多少之前的记忆。举个例子来说明一下,假设每个时刻输入的是一个词的话,那么如果 rtrt 为 0,那么 ˜hth~t 中就会只包含当前词的信息。

update gate 的作用

update gate 控制需要从前一时刻的隐藏层状态 ht−1ht−1 中忘记多少信息,同时控制需要将多少当前时刻的新信息加入到隐藏层状态中。其中 ∘∘ 表示按位乘。
ht=(1−zt)∘ht−1+zt∘˜htht=(1−zt)∘ht−1+zt∘h~t

最后的总结

reset gate 允许模型丢弃一些和未来无关的信息,如果reset gate接近0,那么之前的隐藏层信息就会丢弃。
update gate 控制当前时刻的隐藏层输出 htht 需要保留多少之前的隐藏层信息,若 ztzt 接近于 1,相当于我们之前把之前的隐藏层信息拷贝到当前时刻,可以学习长距离依赖。 一般来说那些具有短距离依赖的单元 reset gate 比较活跃,具有长距离依赖的单元 update gate 比较活跃。


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达,可以在文章下方的评论区进行评论,也可以邮件至 [email protected]

文章标题:循环神经网络:GRU

文章字数:640

本文作者:ylhao

发布时间:2018-05-23, 16:55:34

最后更新:2019-06-07, 11:50:53

原始链接:https://ylhao.github.io/2018/05/23/167/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

未找到相关的 Issues 进行评论

请联系 @ylhao 初始化创建


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK