【问题标题】:Neural Networks: What does the input layer consist of?神经网络:输入层由什么组成?
【发布时间】:2021-11-05 21:09:59
【问题描述】:

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

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

Neural Networks: Does the input layer consist of neurons? 这里有一个类似的问题,但那里的答案并没有消除我的困惑。

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

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

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

谢谢!

编辑 1:这是一个图像和一个示例,以进一步清晰。

【问题讨论】:

  • 你有什么问题?
  • 我只是想知道你的困惑是什么......
  • @AlvaroJoao 我对输入层的作用/它的组成部分感到困惑。问题中列出的三个选项涵盖了所有可能性(我认为),所以我没有用图表之类的复杂问题,而是决定只列出 3 个选项并询问哪个是正确的。谢谢你的帮助! (我在问题的开头添加了另外几句话来澄清)
  • 我真的希望我对你有所帮助。 @MindSeeker

标签: machine-learning neural-network


【解决方案1】:

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

  1. 输入层将数据直接传递到第一个隐藏层,在此数据乘以第一个隐藏层的权重。

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

为了更准确,我会改写成这样:

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

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

.5, .6

从输入层,它会计算并返回:

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

其中g是它的激活函数,可以是任何东西:

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

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

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

  1. 输入层在传递数据之前通过激活函数传递数据。然后将数据乘以第一个隐藏层的权重。

这是不正确的,输入层只返回一些分配给它的值给下一层的每个神经元。

您在哪里找到了参考资料?我很确定这样做不是标准做法。

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

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

【讨论】:

  • 感谢您的回答!如果我对您的理解正确,则可能性 1 很接近,但仍然不正确。我添加了一个可能性 4 来说明我认为你的意思。我似乎不太可能(我在上面解释了原因),但很可能我误解了你的答案。如果我完全错了,上面示例的说明(输入 .5 和 .6)将有助于明确说明您的意思。感谢您的时间和耐心等待!
  • @MindSeeker 不,可能是 1。你在图片中正确地描绘了它。为了更清楚,我只想改写文本,我已经发布了如何。如果您还有其他问题,请告诉我。
  • @MindSeeker 添加了更多内容。
  • 只是一个小的附录/更正:实际上,研究社区使用了许多面向对象的实现,它们将层(有时甚至是单元)作为实际对象来绑定代码更接近概念,这通常很有帮助尝试更复杂的网络模型。
  • @runDOSrun 我不知道。更复杂的模型需要非常快速的实现,因为它们需要在大型数据集上进行测试以证明它们更好。即使使用快速的 GPU 实现,人们有时也会训练数天,所以我想我更愿意从一开始就高效地完成它。我可以看到 OOP 实现中的教学价值,但没有太大的研究价值。
【解决方案2】:

由于我在您链接的主题中给出了答案,因此我也会尽力消除您的困惑。

我注意到的第一件事是,您似乎对权重属于哪一层感到困惑。答案不是一个,而是两个。图片中的权重是从输入到隐藏层的权重,应该这样引用,以避免在多个层中产生歧义。再次,不同的约定。但坚持这个,因为它最好地反映了官方的数学符号(权重被称为 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 完成的,然后在下一层重复。

所以实际上你的选择都不是 100% 正确或完整的。 1.) 措辞正确但不完整。

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

(权重只有2个索引,单位有1个索引。w_ij是从单元x_i到h_j的权重)

【讨论】:

  • 感谢详细而完整的回答!因此,如果我理解正确,就我上面的示例而言,正确答案与可能性 #1 相同,其中 (.4*.5 + .3*.6) 进入顶部第一隐藏层神经元的激活函数,对吗?换句话说,可能性 #1 在我提供的图像中得到了正确的结果,但在其定义中使用了错误的术语/措辞?
  • 是的,你明白了。 h_1 = f(x_1 * w_11 + x_2 * w_21) = f(.4*.5 + .3*.6)
【解决方案3】:

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

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

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

【讨论】:

  • 感谢您的帮助!我想我完全理解你,但我想确定一下。你是说“可能性 1 是正确的答案,注意这些其他选择,但可能性 1 是 100% 正确的”还是说“可能性 1 几乎是正确的,但你需要以不同的方式做 X”?如果我完全误解了您,那么根据上述示例(输入 .5 和 .6)的解决方案将有助于消除歧义。再次感谢您的帮助和时间!
  • 可能性 1 将是实现神经网络的标准方式。我帖子中的其他所有内容都只是为了描述为什么它是标准选择。
【解决方案4】:

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

我会尝试在其他作品中解释:

第一层只是告诉您数据的外观或与神经网络相关的内容。

例如:

一年来,您每天都在收集您所在城市的几毫米雨量。

数据将如下所示:

PS: 0 代表不下雨。

mm 0 0 0 0.1 0.2 0 . . .

现在是明年。并且您想预测未来几天的毫米数。

您将为此使用神经网络。

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

回到您的选项,它们可能会在一些小细节上有所不同,例如:

3 输入层有自己的权重,可以乘以传入的数据。

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

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

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

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

【讨论】:

  • @MindSeeker 告诉我是否对你有帮助
  • 感谢您的回答!我发布了一个例子来澄清。它表明这 3 个选项做了非常不同的事情。另外,我知道有许多不同的“正确”实现,但我才刚刚开始,并试图在开始自己的实现之前先了解基础知识。我试图遵循的教程(在这一点上都非常模糊)是 ai-junkie.com/ann/evolved/nnt6.html 和 takinginitiative.wordpress.com/2008/04/03/…。再次感谢您的帮助,期待您的更新答复!
  • 其实神经网络的种类并不多,尤其是OP所说的那种:多层感知机。在此类 ANN 中处理输入层的方式当然没有区别。文献对定义和术语非常清楚。输入层不映射任何东西。
  • @IVlad 关于定义真的很模糊。例如,您可以拟合循环 MLP 以满足定义。
猜你喜欢
  • 2015-04-02
  • 2014-04-11
  • 2018-10-20
  • 1970-01-01
  • 2012-10-05
  • 2019-08-02
  • 2017-12-05
  • 2010-10-13
相关资源
最近更新 更多