我试图用Java编写Java中的神经网络
2输入神经元,1个包含3个神经元和1个输出神经元的隐藏层,
哪个应该能够解决XOR功能。我理解神经元(Perceptron)是如何工作的,以及他们如何学习,但我不明白神经网络如何处理输出,或者神经元如何通信?#34;彼此。
例如:
我有这个神经网络:(忽略值)
这个数据集:
input = {{1,0},{1,1},{0,1},{0,0}}
ideal = {1,0,1,0}
我用哪些值训练特定的神经元?或者让神经网络学习?
答案 0 :(得分: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制作了一个关于神经网络以及它们如何工作的非常好的视频系列。你一定要看整个系列,它会解释一切,包括渐变下降: