循环神经网络

提示:内容来自沐神的《动手深度学习》


前言

参考代码地址
沐神B站地址


提示:以下是本篇文章正文内容,下面案例可供参考

一、循环神经网络

1.1 RNN定义

假设在时间步 t t t有小批量输入 X t ∈ R n × d X_t∈R^{n×d} XtRn×d。其中n代表序列样本的小批量, X t X_t Xt的每一行对应于来自该序列的时间步 t t t的一个样本。用 H t ∈ R n × h H_t∈R^{n×h} HtRn×h表示时间步 t t t的隐藏变量(隐藏变量保留了序列到当前时间步的历史信息), H t − 1 H_{t-1} Ht1表示前一个时间步的隐藏变量。我们可以计算得 H t = φ ( X t W x h + H t − 1 W h h + b h ) H_t = φ(X_tW_{xh} + H_{t-1}W_{hh} + b_h) Ht=φ(XtWxh+Ht1Whh+bh)其中 H t ∈ R n × h 、 X t ∈ R n × d 、 W x h ∈ R d × h 、 H t − 1 ∈ R n × h 、 W h h ∈ R h × h 、 b h ∈ R 1 × h H_t∈R^{n×h}、X_t∈R^{n×d}、W_{xh}∈R^{d×h}、H_{t-1}∈R^{n×h}、W_{hh}∈R^{h×h}、b_h∈R^{1×h} HtRn×hXtRn×dWxhRd×hHt1Rn×hWhhRh×hbhR1×h
注意在计算 H t H_t Ht时可以将 X t X_t Xt H t − 1 H_{t-1} Ht1按行拼接变成维度为 R n × ( d + h ) R^{n×(d+h)} Rn×(d+h)的矩阵,将 W x h W_{xh} Wxh W h h W_{hh} Whh按列拼接变成维度为 R ( d + h ) × h R^{(d+h)×h} R(d+h)×h,再进行矩阵相乘操作,结果保持不变。
输出层计算公式如下: O t = H t W h q + b q O_t = H_tW_{hq} + b_q Ot=HtWhq+bq其中 O t ∈ R n × h 、 H t ∈ R n × h 、 W h q ∈ R h × q 、 b q ∈ R 1 × q O_t∈R^{n×h}、H_t∈R^{n×h}、W_{hq}∈R^{h×q}、b_q∈R^{1×q} OtRn×hHtRn×hWhqRh×qbqR1×q
下图展示了循环神经网络在三个相邻时间步的计算逻辑
在这里插入图片描述

1.2 困惑度

定义损失函数
交叉熵损失的平均值
解释
在这里插入图片描述

1.3 GRU

1.3.1重置门和更新门

重置门(reset gate)允许我们控制“可能还想记住”的过去状态的数量,有助于捕获序列中的短期依赖关系;
更新门(update gate)允许我们控制新状态中有多少个是旧状态的副本,有助于捕获序列中的长期依赖关系。
我们把它们设计成区间 ( 0 , 1 ) (0,1) (0,1)中的向量,使用sigmoid激活函数。
在这里插入图片描述
门控循环单元数学表达式
对于给定时间步 t t t,假设输入是一个小批量 X t ∈ R n × d X_t ∈ R^{n×d} XtRn×d(样本个数: n n n,输入特征数: d d d),上一个时间步的隐状态是 H t − 1 ∈ R n × h H_{t-1}∈R^{n×h} Ht1Rn×h(隐藏单元个数: h h h)。那么重置门 R t ∈ R d × h R_t∈R^{d×h} RtRd×h和更新门 Z t ∈ R n × h Z_t∈R^{n×h} ZtRn×h的计算如下所示: R t = δ ( X t W x r + H t − 1 W h r + b r ) R_t = δ(X_tW_{xr}+H_{t-1}W_{hr}+b_r) Rt=δ(XtWxr+Ht1Whr+br) Z t = δ ( X t W x z + H t − 1 W h z + b z ) Z_t=δ(X_tW_{xz}+H_{t-1}W_{hz}+b_z) Zt=δ(XtWxz+Ht1Whz+bz)其中 W x r , W x z ∈ R d × h W_{xr}, W_{xz}∈R^{d×h} Wxr,WxzRd×h W h r , W h z ∈ R h × h W_{hr}, W_{hz}∈R^{h×h} Whr,WhzRh×h是权重参数, b r , b z ∈ R 1 × h b_r, b_z∈R^{1×h} br,bzR1×h是偏置参数。请注意,在求和过程中会触发广播机制。使用sigmoid函数将输入值转换到区间(0,1)。

1.3.2 候选隐状态

候选隐状态 H ~ \tilde{H} H~计算公式如下:
H ~ = t a n h ( X t W x h + ( R t × H t − 1 ) W h h + b h ) \tilde{H}=tanh(X_tW_{xh}+(R_t×H_{t-1})W_{hh}+b_h) H~=tanh(XtWxh+(Rt×Ht1)Whh+bh)其中 W x h ∈ R d × h W_{xh}∈R^{d×h} WxhRd×h W h h ∈ R h × h W_{hh}∈R^{h×h} WhhRh×h是权重参数, b h ∈ R 1 × h b_h∈R^{1×h} bhR1×h是偏置项,符号‘×’表示按元素乘积。在这里使用tanh非线性激活函数来确保候选隐状态中的值保持在区间(-1,1)中。
解释
R t R_t Rt H t − 1 H_{t-1} Ht1的元素相乘可以减少以往状态的影响。 每当重置门 R t R_t Rt中的项接近 1 1 1时, 我们恢复一个如 RNN中的普通的循环神经网络。 对于重置门 R t R_t Rt中所有接近 0 0 0的项, 候选隐状态是以 X t X_t Xt作为输入的多层感知机的结果。 因此,任何预先存在的隐状态都会被重置为默认值。
在这里插入图片描述

1.3.3 隐状态

隐状态计算公式如下: H t = Z t × H t − 1 + ( 1 − Z t ) × H t ~ H_t=Z_t×H_{t-1}+(1-Z_t)×\tilde{H_t} Ht=Zt×Ht1+(1Zt)×Ht~解释
每当更新门 Z t Z_t Zt接近 1 1 1时,模型就倾向只保留旧状态。 此时,来自 X t X_t Xt的信息基本上被忽略, 从而有效地跳过了依赖链条中的时间步 t t t。 相反,当 Z t Z_t Zt接近 0 0 0时, 新的隐状态 H t H_t Ht就会接近候选隐状态 H t ~ \tilde{H_t} Ht~。 这些设计可以帮助我们处理循环神经网络中的梯度消失问题, 并更好地捕获时间步距离很长的序列的依赖关系。 例如,如果整个子序列的所有时间步的更新门都接近于 1 1 1, 则无论序列的长度如何,在序列起始时间步的旧隐状态都将很容易保留并传递到序列结束。
在这里插入图片描述

1.4 LSTM

1.4.1 输入门、遗忘门门和输出门

输入门:决定数据何时读入单元
遗忘门:重置单元内容
输出门:从单元中输出条目
图示如下
在这里插入图片描述
数学公式推导
假设有 h h h个隐藏单元,批量大小为 n n n,输入数为 d d d。输入为 X t ∈ R n × d X_t∈R^{n×d} XtRn×d,前一时间步的隐状态为 H t − 1 ∈ R n × h H_{t-1}∈R^{n×h} Ht1Rn×h。相应地,时间步 t t t的门定义如下:输入门 I t ∈ R n × h I_t∈R^{n×h} ItRn×h,遗忘门是 F t ∈ R n × h F_t∈R^{n×h} FtRn×h,输出门是 O t ∈ R n × h O_t∈R^{n×h} OtRn×h。它们的计算方法如下: I t = δ ( X t W x i + H t − 1 W h i + b i ) , F t = δ ( X t W x f + H t − 1 W h f + b f ) , O t = δ ( X t W x o + H t − 1 W h o + b o ) I_t=δ(X_tW_{xi}+H_{t-1}W_{hi}+b_i),\\ F_t = δ(X_tW_{xf}+H_{t-1}W_{hf}+b_f),\\O_t=δ(X_tW_{xo}+H_{t-1}W_{ho}+b_o) It=δ(XtWxi+Ht1Whi+bi),Ft=δ(XtWxf+Ht1Whf+bf),Ot=δ(XtWxo+Ht1Who+bo)其中 W x i , W x f , W x o ∈ R d × h W_{xi},W_{xf},W_{xo}∈R^{d×h} WxiWxfWxoRd×h W h i , W h f , W h o ∈ R h × h W_{hi},W_{hf},W_{ho}∈R^{h×h} WhiWhfWhoRh×h是权重参数, b i , b f , b o ∈ R 1 × h b_i,b_f,b_o∈R^{1×h} bibfboR1×h是偏置参数。注意上述三门都是用sigmoid激活函数,其值都在(0,1)之间

1.4.2 候选记忆元

候选记忆元 C t ~ ∈ R n × h \tilde{C_t}∈R^{n×h} Ct~Rn×h。候选记忆元的计算使用 t a n h tanh tanh作为激活函数,函数取值范围为(-1,1)。其在时间步t处的方程为 C t ~ = t a n h ( X t W x c + H t − 1 W h c + b c ) \tilde{C_t}=tanh(X_tW_{xc}+H_{t-1}W_{hc}+b_c) Ct~=tanh(XtWxc+Ht1Whc+bc)其中 W x c ∈ R d × h W_{xc}∈R^{d×h} WxcRd×h W h c ∈ R h × h W_{hc}∈R^{h×h} WhcRh×h是权重参数, b c ∈ R 1 × h b_c∈R^{1×h} bcR1×h是偏置参数。
图示如下
在这里插入图片描述

1.4.3 记忆元

输入门 I t I_t It控制采用多少来自 C t ~ \tilde{C_t} Ct~的数据,而遗忘门 F t F_t Ft控制保留多少过去的记忆元 C t − 1 ∈ R n × h C_{t-1}∈R^{n×h} Ct1Rn×h的内容。使用按元素乘法,得出: C t = F t × C t − 1 + I t × C t ~ C_t=F_t×C_{t-1}+I_t×\tilde{C_t} Ct=Ft×Ct1+It×Ct~解释
如果遗忘门始终为 0 0 0且输入门始终为, 则过去的记忆元 C t − 1 C_{t-1} Ct1将随时间被保存并传递到当前时间步。 引入这种设计是为了缓解梯度消失问题, 并更好地捕获序列中的长距离依赖关系。
图示如下
在这里插入图片描述

1.4.4 隐状态

计算隐状态 H t ∈ R n × h H_t∈R^{n×h} HtRn×h公式如下: H t = O t × t a n h ( C t ) H_t=O_t×tanh(C_t) Ht=Ot×tanh(Ct)解释
只要输出门接近1,我们就能够有效地将所有记忆信息传递给预测部分,而对于输出门接近0,我们只保留记忆元内所有信息,而不需要更新隐状态。
图示如下
在这里插入图片描述

1.5 深度循环神经网络

图示如下
在这里插入图片描述
数学模型
假设在时间步 t t t有一个小批量的输入数据 X t ∈ R n × d X_t∈R^{n×d} XtRn×d(样本数: n n n,每个样本中的输入数: d d d)。同时,将 l t h l^{th} lth隐藏层( l = 1 , . . . , L l=1,...,L l=1,...,L)的隐状态为 H t ( l ) ∈ R n × h H_t^{(l)}∈R^{n×h} Ht(l)Rn×h(隐藏单元数:h),输出层变量设为 O t ∈ R n × q O_t∈R^{n×q} OtRn×q(输出数: q q q)。设置 H t ( 0 ) = X t H_t^{(0)}=X_t Ht(0)=Xt,第 l l l个隐藏层的隐状态使用激活函数 φ l φ_l φl,则: H t ( l ) = φ l ( H t ( l − 1 ) W x h ( l ) + H t − 1 ( l ) W h h ( l ) + b h ( l ) ) H_t^{(l)}=φ_l(H_t^{(l-1)}W_{xh}^{(l)}+H^{(l)}_{t-1}W^{(l)}_{hh}+b^{(l)}_h) Ht(l)=φl(Ht(l1)Wxh(l)+Ht1(l)Whh(l)+bh(l))其中,权重 W x h ( l ) ∈ R h × h ( 注 意 : W x h ( 1 ) ∈ R d × h ) , W h h ( l ) ∈ R h × h W_{xh}^{(l)}∈R^{h×h}(注意:W_{xh}^{(1)}∈R^{d×h}),W^{(l)}_{hh}∈R^{h×h} Wxh(l)Rh×h(Wxh(1)Rd×h)Whh(l)Rh×h和偏置 b h ( l ) ∈ R 1 × h b^{(l)}_h∈R^{1×h} bh(l)R1×h都是第 l l l个隐藏层的模型参数。
最后,输出层的计算仅基于第 l l l个隐藏层最终的隐状态: O t = H t ( l ) W h q + b q O_t=H_t^{(l)}W_{hq}+b_q Ot=Ht(l)Whq+bq其中,权重 W h q ∈ R h × q W_{hq}∈R^{h×q} WhqRh×q和偏置 b q ∈ R 1 × q b_q∈R^{1×q} bqR1×q都是输出层的模型参数。

1.6 双向循环网络

图示如下
在这里插入图片描述
对于任意时间步 t t t,给定一个小批量的输入数据 X t ∈ R n × d X_t∈R^{n×d} XtRn×d(样本数:n,每个示例中的输入数:d),并且令隐藏层激活函数为 φ φ φ。在双向架构中,我们设该时间步的前向和反向隐状态分别为 H t → ∈ R n × h \mathop{H_t}\limits ^{\rightarrow}∈R^{n×h} HtRn×h H t ← ∈ R n × h \mathop{H_t}\limits ^{\leftarrow}∈R^{n×h} HtRn×h,其中 h h h是隐藏单元的数目。前向和反向隐状态的更新如下: H t → = φ ( X t W x h ( f ) + H → t − 1 W h h ( f ) + b h ( f ) ) , H t ← = φ ( X t W x h ( b ) + H ← t + 1 W h h ( b ) + b h ( b ) ) \mathop{H_t}\limits ^{\rightarrow}=φ(X_tW^{(f)}_{xh}+{\mathop{H}\limits ^{\rightarrow}}_{t-1}W^{(f)}_{hh}+b^{(f)}_h),\\\mathop{H_t}\limits ^{\leftarrow}=φ(X_tW^{(b)}_{xh}+{\mathop{H}\limits ^{\leftarrow}}_{t+1}W^{(b)}_{hh}+b^{(b)}_h) Ht=φ(XtWxh(f)+Ht1Whh(f)+bh(f)),Ht=φ(XtWxh(b)+Ht+1Whh(b)+bh(b))其中,权重 W x h ( f ) ∈ R d × h , W h h ( f ) ∈ R h × h , W x h ( b ) ∈ R d × h , W h h ( b ) ∈ R h × h W^{(f)}_{xh}∈R^{d×h},W^{(f)}_{hh}∈R^{h×h},W^{(b)}_{xh}∈R^{d×h},W^{(b)}_{hh}∈R^{h×h} Wxh(f)Rd×hWhh(f)Rh×hWxh(b)Rd×hWhh(b)Rh×h和偏置 b h ( f ) ∈ R 1 × h , b h ( b ) ∈ R 1 × h b^{(f)}_h∈R^{1×h},b^{(b)}_h∈R^{1×h} bh(f)R1×hbh(b)R1×h都是模型参数。
然后将前向隐状态 H t → \mathop{H_t}\limits ^{\rightarrow} Ht和反向隐状态 H t ← \mathop{H_t}\limits ^{\leftarrow} Ht连接起来,获得输出层的隐状态 H t ∈ R n × 2 h H_t∈R^{n×2h} HtRn×2h。在具有多个隐藏层的深度双向循环神经网络中,该信息作为输入传递到下一个双向层。最后输出层计算得到的输出为 O t ∈ R n × q O_t∈R^{n×q} OtRn×q q q q是输出单元的数目): O t = H t W h q + b q O_t = H_tW_{hq}+b_q Ot=HtWhq+bq这里,权重矩阵 W h q ∈ R 2 h × q W_{hq}∈R^{2h×q} WhqR2h×q和偏置 b q ∈ R 1 × q b_q∈R^{1×q} bqR1×q是输出层的模型参数。
注意
双向循环神经网络无法用于预测模型且其计算速度非常慢,在实践中使用较少。常用于命名实体识别、机器翻译等。

二、解码器和编码器架构

编码器:将输入编程成中间表达形式(特征)。它接受一个长度可变的序列作为输入, 并将其转换为具有固定形状的编码状态。
解码器:将中间表示解码输出。它将固定形状的编码状态映射到长度可变的序列。
在这里插入图片描述

2.1 Seq2seq

在这里插入图片描述

  • 编码器是一个RNN,读取输入句子,可以是双向。
  • 解码器使用另外一个RNN来输出。
    在这里插入图片描述
  • 编码器是没有输出的RNN
  • 编码器最后时间步的隐状态==用作解码器的初始隐状态。
    下图是训练状态时状态图
    在这里插入图片描述
  • 注意在训练时,由于已经知道目标句子,可以将目标句子作为输入。
    下图是推理状态图
    在这里插入图片描述
  • 推理时,由于不知道当前时刻输出,所以使用上一个时刻的输入作为当前时刻输入。

2.2 衡量生成序列的好坏BLUE

  • P n P_n Pn预测中所有n-gram的精度
  • 标签序列A B C D E F和预测序列A B B C D,有 P 1 = 4 / 5 , P 2 = 3 / 4 , P 3 = 1 / 3 , P 4 = 0 P_1=4/5, P_2=3/4, P_3=1/3, P_4=0 P1=4/5,P2=3/4,P3=1/3,P4=0
    解释
    p 1 p_1 p1含义是预测序列中A、B、B、C、D单独成词总共5中可能,并统计这五种可能在标签序列中出现的次数。A在标签序列中出现一次,且预测序列中也出现一次,得分加1;B在标签序列中出现1次,在预测序列中出现2次,只得1分,C和D同理,因此 p 1 = 4 / 5 p_1=4/5 p1=4/5
    P 2 P_2 P2含义是预测序列相邻两词成对,所有AB、BB、BC、CD一共4种可能,其中只有AB、BC、CD均在标签序列和预测序列各出现一次,因此 P 2 = 3 / 4 P_2=3/4 P2=3/4 P 3 、 P 4 P_3、P_4 P3P4求法与此类似。
    BLUE得分求法
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值