元学习系列(五):GRU模型

之前提到的孪生网络那类模型,简单来说他们都是把训练集作为先验知识进行建模,而像LSTM、GRU、神经图灵机这一类模型则提供了另一个新思路,那就是引入外部记忆,在训练过程中通过训练集对外部记忆进行修改,从而在测试的时候利用外部记忆作为先验知识。

LSTM和RNN相比,引入了长期记忆和门结构,缓解了长期依赖问题。所谓的门结构,就是sigmoid函数,通过sigmoid函数分析应该遗忘什么、记忆什么和输入什么。在GRU中,则进一步简化了LSTM,只保留了更新门和重置门两种门操作:

在这里插入图片描述
其实说到底,不论是LSTM还是GRU,重点都在于我们应该如何利用长期记忆这一点,在LSTM中长期记忆会影响到某一时刻的模型输出,而GRU则直接把某一时刻的长期记忆作为输出,一边修改长期记忆一边进行输出,所以这使得GRU比LSTM具有更少的输入(LSTM有三个输入,GRU只有两个)和更简单的结构,运算量也相对减少。

接下来看看GRU是如何利用和修改记忆的,首先模型会分析在当前时刻,根据当前的输入我们需要用到记忆中的哪些部分:

r t = σ ( W r ∗ [ h t − 1 , x t ] ) r_t = \sigma (W_r * [h_{t-1}, x_t]) rt=σ(Wr[ht1,xt])

用这个rt乘以上一时刻的记忆就得到这一时刻可以利用的记忆,然后和当前时刻拼接在一起输入到神经网络:

h ~ t = t a n h ( W ∗ [ r t ∗ h t − 1 , x t ] ) \widetilde h_t = tanh(W * [r_t * h_{t-1}, x_t]) h t=tanh(W[rtht1,xt])

其实我觉得这个输出完全可以作为模型在当前时刻的输出,只是因为模型目前想要利用更新了的记忆作为最终输出,所以个人觉得,接下来的步骤可以理解成,如何通过当前时刻的输出去更新记忆。首先依然是先确定权重:

z t = σ ( W z ∗ [ h t − 1 , x t ] ) z_t = \sigma (W_z * [h_{t-1}, x_t]) zt=σ(Wz[ht1,xt])

然后再利用这个权重,对上一时刻的记忆和当前的输出进行加权结合得到当前时刻的记忆:

h t = ( 1 − z t ) ∗ h t − 1 + z t ∗ h ~ t h_t = (1-z_t)*h_{t-1} + z_t * \widetilde h_t ht=(1zt)ht1+zth t

从GRU经过简化也能得到较好的效果可以看出,或许对这类模型而言,选择什么作为输出、具体的遗忘记忆机制是什么或许并不重要,真正重要的是这类模型中具有记忆这个结构,同时模型能够根据当前输入对记忆进行修改,并最终结合记忆和当前输入进行输出,这些才是LSTM和GRU能够取得成功的根本所在。

在github写的自然语言处理入门教程,持续更新:NLPBeginner

在github写的机器学习入门教程,持续更新:MachineLearningModels

想浏览更多关于数学、机器学习、深度学习的内容,可浏览本人博客

  • 3
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值