首先,让我为在该标题中塞入三个问题而道歉。我不确定有什么更好的方法。
我会马上解决的。我想我非常了解前馈神经网络。
但是 LSTM 真的让我无法理解,我觉得这可能是因为我对循环神经网络没有很好的掌握。我在 Coursera 上完成了 Hinton 和 Andrew Ng 的课程。很多对我来说仍然没有意义。
据我了解,循环神经网络与前馈神经网络的不同之处在于,过去的值会影响下一个预测。循环神经网络通常用于序列。
我看到的循环神经网络的例子是二进制加法。
010
+ 011
循环神经网络首先取最右边的 0 和 1,输出 1。然后取 1,1,输出 0,并携带 1。取下一个 0,0 并输出 1,因为它携带 1从上次计算。它在哪里存储这个1?在前馈网络中,结果基本上是:
y = a(w*x + b)
where w = weights of connections to previous layer
and x = activation values of previous layer or inputs
递归神经网络是如何计算的?我可能错了,但据我了解,循环神经网络几乎是具有 T 个隐藏层的前馈神经网络,T 是时间步数。每个隐藏层在时间步 T 获取 X 输入,然后将其输出添加到下一个相应隐藏层的输入。
a(l) = a(w*x + b + pa)
where l = current timestep
and x = value at current timestep
and w = weights of connections to input layer
and pa = past activation values of hidden layer
such that neuron i in layer l uses the output value of neuron i in layer l-1
y = o(w*a(l-1) + b)
where w = weights of connections to last hidden layer
但是,即使我理解正确,我也看不出这样做比简单地使用过去的值作为正常前馈网络(滑动窗口或其他任何名称)的输入的优势。
例如,使用循环神经网络进行二进制加法而不是训练具有两个输出神经元的前馈网络有什么优势。一个用于二进制结果,另一个用于进位?然后获取进位输出并将其插入前馈网络。
但是,我不确定这与简单地将过去的值作为前馈模型中的输入有何不同。
在我看来,时间步长越多,由于梯度消失,递归神经网络只是前馈网络的劣势。这就引出了我的第二个问题,据我了解,LSTM 是解决梯度消失问题的一种方法。但我并没有真正了解它们是如何工作的。此外,它们只是比循环神经网络更好,还是使用 LSTM 有牺牲?