hanbt / learn_dl

Deep learning algorithms source code for beginners
Apache License 2.0
1.19k stars 985 forks source link

长短时记忆网络(LSTM)中Wfx、Wix, Wox, Wcx的权重梯度的计算,为何不再对历史时刻t进行累加? #30

Open cyrixlin opened 5 years ago

cyrixlin commented 5 years ago

学习长短时记忆网络(LSTM)中发现一个问题,Wfx、Wix, Wox, Wcx的权重梯度的计算,没有对历史时刻t进行累加。而在循环神经网络(RNN)中,损失函数E对权重矩阵U的梯度,也是各个时刻E对U的梯度之和。因此很奇怪,LSTM中损失函数对Wfx、Wix, Wox, Wcx的权重梯度,只取最后时刻的梯度,而没有按历史时刻进行梯度累加。 我怀疑LSTM里Wfx、Wix, Wox, Wcx的权重梯度的计算写错了,也应当按照历史时刻t进行梯度累加。

894551089 commented 5 years ago

没有写错呀,LSTM里Xt-1与WWfx、Wix, Wox, Wcx是没有关系的,所以和RNN里的那个不一样,建议你看看RNN里关于为什么把梯度相加的推导

cyrixlin commented 5 years ago

"LSTM里Xt-1与Wfx、Wix, Wox, Wcx是没有关系的",Xt-1与Wfx、Wix, Wox, Wcx当然是有关系的。RNN与LSTM里权重系数都是共享的,X1, X2, ... Xt-1, Xt共享一套Wfx、Wix, Wox, Wcx。因此Wfx、Wix, Wox, Wcx发生变动是从各个时刻共同来影响最后的损失函数L的。

894551089 commented 5 years ago

RNN里的W是对状态st-1的权重,而LSTM里的Wfx,Wix,Wox,Wcx是对于输入X来说的,你硬要比较,那也只是和RNN里的U类似罢了,但是RNN里的U的梯度是所有时间和,这是因为U是Nett的函数,所以推导和W一样都是所有时间状态的梯度和,你再认真看看RNN里的证明吧

cyrixlin commented 5 years ago

确实Wfx,Wix,Wox,Wcx就是和RNN里的U类似,但是RNN里的U的梯度是所有时间和,这里也没有任何道理求Wfx,Wix,Wox,Wcx的梯度时候不对各个时刻求和。Wfx、Wix, Wox, Wcx发生变动是从各个时刻共同来影响最后的损失函数L的。这道理是很明显的。

894551089 commented 5 years ago

你去推推RNN里的U的梯度,对U求梯度可以利用链式求导法则化成对netj的偏导,而netj=UXj+Wf(netj-1),这里j是时刻,这样就关联起来了。你再看看LSTM里的NETo,t,NETf,t,NETc,t这些。例如
NETo,t=Wo,hht-1+Wo,xXt+b,在求对Wo,x求导时,导数和Wo,h*ht-1无关,这样就和ht-1即上一时刻的输出是无关的(ht和ht-1和xt-1有关),也就无法关联到xt-1,而对Wo,h求导这和ht-1关联了。

sangcheng0615 commented 5 years ago

@894551089 在求对Wo,x求导时,导数和Wo,h*ht-1无关,这不对吧,你推导下,ht-1是和Ot-1相关的,而Ot-1和Wo,x与Xt-1 相关,这样就关联上了啊

luv666 commented 4 years ago

我有同样的问题 但是没有人能解释清楚

irises1412 commented 3 years ago

+1,我也理解不了

yepaoxixi commented 6 months ago

你发过来的邮件怎么都是乱码啊,什么都看不到,再发一次吧。

haildceu1 commented 6 months ago

下面这个视频里面对于Wxf的推导确实用的求和,应该是写错了 https://www.bilibili.com/video/BV1uT411n7Br?p=5&vd_source=df279daeacbb7a06318d2a393fff9b4a