神经网络偏差简单的工作原理

Neural Network bias simple workings

我已经在 Matlab 中创建了一个神经网络,现在我打算获取权重并在 C++ 中实现该网络。网络可以工作,但现在我正在尝试用 C++ 实现它,我觉得我并不真正理解它。

举一个非常简单的例子:一个输入->隐藏层中的三个节点(tansig)->一个输出节点(purelin)。

第一层的输入权重为:9.3842, 7.1205 , -14.6497

偏差为:-7.8820, -3.4257, -14.2522,

输出节点的权重为:0.5760,-0.9019,-0.4809,

偏差为:-0.1413

我一直在尝试输入 :0 和 0.498,目标为 5.0145 和 5.3314

问题是我无法通过手动执行计算来获得(或接近)这些目标。为了让您了解我在做什么,请将 0 作为输入;

0*w1 + b = -7.8820,

0*w2 + b2 = -3.4257 ,

0*w3 + b3 = -14.2522 ,

应用激活函数 tansig :

output1 = tansig(-7.8820) = -1

output2 = tansig(-3.4257) = -.997

output3 = tansig(-14.2522) = -1

对于最后一个节点,

output1*weight1 = -.5760

output2*weight2 = .900

output3*weight3 = .4809

总和 + b = .9462

这就是我的想法,但显然不是。我想也许我不明白 tansig 激活函数发生了什么。

感谢阅读和任何帮助,

你的tansig()激活函数的范围是-1到1,所以它可能是一个tanh()。它看起来像 sigmoid()*2-1arctan()*2/PI,但曲线略有不同。您可能想看看 tanh() 是什么样子的:http://www.wolframalpha.com/input/?i=y%3Dtanh%28x%29

你的伪代码看起来不错,但我没有尝试把数字放回去。也许你唯一忘记写的是:

sum = output1*weight1 + output2*weight2 + output3*weight3
final_output = sum + b

不要忘记在这样的神经网络中权重是随机初始化的,并且需要使用反向传播算法(通过大循环中每个权重的多次梯度下降)或其他类似的学习技术来学习它们。

所以,愚蠢的我,问题是我忘记了缩放。 NN(在 Matlab 中)自动缩放 [0,1] 之间的输入。