循环神经网络 (RNN) 拓扑:为什么总是全连接?

机器算法验证 机器学习 神经网络 反向传播
2022-03-07 04:58:26

我已经开始阅读有关循环神经网络 (RNN) 和长短期记忆 (LSTM) 的文章……(……哦,这里没有足够的代表点来列出参考……)

我不明白的一件事:隐藏层的每个实例中的神经元似乎总是与隐藏层的前一个实例中的每个神经元“完全连接”,而不是仅仅连接到它们以前的自我实例/自己(也许还有其他几个)。

全连接真的有必要吗?似乎您可以节省大量存储和执行时间,并在没有必要的情况下及时“回溯”。

这是我的问题的图表...

rnn 图像:完全连接与部分连接

我认为这相当于询问是否可以在重复隐藏层之间的“突触”的“W^hh”矩阵中只保留对角线(或近对角线)元素。我尝试使用有效的 RNN 代码(基于Andrew Trask 的二进制加法演示)运行它——即将所有非对角项设置为零——它的表现非常糟糕,但将项保持在对角线附近,即带状线性系统 3 元素范围 - 似乎与完全连接的版本一样好。即使我增加了输入和隐藏层的大小......所以......我只是幸运吗?

我找到了Lai Wan Chan 的一篇论文,他证明了对于线性激活函数,总是可以将网络简化为“Jordan 规范形式”(即对角线和附近的元素)。但似乎没有这样的证据可用于 sigmoid 和其他非线性激活。

我还注意到,对“部分连接”RNN 的引用似乎在大约 2003 年之后几乎消失了,而且我从过去几年中读到的处理方法似乎都假设是完全连接的。那么……这是为什么呢?

编辑:在这个问题发布 3 年后,NVIDIA 发布了这篇论文,arXiv:1905.12340:“Rethinking Full Connectivity in Recurrent Neural Networks”,表明稀疏连接通常与完全连接的网络一样准确且速度更快。上面的第二张图对应于 arXiv 论文中的“Diagonal RNN”。NVIDIA,我很乐意在未来的工作中进行合作...... ;-)

2个回答

一个原因可能是由于数学上的方便。普通递归神经网络(Elman-type)可以公式化为:

ht=f(xt,ht1), 在哪里f()可以写成σ(Wxt+Uht1).

上面的等式对应于您的第一张图片。当然你可以制作循环矩阵Usparse 来限制连接,但这并不影响 RNN 的核心思想。

BTW:RNN 中存在两种记忆。一是输入到隐藏权重W,它主要存储来自输入的信息。另一个是隐藏到隐藏的矩阵U,用于存储历史记录。由于我们不知道历史的哪些部分会影响我们当前的预测,因此最合理的方法可能是允许所有可能的连接并让网络自己学习。

如果您以与快速 Walsh Hadamard 变换类似的方式排列它们,则可以使用 2 个输入神经元。因此,一个不合适的算法将是一次按顺序遍历输入向量 2 个元素。让 2 个 2 输入神经元作用于每对元素。将第一个神经元的输出顺序放在新向量数组的下半部分,第二个神经元的输出顺序放在新向量数组的上半部分。重复使用新的向量数组作为输入。在 log_base_2(n) 重复单个输入元素的更改后,可能会更改所有输出。这是你能做的最好的。n 必须是 2 的正整数幂。