门控循环单元GRUCell详解及反向传播的梯度求导

摘要

本文给出门控循环单元GRUCell的定义公式, 并求解其在反向传播中的梯度.

给出的相关公式是完整的, 编程导向的, 可以直接用于代码实现, 已通过 Python 验证.

相关

配套代码, 请参考文章 :

纯 Python 和 PyTorch 对比实现门控循环单元 GRU 及反向传播

Affine 变换的定义和梯度, 请参考文章 :

affine/linear(仿射/线性)变换函数详解及全连接层反向传播的梯度求导

系列文章索引 :

https://blog.csdn.net/oBrightLamp/article/details/85067981

正文

1. GRUCell 定义

1.1 一次迭代

n考虑输入一个 3 阶张量 X l m n X_{lmn} Xlmn, 该张量可以表示为 l l l 个尺寸为 m × n m \times n m×n 的矩阵 X m n X_{mn} Xmn, 同时表明循环单元的输入尺寸为 n n n.

设第一个输入矩阵为 X m n ( 1 ) X_{mn}^{(1)} Xmn(1) , 对应的 3 个变换矩阵分别为 W r , W u , W c W_r,W_u,W_c Wr,Wu,Wc, 偏置向量为 a r , a u , a c a_r,a_u,a_c ar,au,ac .

设初始隐含层矩阵为 H m r ( 0 ) H_{mr}^{(0)} Hmr(0), 对应的 2 个变换矩阵分别为 V r , V u , V c V_r,V_u,V_c Vr,Vu,Vc, 偏置向量为 b r , b u , b c b_r,b_u,b_c br,bu,bc .

则一次 GRUCell 循环变换为 :
A r = X ( 1 ) W r T + a r + H ( 0 ) V r T + b r A u = X ( 1 ) W u T + a u + H ( 0 ) V u T + b u g r = s i g m o i d ( A r ) g u = s i g m o i d ( A u )    A c = X ( 1 ) W c T + a c + g r ⊙ ( H ( 0 ) V c T + b c ) g c = t a n h ( A c ) H ( 1 ) = ( 1 − g u ) ⊙ g c + g u ⊙ H ( 0 ) A_r =X^{(1)}{W_{r}}^T + a_{r} + H^{(0)}V_{r}^T + b_{r}\\ A_u =X^{(1)}{W_{u}}^T + a_{u} + H^{(0)}V_{u}^T + b_{u}\\ g_r =sigmoid(A_r)\\ g_u =sigmoid(A_u)\\ \;\\ A_c =X^{(1)}{W_{c}}^T + a_{c} + g_r \odot (H^{(0)}V_{c}^T + b_{c})\\ g_c =tanh(A_c)\\ H^{(1)} =(1 - g_u)\odot g_c + g_u \odot H^{(0)} Ar=X(1)WrT+ar+H(0)VrT+brAu=X(1)WuT+au+H(0)VuT+bugr=sigmoid(Ar)gu=sigmoid(Au)Ac=X(1)WcT+ac+gr(H(0)VcT+bc)gc=tanh(Ac)H(1)=(1gu)gc+guH(0)
上式中的 ⊙ \odot 表示 element-wise 元素积, 将以上过程记为 :
H ( 1 ) = G R U C e l l ( X ( 1 ) , H ( 0 ) ) H^{(1)} = GRUCell(X^{(1)},H^{(0)}) H(1)=GRUCell(X(1),H(0))
循环到下一次时, 将 H ( 1 ) , C ( 1 ) H^{(1)},C^{(1)} H(1),C(1) 代入 H ( 0 ) , C ( 0 ) H^{(0)},C^{(0)} H(0),C(0) 的位置, 与下一个 X ( 2 ) X^{(2)} X(2) 重新进行运算.

1.2 循环迭代

下面使用迭代记法表示 GRUCell 运算.

使用 H ( 0 ) H^{(0)} H(0) 表示初始隐含层矩阵, 对于 :
X l m n = X m n ( 1 ) , X m n ( 2 ) , X m n ( 3 ) , ⋯   , X m n ( l ) X_{lmn} = X_{mn}^{(1)},X_{mn}^{(2)},X_{mn}^{(3)},\cdots,X_{mn}^{(l)} Xlmn=Xmn(1),Xmn(2),Xmn(3),,Xmn(l)
则 :
H ( 1 ) = G R U C e l l ( X ( 1 ) , H ( 0 ) )    H ( 2 ) = G R U C e l l ( X ( 2 ) , H ( 1 ) )    H ( 3 ) = G R U C e l l ( X ( 3 ) , H ( 2 ) ) ⋮ H ( l ) = G R U C e l l ( X ( l ) , H ( l − 1 ) ) H^{(1)} = GRUCell(X^{(1)},H^{(0)})\\ \;\\ H^{(2)} = GRUCell(X^{(2)},H^{(1)})\\ \;\\ H^{(3)} = GRUCell(X^{(3)},H^{(2)})\\ \vdots\\ H^{(l)} = GRUCell(X^{(l)},H^{(l-1)})\\ H(1)=GRUCell(X(1),H(0))H(2)=GRUCell(X(2),H(1))H(3)=GRUCell(X(3),H(2))H(l)=GRUCell(X(l),H(l1))

展开最后一层作为示例 :
A r = X ( l ) W r T + a r + H ( l − 1 ) V r T + b r A u = X ( l ) W u T + a u + H ( l − 1 ) V u T + b u g r = s i g m o i d ( A r ) g u

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值