神经网络:输入层由什么组成?

Neural Networks: What does the input layer consist of?

最终编辑:清理了问题并接受了 runDOSrun 的回答。 IVlad 的同样好,user3760780 的也非常有帮助。我建议阅读所有这三篇文章以及评论。 TLDR 的答案是可能性 #1 或多或少是正确的,但我的措辞非常糟糕。

神经网络中的输入层由什么组成?该层有什么作用?

这里有一个类似的问题,但那里的答案并没有消除我的困惑。

就像上面问题中的发帖人一样,我对互联网上关于基本前馈网络输入层的许多自相矛盾的说法感到困惑。

我将跳过指向相互矛盾的教程和文章的链接,并列出我能看到的三种可能性。哪一个(如果有的话)是正确的?

  1. 输入层将数据直接传递到第一个隐藏层,在那里数据乘以第一个隐藏层的权重。
  2. 输入层在传递数据之前先通过激活函数传递数据。然后将数据乘以第一个隐藏层的权重。
  3. 输入层有自己的权重,可以乘以输入的数据。输入层然后在传递数据之前通过激活函数传递数据。然后将数据乘以第一个隐藏层的权重。

谢谢!

编辑 1:这是一张图片和一个示例,以进一步说明。

基本上这3个选项说的是同一件事。

我会尝试在另一篇作品中解释:

The first layer just tells you how your data looks like or what is relevant for the neural network.

例如:

您已经收集了一年中您所在城市每天的降雨量毫米数。

数据将如下所示:

PS:0代表没有下雨

mm 0 0 0 0.1 0.2 0 . . .

现在到了明年。而您想预测接下来几天的毫米数。

您将为此使用神经网络。

您的输入层 将是只有一个属性的数据:毫米。 (只有一个节点)

回到您的选择,它们可能在细节上有所不同,例如:

3 The input layer has its own weights that multiply the incoming data.

这似乎令人困惑,因为其他选项没有说明这个自身的权重。

但是您必须记住,神经网络有很多实现和方法。但是你必须始终关注基本概念:

  1. 输入层,获取输入数据并传递给隐藏层
  2. 输出将为您带来处理后的数据,可能是作为示例的预测或分类。
  3. 在此期间发生的一切都取决于您要使用的方法或技术

PS(2):神经网络 (NN) 的实现很少涉及特定类型的数据库或问题。不要试图一概而论。

标准方法是首先对输入数据应用线性变换,即 "apply the weights"(也可能是卷积)。通过这样做,您将获得一个新的值矩阵。然后对其应用激活函数(非线性)。你的第一种可能性似乎与此相符。 (你的第三个显然也是,因为输入层似乎是线性变换和非线性的组合,这与为此设置一个单独的层相同。)

将非线性直接应用于输入可能不是一个好主意,因为网络没有机会将输入投射到更好的 space。例如。如果您选择 ReLU 激活函数 (max(0, value)) 作为您的第一个转换,那么任何低于 0 的输入值都将丢失,如果您在此之前进行线性转换,情况就不会如此。

连续应用两个线性变换(输入 -> 应用权重 -> 应用权重)也不是一个好主意,因为它们可以合并为一个线性变换(并且网络应该能够学习) ,即连续两个线性变换是浪费计算。

在您的 3 个描述中,第一个最合适:

  1. The input layer passes the data directly to the first hidden layer where the data is multiplied by the first hidden layer's weights.

标准多层感知器的输入层由单元组成(您可以称它们为输入神经元,但我更喜欢使用术语单元,因为您希望神经元进行一些计算,而输入层并非如此),你给它赋值(输入数据实例的一部分,或者机器学习术语中单个实例的特征值),它们只是将该值提供给第一个隐藏层中的每个神经元,导致正是您在图像中描绘的第一个案例。

为了更准确,我会改写为:

  • 输入层的每个单元按从上到下的顺序,将其分配的值传递给第一个隐藏层的每个神经元。然后,每个隐藏层神经元将这些值中的每一个 (x1, x2, ..., xm) 与其权重向量 (w1, w2, ..., wm) 相乘,对相乘后的值 (x1*w1 + x2*w2 + ... + xm*wm) 求和,将其激活函数应用于该和 ( logistic, tanh, identity function) 和 returns 激活函数计算到下一层的值。

因此对于您的示例,隐藏层中最顶层的神经元将接收输入:

.5, .6

来自输入层,它会计算 return:

g(.4 * .5 + .3 * .6)

其中g是它的激活函数,可以是任意值:

g(x) = x # identity function, like in your picture
g(x) = 1 / (1 + exp(-x)) # logistic sigmoid

在我看来,说权重也算进去并不完全正确,因为它的权重是它自己的,但我想这个区别不是很重要;它当然不会影响结果。

你要记住,这都是概念上的。在正确的实现中,您根本不会有任何实际层,只有一些矩阵乘法。但他们将实施相同的概念。当试图理解某事时,您应该从参考基本概念开始。

  1. The input layer passes the data through the activation function before passing it on. The data is then multiplied by the first hidden layer's weights.

这是不正确的,输入层仅return将一些值分配给下一层中的每个神经元。

你找到它的地方有什么参考吗?我很确定这样做不是标准做法。

  1. The input layer has its own weights that multiply the incoming data. The input layer then passes the data through the activation function before passing it on. The data is then multiplied by the first hidden layer's weights.

同样,并非如此。它没有权重,也没有激活函数。

既然我在你链接的主题中给出了答案,我也会尽力消除你的困惑。

我注意到的第一件事是您似乎对权重属于哪一层感到困惑。答案不是一个,而是两个。图像中的权重是 从输入到隐藏层的权重 并且应该这样引用以避免多层内的歧义。同样,不同的约定。但坚持这个,因为它最好地反映了官方的数学符号(权重被引用为 w_ij 表示权重从 i 到 j(有时 j 到 i 取决于作者))。

首先让我说自然语言和图表 总是 模棱两可,处理事物的最佳方法是 数学 。它简单明了......虽然我们大多数人可能与它关系不好 :)

话虽这么说,但还是让我们从图像开始吧(这是一个单层感知器,只是假装下一层实际上是一个隐藏层,这没有区别):

这张图片对于初学者来说更清晰,因为它将激活单个神经元的过程分解为所有组件:

  • 将输入和权重(在 inp 和 hid 层之间)组合并求和。这是线性组合 和 net_j 作为下一个隐藏层中神经元 j 的输入。

  • 这个净输入被送入激活函数 f,使得隐藏层中每个隐藏神经元的激活为 (此处描述为 o_j,我'我们将把它称为 h_j,因为我们假装它在隐藏层中。

所以获取每个隐藏神经元的值的整个过程h_j可以用一个简单的公式来总结:

  • 每个输入都乘以其与该神经元的连接 h_j。
  • 所有这些权重输入产品都被求和。
  • 这被输入激活函数 f。
  • 结果就是神经元的值h_j.

这是对所有神经元完成的h_j,然后对下一层重复。

所以实际上 none 您的选项是 100% 正确或完整的。 1.) 措辞正确但不完整。

编辑:图片中正确的可能性是#1:

(权重只有2个指标,单位有1个指标。w_ij是单位x_i到h_j的权重)