双向循环神经网络

http://zh.d2l.ai/chapter_recurrent-modern/bi-rnn.html

为什么这里乘积符号变成求和符号了?

1 Like

公式9.4.2没有看明白,\pi_{i}(h_{i})是什么意思?

如果我没有理解错的话,这里并不需要任何符号。这一步只是把前面的乘积符号拆开了然后加了个括号而已

我觉得这里讲的就是图9.4.1。我是这样理解:我想要将原来相当复杂的计算方式变成一个递推的顺序计算,那么先定下h_1,那么就是对所有h_1相关的事情相乘然后求和,然后乘以h_1之后的东西,至于为什么可以这么算,应该是因为隐马尔可夫模型(假设约束),也就是图9.4.1。

此处原本的累加符号是【对h1到hT的每一个元素都有k种不同的取值下】,分别计算后面的累乘部分,并对累乘的结果(共k^T个)进行累加。
你标注的红框中,是【先固定了h2到hT的每一个元素的k种不同的取值】,得到k^(T-1)个不同的子状态,然后在不同子状态下,分别单独考虑h1的k个不同取值,并对累乘的结果进行累加。

例子,T=3,k=4,有 AAA AAB AAC AAD ABA ABB ABC ABD ACA… 共4^3=64种情况下的累乘结果需要累加。
现在先对前两个坑位分类为:AA AB AC AD BA BB BC…共4^2=16种情况,然后考虑最后一位的A B C D 4个选项。

数形结合,假设4x4x4魔方的每个小块(共64块)分别是一个累乘运算,原始写法是直接做63次加法,变换后,相当于将魔方切丝成16条,先在丝内各做3次加法(共3*16=48),再把16条丝加起来做15次加法,合计(48+15=63)。
实际只是改变了计算的顺序,因为63次加法中存在大量交叉重复的运算,但在原始写法的顺序中,重复的部分是分散不连贯的,重新调整顺序之后,便于重复利用运算结果,实现动态规划。

3 Likes

9.4.6式是如何结合前向和后向递归推导出来的?

为什么bidirectional在对前向预测中会有糟糕的表现,但是困惑度却很低?

应该是FP时disable ‘backward recursion’了。
但觉得梯度链并没有增加,因为双向 是可以并行计算的。慢的原因到底是啥

这里需要考虑h1的所有情况,需要把h1所有情况累加起来,公式没错

  1. 本质上是以离散状态来考虑的,所以只是将连乘符号展开而已
  2. 如果变换后也是计算63次,优化在哪?应该是应用了‘不对齐运算即去重’,类似于recursion to loop
  3. yt

给定所有 x1,x2…xi-1 的情况下 hi的概率是 πi(hi)

给定hi的情况下
所有xi+1,xi+2,…xt同时满足的概率是ρi(hi)
所有xi,xi+1,…xt同时满足的概率是P(xi | hi)ρi(hi)

πi(hi) 乘以 P(xi | hi) 乘以 ρi(hi) 等于P(x1,…,xt, hi)
再对所有hi求和
等于P(x1,…,xt)