4.7
考虑一个两层的前瞻 ANN,它具有两个输入 a 和 b,一个隐藏单元 c,和一个输出单元 d。这个网络有五个权值(wca,wcb,wc0,wdc,wd0),其中 wx0 表示单元 x 的阈值权。先把这些权的值初始化为(0.1,0.1,0.1,0.1,0.1),然后给出使用反向传播算法训练这个网络的前两次迭代中每一次这些权值的值。假定学习速率 ,冲量,采用增量的权值更新和以下训练样例:
a b d 1 0 1 0 1 0
迭代 | 权值 |
---|---|
0 | (0.1, 0.1, 0.1, 0.1, 0.1) |
1 | (0.10085128181864877, 0.1, 0.1, 0.1189103977991797, 0.1) |
2 | (0.10161743545543266, 0.09899357900214031, 0.1, 0.1137618037587342, 0.1) |
其中,第三个权值 0.1 和第五个权值 0.1 是阈值权,不在迭代更新范围内。其属于超参数,由人为指定,在迭代过程中保持不变。在某些其他语境中,其被称为偏置值。
在线运行这道题:https://runkit.com/jeff-tian/runkit-npm-jeff-tian-perceptron-for-nn
const nn = require("@jeff-tian/perceptron/lib/NeuralNetwork")
const flat = (prev, next)=>[...prev, ...next]
const getFlattedWeights = weights => weights.reduce(flat).reduce(flat)
const getNthWeights = index => '(' + getFlattedWeights(network.weightsHistory[index].weights).join(', ') + ')'
const network = nn.backPropFor2LevelSigmoidUnitForwardNetwork([
{
x: [1, 0],
t: 1,
},
{
x: [0, 1],
t: 0,
},
], 0.3, 0.9)
console.log("初始权值 = " + getNthWeights(0))
console.log("第一次迭代后的权值 = " + getNthWeights(1))
console.log("第二次迭代后的权值 = " + getNthWeights(2))