BPTT-应用于简单的循环神经网络「建议收藏」

BPTT-应用于简单的循环神经网络「建议收藏」上面是一组序列变量,即四个变量z1,z2,z3,z4z_1,z_2,z_3,z_4中的任一ziz_i的值均依赖于它前面的变量z1,z2,..,zi−1z_1,z_2,..,z_{i-1},且有z2=2∗z1z_2=2*z_1z3=3∗z2+z1z_3=3*z_2+z_1z4=4∗z3+2∗z2+z1z_4=4*z_3+2*z_2+z_1

大家好,又见面了,我是你们的朋友全栈君。

这里写图片描述
上面是一组序列变量,即四个变量 z1,z2,z3,z4 中的任一 zi 的值均依赖于它前面的变量 z1,z2,..,zi−1 ,且有
z2=2∗z1

z3=3∗z2+z1

z4=4∗z3+2∗z2+z1

E=4∗z4+2∗z2

现在我们定义:

∂E∂zi : 目标函数 E 对变量

zi
的偏微分,
∂+Edzi : 目标函数 E 对变量

zi
的全微分。比如,

∂+E∂z4=∂E∂z4=4

∂+E∂z3=∂E∂z3+∂+E∂z4⋅∂z4∂z3=16

∂+E∂z2=∂E∂z2+∂+E∂z4⋅∂z4∂z2+∂+E∂z3⋅∂z3∂z2=58

∂+E∂z1=∂E∂z1+∂+E∂z4⋅∂z4∂z1+∂+E∂z3⋅∂z3∂z1+∂+E∂z2⋅∂z2∂z1=136

综上,我们有如下的链式法则[1]

∂+E∂zi=∂E∂zi+∑j>iT∂+E∂zj⋅∂zj∂ziEq.1

traditional recurrent neural network

下图是一个基础的循环神经网络示意图
循环神经网络
Fig. 1: 循环神经网络示意图

其中x_t, h_t, y_t 分别代表 t 时刻网络的输入向量,隐藏层向量, 输出向量, w_ih, w_ho均为 权重矩阵,具体的计算公式如下:

xct=[xt,ht−1]

ht=ϕ(zht)=tanh(wih⊙xct+bih)

yt=σ(zot)=softmax(who⊙ht+bho)

成本函数采用信息熵形式

C=∑t=1T∑k(1−y^(t)k)∗log(y(t)k)=∑t=1Tc(yt)




k表示输出层节点个数,

y^
表示真实的目标输出。

我们的目标是计算

∂+C∂wih



和


∂+C∂who



即在给定

x1,x2,...xT
作为输入序列,

y^1,y^2,...,y^T
作为目标输出序列的前提下,计算成本函数

C
对权重矩阵



wih,who

的全微分 (这里我们暂时忽略

bih,bho
)。为此,我们先计算

∂+C∂zht
和

∂+C∂zot
, 其中

zht
和

zot
分别是图中绿色模块和黄色模块的输入。

根据 Fig. 1, 我们看出绿色模块之间有如下的依赖关系
differciate_h
那么 zhi 仅仅依赖于 zhi−1 ,根据链式方程 Eq. 1:

∂+C∂zht=∂C∂zht+∑t′>tT∂+C∂zht′⋅∂zht′∂zht=∂C∂zht+∂+C∂zht+1⋅∂zht+1∂zht



并且,


∂+C∂zhT=∂C∂zhT=∂C∂zoT⊙who⋅ϕ˙(zhT)

因为 Fig. 1 中黄色模块之间的相互依赖关系是通过绿色模块产生的,它们之间并没有直接的依赖关系,所以有

∂+C∂zot==∂C∂zotc˙(yt)σ˙(zot)



由上面的三个公式,可进而依次求出

t=T−1,T−2,...,2,1
时刻时的

∂+C∂zht
值。

最终有:

∂+C∂who=∑t=1T∂+C∂zot∂zot∂who=∑t=1T∂+C∂zot⊙ht




∂+C∂wih=∑t=1T∂+C∂zht∂zht∂wih=∑t=1T∂+C∂zht⊙xct



[1] Backpropagation through time: what it does and how to do it
(web)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/152284.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • pycharm2020 激活码(破解版激活)

    pycharm2020 激活码(破解版激活),https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月16日
  • 一种基于Qt的可伸缩的全异步C/S架构server实现(一) 综述

    一种基于Qt的可伸缩的全异步C/S架构server实现(一) 综述

    2022年1月23日
  • mysql-创建用户报错ERROR 1396 (HY000): Operation CREATE USER failed for ‘XXXX’@’XXXX’

    mysql-创建用户报错ERROR 1396 (HY000): Operation CREATE USER failed for ‘XXXX’@’XXXX’创建用户:createuser‘test’@’%’identifiedby‘test’;显示ERROR1396(HY000):OperationCREATEUSERfailedfor‘test’@’%’查看是不是存在这个用户selectuserfromuser;发现没有这个用户。记得上次有删除过这个用户。可能没有刷新权限flushpriv

    2022年8月12日
  • 浓缩就是精华「建议收藏」

    浓缩就是精华「建议收藏」 『凡人牧场』人生启示录:被称为世上最经典的25句话(转载)   作者:晶晶鱼 提交日期:2003-12-3115:32:40    1,记住该记住的,忘记该忘记的。改变能改变的,接受不能改变的。      2,能冲刷一切的除了眼泪,就是时间,以时间来推移感情,时间越长,冲突越淡,仿佛不断稀释的茶。      3,怨言是上天得至人类最大的供物,也是人

    2022年6月29日
  • vue $attrs的使用

    vue $attrs的使用$attrs的使用vue$attrs是在vue的2.40版本以上添加的。项目中有多层组件传参可以使用$attrs,可以使代码更加美观,更加简洁,维护代码的时候更方便。如果使用普通的父子组件传参prop和$emit,$on会很繁琐;如果使用vuex会大材小用,只是在这几个组件中使用,没必要使用vuex;使用事件总线eventBus,使用不恰当的话,有可能会出现事件多次执行。如果给组件传递…

    2022年10月18日
  • c 语言条件运算符,C 语言条件运算符详细讲解

    c 语言条件运算符,C 语言条件运算符详细讲解C语言条件运算符详细讲解如果希望获得两个数中最大的一个,可以使用if语句,例如:if(a>b){max=a;}else{max=b;}不过,C语言提供了一种更加简单的方法,叫做条件运算符,语法格式为:表达式1?表达式2:表达式3条件运算符是C语言中唯一的一个三目运算符,其求值规则为:如果表达式1的值为真,则以表达式2的值作为整个条件表达式的值,否则以表达式3的值作为整…

    2022年10月2日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号