【问题标题】:Neural Network Java XOR learning?神经网络 Java XOR 学习?
【发布时间】:2017-05-03 01:06:07
【问题描述】:

我正在尝试用 Java 编写一个神经网络
2 个输入神经元,1 个隐藏层,包含 3 个神经元和 1 个输出神经元,
这应该能够解决XOR函数。我了解神经元(感知器)是如何工作的,以及它们是如何学习的,但我不了解神经网络如何处理输出,或者神经元如何相互“交流”。
例如:

我有这个神经网络:(忽略值)



和这个数据集:
输入 = {{1, 0},{1, 1},{0, 1},{0, 0}}
理想 = {1, 0, 1, 0}

我使用哪些值来训练每个特定的神经元?还是让神经网络学习?

【问题讨论】:

  • XOR Java Neural Network的可能重复
  • 神经网络只是您所展示的内容的大量集合,其中一个网络的输出成为另一个网络的输入,依此类推。它们本身并没有真正学习,而是不断积累大量数据,这些数据可以根据从积累的数据中提取的大量因素进行分类并做出预测。

标签: java neural-network xor


【解决方案1】:

“训练”神经网络的目标是找到正确的权重,以正确预测给定输入的输出。训练神经网络有两个基本过程。

前向传播: 在这个过程中,我们在每一层获取我们的权重和输入,计算输出,然后应用激活函数。例如,在您给出的神经网络中,隐藏层中第二个节点的计算将是:

1 * 0.4 + 1 * 0.9 = 1.3

然后我们在节点值 1.3 上应用激活函数。我猜这个神经网络使用的是 sigmoid 激活函数,它只不过是一个简单的指数函数。 https://en.wikipedia.org/wiki/Sigmoid_function

我们对隐藏层中的每个节点都执行此操作,这将成为下一层(即输出层)的输入。在输出节点值上应用激活函数后,这就是我们解释为神经网络的输出。它可能会偏离应有的状态,因为初始权重是随机的,这会给我们一个随机的答案。但这会引导我们进入下一个过程,这将帮助我们找到正确的权重:

反向传播: 这部分需要大量的数学知识,如果你不熟悉微积分,一开始可能很难理解。但是反向传播背后的一般思想是使用一种称为梯度下降的方法,通过将权重推向正确的方向来“减少”我们的权重错误。详细解释梯度下降本身就需要很长的答案。因此,我将为您提供一些很好的资源来理解它:

http://eli.thegreenplace.net/2016/understanding-gradient-descent/

所有这两个过程都是“训练”神经网络的意思。目标是使用训练数据找到正确的权重,以便我们在面对从未见过的数据时做出正确的预测。

WelchLabs 制作了一个关于神经网络及其工作原理的非常棒的视频系列。你绝对应该看整个系列,它会解释一切,包括梯度下降:

https://www.youtube.com/watch?v=bxe2T-V8XRs

【讨论】:

    猜你喜欢
    • 2019-03-15
    • 2016-11-28
    • 2014-05-09
    • 2016-07-11
    • 2018-07-24
    • 2012-03-28
    • 1970-01-01
    • 2016-05-25
    • 2011-08-17
    相关资源
    最近更新 更多