首页 > 解决方案 > 前馈神经网络反向传播问题

问题描述

我正在尝试构建自己的小型神经网络库。

每次我运行我的代码时,它都会构建一个具有随机权重的新网络。然后我训练了 20,000 次:

const trainingData = [
  {
    data: [0,1],
    target: [1]
  },
  {
    data: [1,0],
    target: [1]
  },
  {
    data: [1,1],
    target: [0]
  },
  {
    data: [0,0],
    target: [0]
  }
]

const nn = new FNN(2,6,12,6,1)

for(let i = 0; i < 20000; i++) {
  const index = Math.floor(Math.random() * 4)
  nn.train(trainingData[index].data, trainingData[index].target)
}

console.log(nn.query([0,1]))
console.log(nn.query([1,0]))
console.log(nn.query([0,0]))
console.log(nn.query([1,1]))

如您所见,我正在尝试使用 4/5 层解决 XOR 问题(我知道这有点矫枉过正)。但是当我运行我的代码几次时,输出有时是错误的:

$ deno run sketch.ts 
[ 0.9808040222512294 ]
[ 0.9808219014520584 ]
[ 0.009098634709446591 ]
[ 0.009259505045600065 ]

$ deno run sketch.ts 
[ 0.984698425823075 ]
[ 0.9844728486048201 ]
[ 0.010107497773167363 ]
[ 0.010367109588917735 ]

$ deno run sketch.ts 
[ 0.9856540170897103 ]
[ 0.5163204342937323 ] <-- this should be 1
[ 0.02873017555538064 ]
[ 0.516320908619891 ] <-- this should be 0

这里可能是什么问题?是因为随机权重吗?有趣的是,错误的输出总是彼此非常接近。

我正在使用 sigmoid 函数和 0.2 的学习率。随机权重在 -1 和 1 之间 (Math.random() * 2 - 1)

标签: javascripttypescriptmachine-learningneural-networkbackpropagation

解决方案


推荐阅读