Я использую библиотеку нейронной сети, написанную на C ++ (называемую FANN), чтобы попытаться выучить и предсказать математические последовательности. Это реализовано с помощью Node.js с использованием оболочки для библиотеки. В этом конкретном случае я пытаюсь заставить нейронную сеть изучать последовательность Фибоначчи, задавая позицию в качестве входных данных и числовое значение в качестве выходных. Мой код для сети выглядит следующим образом:
// This neural network calculates the fibonacci sequence
var net = new fanntom.standard(1,3,1);
var data = [
[[0], [0]],
[[1], [1]],
[[2], [1]],
[[3], [2]],
[[4], [3]],
[[5], [5]],
[[6], [8]],
[[7], [13]],
[[8], [21]],
[[9], [34]]
]
net.activation_function_hidden('FANN_LINEAR');
net.activation_function_output('FANN_LINEAR');
net.train(data, { error: 0.00001 })
;[0,1,2,3,4,5,6,7,8,9].forEach(function(a) {
var c = net.run([a]);
console.log("fibonacci sequence position " + a + " -> " + c)
})
Вот пример вывода, который я получаю:
Max epochs 100000. Desired error: 0.0000100000.
Epochs 1. Current error: 187.3569030762. Bit fail 9.
Epochs 1000. Current error: 34.0731391907. Bit fail 8.
Epochs 2000. Current error: 34.0791511536. Bit fail 8.
Epochs 3000. Current error: 34.0858230591. Bit fail 8.
Epochs 4000. Current error: 34.0767517090. Bit fail 8.
Epochs 5000. Current error: 34.0764961243. Bit fail 8.
Epochs 6000. Current error: 34.0817642212. Bit fail 8.
Epochs 7000. Current error: 34.0817031860. Bit fail 8.
Epochs 8000. Current error: 34.0721969604. Bit fail 8.
Epochs 9000. Current error: 34.0795860291. Bit fail 8.
Epochs 10000. Current error: 34.0741653442. Bit fail 8.
Epochs 11000. Current error: 34.0833320618. Bit fail 8.
Epochs 12000. Current error: 34.0826034546. Bit fail 8.
Epochs 13000. Current error: 34.0909080505. Bit fail 8.
Epochs 14000. Current error: 34.0811843872. Bit fail 8.
Epochs 15000. Current error: 34.0729255676. Bit fail 8.
Epochs 16000. Current error: 34.0812034607. Bit fail 8.
Epochs 17000. Current error: 34.0855636597. Bit fail 8.
Epochs 18000. Current error: 34.0725784302. Bit fail 8.
Epochs 19000. Current error: 34.0898971558. Bit fail 8.
Epochs 20000. Current error: 34.0742073059. Bit fail 8.
Epochs 21000. Current error: 34.0820236206. Bit fail 8.
Epochs 22000. Current error: 34.0867233276. Bit fail 8.
Epochs 23000. Current error: 34.0676040649. Bit fail 8.
Epochs 24000. Current error: 34.0834121704. Bit fail 8.
Epochs 25000. Current error: 34.0862617493. Bit fail 8.
Epochs 26000. Current error: 34.0691108704. Bit fail 8.
Epochs 27000. Current error: 34.0897636414. Bit fail 8.
Epochs 28000. Current error: 34.0828247070. Bit fail 8.
Epochs 29000. Current error: 34.0744514465. Bit fail 8.
Epochs 30000. Current error: 34.0876007080. Bit fail 8.
Epochs 31000. Current error: 34.0852851868. Bit fail 8.
Epochs 32000. Current error: 34.0892257690. Bit fail 8.
Epochs 33000. Current error: 34.0835494995. Bit fail 8.
Epochs 34000. Current error: 34.0838394165. Bit fail 8.
Epochs 35000. Current error: 34.0851097107. Bit fail 8.
Epochs 36000. Current error: 34.0754585266. Bit fail 8.
Epochs 37000. Current error: 34.0893363953. Bit fail 8.
Epochs 38000. Current error: 34.0729141235. Bit fail 8.
Epochs 39000. Current error: 34.0780258179. Bit fail 8.
Epochs 40000. Current error: 34.0776443481. Bit fail 8.
Epochs 41000. Current error: 34.0812759399. Bit fail 8.
Epochs 42000. Current error: 34.0707893372. Bit fail 8.
Epochs 43000. Current error: 34.0810317993. Bit fail 8.
Epochs 44000. Current error: 34.0846099854. Bit fail 8.
Epochs 45000. Current error: 34.0794601440. Bit fail 8.
Epochs 46000. Current error: 34.0818710327. Bit fail 8.
Epochs 47000. Current error: 34.0692596436. Bit fail 8.
Epochs 48000. Current error: 34.0687141418. Bit fail 8.
Epochs 49000. Current error: 34.0702171326. Bit fail 8.
Epochs 50000. Current error: 34.0730400085. Bit fail 8.
Epochs 51000. Current error: 34.0896568298. Bit fail 8.
Epochs 52000. Current error: 34.0715599060. Bit fail 8.
Epochs 53000. Current error: 34.0734481812. Bit fail 8.
Epochs 54000. Current error: 34.0772285461. Bit fail 8.
Epochs 55000. Current error: 34.0646171570. Bit fail 8.
Epochs 56000. Current error: 34.0669212341. Bit fail 8.
Epochs 57000. Current error: 34.0733718872. Bit fail 8.
Epochs 58000. Current error: 34.0881729126. Bit fail 8.
Epochs 59000. Current error: 34.0861282349. Bit fail 8.
Epochs 60000. Current error: 34.0846023560. Bit fail 8.
Epochs 61000. Current error: 34.0738449097. Bit fail 8.
Epochs 62000. Current error: 34.0877456665. Bit fail 8.
Epochs 63000. Current error: 34.0803222656. Bit fail 8.
Epochs 64000. Current error: 34.0794219971. Bit fail 8.
Epochs 65000. Current error: 34.0926132202. Bit fail 8.
Epochs 66000. Current error: 34.0831146240. Bit fail 8.
Epochs 67000. Current error: 34.0780830383. Bit fail 8.
Epochs 68000. Current error: 34.0757255554. Bit fail 8.
Epochs 69000. Current error: 34.0820083618. Bit fail 8.
Epochs 70000. Current error: 34.0746269226. Bit fail 8.
Epochs 71000. Current error: 34.0959663391. Bit fail 8.
Epochs 72000. Current error: 34.0699691772. Bit fail 8.
Epochs 73000. Current error: 34.0816230774. Bit fail 8.
Epochs 74000. Current error: 34.0853195190. Bit fail 8.
Epochs 75000. Current error: 34.0910835266. Bit fail 8.
Epochs 76000. Current error: 34.0766525269. Bit fail 8.
Epochs 77000. Current error: 34.0885848999. Bit fail 8.
Epochs 78000. Current error: 34.0684432983. Bit fail 8.
Epochs 79000. Current error: 34.0836944580. Bit fail 8.
Epochs 80000. Current error: 34.0931396484. Bit fail 8.
Epochs 81000. Current error: 34.0903816223. Bit fail 8.
Epochs 82000. Current error: 34.0796318054. Bit fail 8.
Epochs 83000. Current error: 34.0709342957. Bit fail 8.
Epochs 84000. Current error: 34.0812988281. Bit fail 8.
Epochs 85000. Current error: 34.0859451294. Bit fail 8.
Epochs 86000. Current error: 34.0641326904. Bit fail 8.
Epochs 87000. Current error: 34.0925521851. Bit fail 8.
Epochs 88000. Current error: 34.0828132629. Bit fail 8.
Epochs 89000. Current error: 34.0705337524. Bit fail 8.
Epochs 90000. Current error: 34.0698318481. Bit fail 8.
Epochs 91000. Current error: 34.0850410461. Bit fail 8.
Epochs 92000. Current error: 34.0921783447. Bit fail 8.
Epochs 93000. Current error: 34.0679855347. Bit fail 8.
Epochs 94000. Current error: 34.0932426453. Bit fail 8.
Epochs 95000. Current error: 34.0735969543. Bit fail 8.
Epochs 96000. Current error: 34.0687332153. Bit fail 8.
Epochs 97000. Current error: 34.0628662109. Bit fail 8.
Epochs 98000. Current error: 34.0813598633. Bit fail 8.
Epochs 99000. Current error: 34.0901985168. Bit fail 8.
Epochs 100000. Current error: 34.0652198792. Bit fail 8.
fibonacci sequence position 0 -> -3.7995970795170027
fibonacci sequence position 1 -> -1.3996559488192886
fibonacci sequence position 2 -> 1.0002851818784273
fibonacci sequence position 3 -> 3.4002263125761414
fibonacci sequence position 4 -> 5.800167443273858
fibonacci sequence position 5 -> 8.200108573971574
fibonacci sequence position 6 -> 10.60004970466929
fibonacci sequence position 7 -> 12.999990835367003
fibonacci sequence position 8 -> 15.39993196606472
fibonacci sequence position 9 -> 17.799873096762436
Мой вопрос: как нейронная сеть может давать отрицательные результаты, если все входы положительны? Кроме того, почему ошибка настолько велика, особенно для первой эпохи?
Выход может быть отрицательным, потому что это комбинация входов, весов и передаточных функций. Веса случайным образом инициализируются со средним 0, поэтому около половины из них являются отрицательными. И поскольку они инициализируются случайным образом, вы ожидаете огромную ошибку перед первой тренировкой. Это буквально предположение.
Кстати, ваша ошибка стабилизируется после 1000 итераций. Учитывая размер проблемной области, она, вероятно, стабилизировалась после 50 итераций. Вы, вероятно, потратили в 2000 раз больше времени, чем необходимо.
Других решений пока нет …