神经网络如何处理不同的输入大小?

人工智能 神经网络 机器学习 深度学习 卷积神经网络 自然语言处理
2021-11-02 19:15:38

据我所知,神经网络在输入层有固定数量的神经元。

如果在 NLP 等上下文中使用神经网络,则会将不同大小的句子或文本块馈送到网络中。变化的输入大小如何与网络输入层的固定大小相协调?换句话说,这样一个网络如何变得足够灵活,可以处理从一个单词到多页文本的任何地方的输入?

如果我对固定数量的输入神经元的假设是错误的,并且新的输入神经元被添加到网络中/从网络中删除以匹配输入大小,我看不出如何训练这些神经元。

我举了 NLP 的例子,但是很多问题本质上都具有不可预测的输入大小。我对处理这个问题的一般方法感兴趣。

对于图像,很明显您可以上/下采样到固定大小,但是对于文本,这似乎是一种不可能的方法,因为添加/删除文本会改变原始输入的含义。

3个回答

我想到了三种可能性。

最简单的是零填充基本上,您采用相当大的输入大小,如果您的具体输入太小,只需添加零。当然,如果您的输入范围从几个单词到全文,这非常有限并且肯定没有用。

如果您有不同大小的文本作为输入,循环神经网络(RNN) 是一种非常自然的 NN 选择。您一个接一个地输入单词作为单词向量(或嵌入),RNN 的内部状态应该对整个单词字符串的含义进行编码。这是较早的论文之一。

另一种可能性是使用递归神经网络这基本上是一种预处理形式,其中文本被递归地减少为较少数量的词向量,直到只剩下一个——你的输入,它应该对整个文本进行编码。如果您的输入由句子组成(大小可能变化很大),从语言的角度来看,这很有意义,因为句子是递归构造的。例如,“男人”的词向量,应该和“把妻子误认为帽子的男人”的词向量相似,因为名词短语的作用类似于名词等。通常,您可以使用语言信息来指导你对句子的递归。如果您想超越维基百科的文章,这可能是一个好的开始

其他人已经提到:

  • 零填充
  • 循环神经网络
  • 递归神经网络

所以我将添加另一种可能性:根据输入的大小使用不同次数的卷积。这是一本支持这种方法的优秀书籍:

考虑一组图像,其中每个图像具有不同的宽度和高度。目前尚不清楚如何使用固定大小的权重矩阵对此类输入进行建模。卷积很容易应用;内核只是根据输入的大小应用不同的次数,卷积运算的输出也会相应地缩放。

摘自第 354 页,9.7 数据类型,第 3 段。您可以进一步阅读以了解其他一些方法。

在 NLP 中,输入具有固有的顺序,因此 RNN 是自然的选择。

对于输入之间没有特定顺序的可变大小输入,可以设计以下网络:

  1. 对每组输入(即具有共享权重)使用相同子网络的重复。这个重复的子网学习输入(组)的表示。
  2. 使用与输入具有相同对称性的输入表示的操作。对于顺序不变的数据,平均来自输入网络的表示是一种可能的选择。
  3. 使用输出网络根据输入表示的组合最小化输出处的损失函数。

结构如下所示:

网络结构

类似的网络已被用于学习对象之间的关系 ( arxiv:1702.05068 )。

这里给出了一个如何学习可变大小值集的样本方差的简单示例(免责声明:我是链接文章的作者)。