神经网络会自动计算输入之间的不同关系吗?

人工智能 神经网络
2021-11-09 11:01:16

假设你想预测一些股票的价格。假设您使用以下功能。

OpenPrice  
HighPrice
LowPrice
ClosePrice

创建以下新功能是否有用?

BodySize = ClosePrice - OpenPrice  

或尾巴的大小

TailUp = HighPrice - Max(OpenPrice, ClosePrice)  

或者我们不需要这样做,因为我们正在添加噪声并且神经网络将在内部计算这些值?

身体大小的情况可能与尾巴有点不同,因为对于尾巴我们需要使用非线性函数(最大操作)。那么,当其他输入之间不是线性关系而不是线性关系时,添加输入可能很重要吗?

另一个例子。考虑一个盒子,有高度X, 宽度Y和长度Z.
并且假设真正重要的输入是体积,神经网络会发现相关性是XYZ? 或者我们也需要将音量作为输入?

对不起,如果这是一个愚蠢的问题,但我试图了解神经网络内部在做什么输入,如果它(以某种方式)找到所有输入之间的所有数学上可能的关系,或者我们需要指定输入之间的关系我们认为解决问题的重要性(启发式地)?

2个回答

在纸面上,给定足够大的数据集,人们期望一个足够复杂的网络来确定有限数量输入的任何复杂函数。但在实践中,要学习的函数可能的难度没有限制,有时数据集可能相对较小。在这种情况下 - 或者可以说是一般情况下 - 根据您建议的一些启发式方法定义输入的某种组合绝对是一个好主意。如果您认为某些输入组合本身就是一个重要变量,那么您绝对应该将其包含在您的输入中。

我们可以在TensorFlow Playground中可视化这种情况。考虑左上角带有一些噪声的圆形图案数据集。您可以使用默认设置:x1x2作为具有 2 个隐藏层的输入,分别具有 4 个和 2 个神经元。它应该在不到 100 个 epoch 内学习该模式。但是如果你将第二层的神经元数量减少到 2 个,它就不会像以前那样好。因此,您正在使模型更复杂以获得正确答案。

您可以进行实验,发现至少需要一个 3 个神经元层才能从仅x1x2. 现在,如果我们检查数据集,我们会看到圆圈,所以我们知道,而不是x1x2, 我们能试试x12x22. 这将在没有任何隐藏层的情况下完美学习,因为函数在这些参数中是线性的。这里要吸取的教训是,我们对圆的先验知识(x12+x22=r2) 并且对数据的熟悉帮助我们通过使用派生输入,通过更简单的模型(更少数量的神经元)获得了良好的结果。

以右下角的螺旋数据来解决更具挑战性的问题。对于这一点,如果您不使用任何派生特征,即使有多个隐藏层,也不太可能给您正确的结果。请记住,除了计算负担之外,每个额外的神经元都是过度拟合的潜在来源。

当然,这里的问题被过度简化了,但我希望任何复杂问题的情况都或多或少相同。在实践中,我们没有无限的数据集或无限的计算时间,而且模型的复杂性始终是一个限制,所以如果您有任何理由认为您的输入之间的某些关系与您的最终结果相关,您绝对应该手动将其包含在开始。

该问题与“特征提取”有关。首先,要解决像您所说的两个问题这样的回归问题,您需要为神经网络提供对输出有影响的最相关的输入。例如。如果您希望网络添加 x 和 y,则需要为其提供训练示例,例如 input(x=1, y=3) 和 output (sum=4)这将使您的网络完全按照您的意愿行事。

但是假设你不知道你是否应该用什么输入来训练你的网络,神经网络也可以解决这个问题。看这个例子:看第一个真值表。请注意,输出列实际上是第一个输入列,而其他两个输入列只是随机的。最终,网络学习到这种关系并提供正确的结果。我们学到了什么:如果您不确定应该为网络选择哪些输入,只需提供尽可能多的输入或尽可能多的组合。神经网络擅长查找输入数据中的关系。

接下来说音量问题,这是我最近一直在做的。它实际上是函数逼近的一个例子。通常,这个问题有多个输入和一个输出(就像加法问题一样),但反过来也是可能的。即,输入:总和和输出:x & y。这属于一对多函数映射多元回归。所以是的,您需要在训练时提供音量作为输入,并提供x、y 和 z作为输出。推荐的配置是输入层1个神经元,输出层至少6个隐藏神经元和3个神经元对于神奇的结果,您可以使用更深层次的神经网络,而不是我建议的浅层神经网络。但请记住,神经网络已被证明是**通用逼近器*