大家好,又见面了,我是你们的朋友全栈君。
上面是一组序列变量,即四个变量 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]
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)
成本函数采用信息熵形式
k
表示输出层节点个数,
y^
表示真实的目标输出。
我们的目标是计算
和
即在给定
x1,x2,...xT
作为输入序列,
y^1,y^2,...,y^T
作为目标输出序列的前提下,计算成本函数
C
对权重矩阵
wih,who
的全微分 (这里我们暂时忽略
bih,bho
)。为此,我们先计算
∂+C∂zht
和
∂+C∂zot
, 其中
zht
和
zot
分别是图中绿色模块和黄色模块的输入。
根据 Fig. 1, 我们看出绿色模块之间有如下的依赖关系
那么 zhi 仅仅依赖于 zhi−1 ,根据链式方程 Eq. 1:
并且,
因为 Fig. 1 中黄色模块之间的相互依赖关系是通过绿色模块产生的,它们之间并没有直接的依赖关系,所以有
由上面的三个公式,可进而依次求出
t=T−1,T−2,...,2,1
时刻时的
∂+C∂zht
值。
最终有:
[1] Backpropagation through time: what it does and how to do it
(web)
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/152284.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...