0

我正在试图理解RNN,我想找一个简单的例子,它实际上显示了一个热向量和数值运算。最好是概念性的,因为实际的代码可能会使其更加混乱。我在google上搜索的大多数示例只显示了带有循环的框,很难理解到底发生了什么。在极少数情况下,它们确实显示了向量,但仍然很难看到它们是如何获得值的。

例如,我不知道这张照片中的值来自哪里https://i1.wp.com/karpathy.github.io/assets/rnn/charseq.jpeg

如果这个例子能够集成LSTM和其他流行的扩展,那也会很酷。

1答案1

重置为默认值
2

在简单的RNN情况下,网络接受输入序列x个并生成输出序列虽然是一个隐藏的序列小时存储网络的动态状态,以便在时间步i:x(i)∊M(M),h(i)∊N个,y(i)∊P(P)M/N/P维的实值向量分别对应于输入值、隐藏值和输出值。RNN更改其状态并根据状态方程省略输出:

  1. h(t)=tanh(WX小时*[x(t);h(t-1)]),其中WX小时线性地图:M+N↦ ℝN个,*矩阵乘法和;串联操作。具体来说,为了获得h(t),将x(t)与h(t-1)串联起来,可以在W之间应用矩阵乘法X小时(形状(M+N,N))和级联向量(形状M+N),并且在结果向量(形状N)的每个元素上使用tanh非线性。
  2. y(t)=乙状结肠(W*h(t)),其中W线性地图:N个↦ ℝP(P)具体来说,在W之间应用矩阵乘法(形状N,P)和h(t)(形状N),以获得P维输出向量,并在其上应用sigmoid函数。

换句话说,在时间t获得输出需要迭代上述i=0,1,。。。,t.因此,隐藏状态充当系统的有限内存,允许上下文相关的计算(即h(t)完全取决于计算历史和当前输入,y(t)也是如此)。

在选通RNN(GRU或LSTM)的情况下,由于选通机制基本上允许在输入和内存之间进行选择,但核心概念保持不变,因此状态方程变得有些难以遵循。


数字示例

让我们以你为例;我们有M=4,N=3,P=4,所以WX小时形状为(7,3)和W形状(3,4)。我们当然不知道两个W矩阵的值,因此我们无法重现相同的结果;不过,我们仍然可以遵循这个过程。

  • 在时间步t<0时,我们得到h(t)=[0,0,0]。
  • 在时间步t=0时,我们收到输入x(0)=[1,0,0,0]。将x(0)与h(0)串联-),我们得到[x(t);h(t-1)]=[1,0,0…,0](我们调用这个向量u来简化符号)。我们采用u*WX小时(即将7维向量与7乘3矩阵相乘),得到向量v=[v1,v2,v],其中v= Σj个u个j个W公司=u1W公司1个+u个2W公司第2页+ ... + u个7W公司第7页最后,我们将tanh应用于v,得到h(0)=[tanh(v1),坦桑尼亚(v2),丹宁(v)]=[0.3,-0.1,0.9]。从h(0)也可以通过同样的过程得到y(0);用W乘以h(0)(即带有3×4矩阵的三维向量),得到向量s=[s1,秒2,秒,秒4],在s上应用sigmoid,得到σ(s)=y(0)。
  • 在时间步t=1时,我们收到输入x(1)=[0,1,0,0]。我们将x(1)与h(0)串联,得到一个新的u=[0,1,0,0,0.3,-0.1,0.9]。u再次乘以WX小时,然后再次对结果应用tanh,得到h(1)=[1,0.3,1]。类似地,h(1)乘以W,给出了一个新的s向量,我们在其上应用sigmoid来获得σ(s)=y(1)。
  • 这个过程一直持续到输入序列结束,从而结束计算。

注:我忽略了上述等式中的偏差项,因为它们不影响核心概念,并且使符号无法遵循

  • 谢谢,你能把这个放在这里,或者给我看一个尽可能简单的网络视觉形式的例子吗?你能告诉我他们是怎么在我发布的链接中找到这些号码的吗?
    – A、D
    2018年5月1日21:07
  • 我不能确切地告诉你他们是如何得到这些特定的数字的,因为我不知道权重W,而且解也不是唯一的,但我可以做出类似的结果。我明天早上第一件事就是这样做。 2018年5月2日2:35
  • 添加了您上传的示例的大致概述。 2018年5月2日5:50

你的答案

单击“发布您的答案”,表示您同意我们的服务条款并确认您已阅读我们的隐私政策.

不是你想要的答案吗?浏览标记的其他问题问你自己的问题.