使用感知器学习布尔AND函数

时间:2015-11-27 20:43:18

标签: java machine-learning perceptron

我是机器学习的新手。我已编写此代码http://ideone.com/t9VOag来训练感知器,以使用感知器训练规则学习布尔AND函数。

感知器永远不会学习正确的重量。输入(1,-1)和(-1,1)的误差使权重在0.7999999999999999,0.20000000000000004和0.7,0.300000000000000之间振荡,这显然是

For input 1, -1


target output - output given = 0-1 = -1

w1 = w1 + n*(t-o)*1 = w1 - n

w2 = w2 + n*(t-o)*(-1) = w2 + n


for input -1, 1

t-o = 0-1 = -1

w1 = w1 + (n)(t-o)(-1) = w1 + n

w2 = w2 + (n)(t-o)(1) = w2 - n

The weights are getting increased and decreased by the same amount

如果我在学习过程中包含权重w0进行更新,它就会达到解决方案(但是w0不应该更新?)。

正确的实施是什么?

2 个答案:

答案 0 :(得分:0)

将w0完全取出代码。您的感知器应具有2个输入节点和1个输出节点,其中一个权重将每个输入节点连接到输出节点。像这样(原谅糟糕的ascii艺术):

I1
   \
    \W1
     \ 
      Out
     /
    /W2
   /
I2

通过将W0设置为1

,您实际上是在强烈偏向

答案 1 :(得分:0)

与你的陈述" 相反,但是w0不应该被更新",w0应该被更新,但是输入到w0总是你的不可改变的偏见(例如1)。

直觉:看看你的问题;你有两个输入可以是1或-1,他们可以改变他们的位置而不影响结果。这是"和"的性质。运营商。因此,w1应等于w2,偏置权重(w0)应为零。

简单地说,您的代码是正确的,您应该取消注释更新w0。

相关问题