神经网络Java XOR学习?

神经网络Java XOR学习?,java,neural-network,xor,Java,Neural Network,Xor,我正试图用Java编写一个神经网络 2个输入神经元,1个隐藏层,包含3个神经元和1个输出神经元, 它应该能够解XOR函数。我了解神经元感知器是如何工作的,它们是如何学习的,但我不了解神经网络是如何处理输出的,或者神经元是如何相互通信的。 例如: 我有一个神经网络:忽略这些值 这个数据集: 输入={1,0},{1,1},{0,1},{0,0} 理想={1,0,1,0} 我用哪些值训练每个特定的神经元?或者让神经网络学习?训练神经网络的目的是找到正确的权重,从而正确预测给定输入的输出。训练神经网络

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

我有一个神经网络:忽略这些值

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


我用哪些值训练每个特定的神经元?或者让神经网络学习?

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

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

1*0.4+1*0.9=1.3

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

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

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

所有这两个过程就是训练神经网络的意义。我们的目标是使用训练数据找到正确的权重,这样当我们面对以前从未见过的数据时,我们就能做出正确的预测

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


神经网络的可能复制只是一个大的集合,你正在展示一个网络的输出在哪里变成另一个网络的输入,以此类推。他们本身并没有真正的学习,而是不断地积累大量可以分类的数据,并根据从积累的数据中提取的大量因素进行预测。