python自然语言处理—GRU神经网络

本文介绍了GRU神经网络的基本概念,作为LSTM的变体,GRU通过重置门和更新门解决了RNN的长依赖问题。GRU拥有简洁的结构,仅包含两个门,其前向传播过程包括更新门和重置门的计算,以及候选隐藏层和最终隐藏层的更新。在训练过程中,通过损失函数和反向传播算法更新参数。
摘要由CSDN通过智能技术生成

                                                                     GRU神经网络

 

一、GRU 概述

    GRU 是 LSTM 神经网络的一种效果很好的变体,GRU 保持了 LSTM 的效果同时又使得结构更加简单计算量更小,它较 LSTM 网络的结构更加简单,而且效果也更好,因此也是当前非常流行的一种神经网络。GRU 既然是 LSTM 的变体,因此也是可以解决 RNN 神经网络中的长依赖问题的。

    GRU 把 LSTM 中的 forget gate 和 input gate 用 update gate 来替代,把 cell state 和 隐状态 h_{t} 进行合并,在计算当前时刻信息的方法和 LSTM 有所不同。

    GRU 中只有两个门:

        (1)reset gate(重置门):决定了如何将新的输入信息与前面的记忆相结合(控制前一状态有多少信息被写入到当前的候选集上),reset gate 的值越小说明丢弃的越多。

        (2)update gate(更新门):定义了前面记忆保存到当前时间步的量(控制前一时刻的状态信息被被带入到当前状态中的程度),update gate 的值越大说明前一时刻的状态信息带入越多。

    GRU 的结构如下图所示:

        

    图中 z_{t} 和 r_{t} 分别代表 update gate 和 reset gate。

    GRU 与 LSTM 的区别:

        (1)GRU 有两个门(重置门与更新门),而 LSTM 有三个门(输入门、遗忘门和输出门)。

        (2)GRU 并不会控制并保留内部记忆(C_{t}),且没有 LSTM 中的输出门。

        (3)LSTM 中的输入与遗忘门对应于 GRU 的更新门,重置门直接作用于前面的隐藏状态。

        (4)在计算输出时并不应用二阶非线性。

    GRU 原理图:

        

二、GRU 前向传播

    GRU 前向传播公式:

        

    其中,[] 表示两个向量相连,* 表示矩阵的乘积。

三、GRU 更新过程

    1、update gate(z_{t})

        在时间步 t,我们首先需要使用以下公式计算更新门 z_{t}

            

        其中 x_{t} 为第 t 个时间步的输入向量,即输入序列 X 的第 t 个分量,它会经过一个线性变换(与权重矩阵 W_{z} 相乘)。h_{t-1}保存的是前一个时间步 t-1 的信息,它同样也会经过一个线性变换。更新门将这两部分信息相加并投入到 Sigmoid(\sigma) 激活函数中,因此将激活结果压缩到 0 到 1 之间。以下是更新门在整个单元的位置与表示方法:

        

        更新门帮助模型决定到底要将多少过去的信息传递到未来,或到底前一时间步和当前时间步的信息有多少是需要继续传递的。这一点非常强大,因为模型能决定从过去复制所有的信息以减少梯度消失的风险。

    2、reset gate(r_{t})

        本质上来说,重置门主要决定了到底有多少过去的信息需要遗忘,我们可以使用以下表达式计算:

            

        该表达式与更新门的表达式是一样的,只不过线性变换的参数和用处不一样而已。下图展示了该运算过程的表示方法:

            

        前面更新门所述,h_{t-1} 和 x_{t} 先经过一个线性变换,再相加投入 Sigmoid(\sigma) 激活函数以输出激活值。

    3、其次是计算候选隐藏层(candidate hidden layer),这个 候选隐藏层 和 LSTM 中的   类似,可以看成是当前时刻的新信息,其中 r_{t} 用来控制需要保留多少之前的记忆,如果 r_{t} 为 0,那么   只包含当前词的信息:

        

        输入 x_{t} 与上一时间步信息 h_{t-1} 先经过一个线性变换,即分别右乘矩阵 

        计算重置门 r_{t} 与 h_{t-1} 的 Hadamard 乘积,即 r_{t} 与 h_{t-1} 的对应元素乘积。因为前面计算的重置门是一个由 0 到 1 组成的向量,它会衡量门控开启的大小。例如某个元素对应的门控值为 0,那么它就代表这个元素的信息完全被遗忘掉。该 Hadamard 乘积将确定所要保留与遗忘的以前信息。该计算过程可表示为:

            

    4、最后 z_{t} 控制需要从前一时刻的隐藏层 h_{t-1} 中遗忘多少信息,需要加入多少当前时刻的隐藏层信息 ,最后得到 h_{t},直接得到最后输出的隐藏层信息,这里与 LSTM 的区别是 GRU 中没有 output gate:

        

        z_{t} 为更新门的激活结果,它同样以门控的形式控制了信息的流入。1-z_{t} 与 h_{t-1} 的 Hadamard 乘积表示前一时间步保留到最终记忆的信息,该信息加上当前记忆保留至最终记忆的信息就等于最终门控循环单元输出的内容。该计算过程可表示为:

            

    如果 reset gate 接近 0,那么之前的隐藏层信息就会丢弃,允许模型丢弃一些和未来无关的信息。

    update gate 控制当前时刻的隐藏层输出 h_{t} 需要保留多少之前的隐藏层信息,若 z_{t} 接近 1 相当于我们把之前的隐藏层信息拷贝到当前时刻,可以学习长距离依赖。

    一般来说,那些具有短距离依赖的 unit(单元) reset gate 比较活跃(如果 r_{t} 为 1,而 z_{t} 为 0,那么相当于变成了一个标准的 RNN,能处理短距离依赖),具有长距离依赖的 unit(单元) update gate 比较活跃。

四、GRU 训练过程

    从前向传播公式可以看出要学习的参数有 W_{r}W_{z}W_{o}。其中前三个参数都是拼接的(因为后面的向量也是拼接的),所以在训练过程中需要将它们分割出来:

        

    输出层的输入:

        y_{t}^{i}=W_{o}h

    输出层的输出:

        y_{t}^{o}=\sigma (y_{t}^{i})

    在得到最终的输出后,就可以写出网络传递的损失,单个样本某时刻的损失为:

        E_{t}=\frac{1}{2}(y_{d}-y_{t}^{o})^{2}

    则单个样本在所有时刻的损失为:

        E=\sum_{t=1}^{T}E_{t}

    采用后向误差传播算法来学习网络,求损失函数对各参数的偏导(共7个):

        

    其中各中间参数为:

        

    在计算出了对各参数的偏导之后,就可以更新参数,依次迭代直到损失收敛。

【为什么要学习这门课程】深度学习框架如TensorFlow和Pytorch掩盖了深度学习底层实现方法,那能否能用Python代码从零实现来学习深度学习原理呢?本课程就为大家提供了这个可能,有助于深刻理解深度学习原理。左手原理、右手代码,双管齐下!本课程详细讲解深度学习原理并进行Python代码实现深度学习网络。课程内容涵盖感知机、多层感知机、卷积神经网络、循环神经网络,并使用Python 3及Numpy、Matplotlib从零实现上述神经网络。本课程还讲述了神经网络训练方法与实践技巧,且开展了代码实践演示。课程对于核心内容讲解深入细致,如基于计算图理解反向传播算法,并用数学公式推导反向传播算法;另外还讲述了卷积加速方法im2col。【课程收获】本课程力求使学员通过深度学习原理、算法公式及Python代码的对照学习,摆脱框架而掌握深度学习底层实现原理与方法。本课程将给学员分享深度学习的Python实现代码。课程代码通过Jupyter Notebook演示,可在Windows、ubuntu等系统上运行,且不需GPU支持。【优惠说明】 课程正在优惠中!  备注:购课后可加入白勇老师课程学习交流QQ群:957519975【相关课程】学习本课程的前提是会使用Python语言以及Numpy和Matplotlib库。相关课程链接如下:《Python编程的术与道:Python语言入门》https://edu.csdn.net/course/detail/27845《玩转Numpy计算库》https://edu.csdn.net/lecturer/board/28656《玩转Matplotlib数据绘图库》https://edu.csdn.net/lecturer/board/28720【课程内容导图及特色】
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值