循环神经网络 讨论区

http://zh.diveintodeeplearning.org/chapter_recurrent-neural-networks/rnn.html

对于6,2,4的练习
“如果我们使⽤循环神经⽹络来预测⼀段⽂本序列的下⼀个词,输出个数应该是多少?”
请问输出个数是不是与设定的输出层神经元个数是一样的。

应该是词典中不同词的个数(词典大小)

先声明下,我不是杠精,我就是想问下开头那段,XW是nh矩阵,怎么和1h的b相加呢,求解

http://zh.diveintodeeplearning.org.s3-website-us-west-2.amazonaws.com/chapter_recurrent-neural-networks/rnn.html

上式相加的两项形状不同,因此将按照广播机制相加(参见“数据操作”一节)。

“接下来,我们用一个具体的例子来验证这一点。首先,我们构造矩阵X、W_xh、H和W_hh,它们的形状分别为(3,1)、(1,4)、(3,2)和(2,4)。将X与W_xh、H与W_hh分别相乘,再把两个相乘的结果相加,得到形状为(3,4)的矩阵。”

文中这一段举例,构造W_hh为2x4的矩阵,但W_hh是否应该为方阵,在这里构造为4x4的方阵合适些?

1赞

谢谢,上下文很容易把W_hh作为方矩阵

这里我直接改了

下次你可以直接提交pull request,这样就可以变成贡献者了:

好的,希望再有发现的机会。

这里 Momenta 的链接似乎不对,你能帮忙fix一下不

已提交pull request. 非常感谢,特地找个机会给我!

上一个RNN的concat ndarray示例修改应该算是你的贡献~要不然读起来确实容易confuse

Ht-1 的shape 应该和nd.dot(X,W_xh)一致,也应该和H 一致。

*6.2节说: 循环神经网络模型参数的数量不随时间步的递增而增长。
*6.6节说:当时间步较大或者较小时,循环神经网络的梯度容易出现衰减或者爆炸。
总感觉这两者有点矛盾。该怎么理解呢?

(1)循环神经网络的参数在时间步上是共享的,可以看下公式介绍;
(2)循环神经网络使用BPTT进行优化,根据求导的链式法则可知,时间步越长,梯度有可能出现越来越小(越来越大).
这两者不矛盾。

我们构造矩阵 XW_xhHW_hh ,它们的形状分别为(3, 1)、(1, 4)、(3, 4)和(4, 4)

书中RNN中计算公式为
Ht = ϕ(X_t*W_xh +H(t-1)*W_hh + Bh), bias为一项 Bh

框架mxnet.gluon.rnn.RNN中计算公式为
h(t)=tanh(W_ih∗X_t+B_ih+W_hh∗h(t−1)+B_hh),bias为两项B_ih 和 B_hh

书上的计算公式的bias为啥和框架中的不同?

为什么我们需要在每一个时间步假设Wxh和Whh 都是相同的?

文本序列不同字符个数?

使用广播机制

其实就是说:循环神经网络的参数在时间步上是共享的,可以看下公式介绍;
如果不是共享的,每一步都有自己的Wxh, Whh, 那参数不就成了时间t的函数了?如果是那样,参数个数会随时间线性增加(倍增),并且,也无法训练了。