Розширення на пояснення @zfy ... Рівняння для одного вводу, одного нейрона, одного виходу має виглядати:
y = a * x + b * 1 and out = f(y)
де x - значення від вузла введення, а 1 - значення вузла зміщення; y може бути безпосередньо вашим результатом або бути переданим у функцію, часто сигмоподібну функцію. Також зауважте, що зміщення може бути будь-яким постійним, але щоб зробити все простішим, ми завжди обираємо 1 (і, мабуть, це так часто, що @zfy це робив, не показуючи та пояснюючи це).
Ваша мережа намагається вивчити коефіцієнти a і b для адаптації до ваших даних. Тож ви можете зрозуміти, чому додавання елемента b * 1
дозволяє йому краще підходити до більшої кількості даних: тепер ви можете змінити і нахил, і перехоплення.
Якщо у вас є більше одного введення, ваше рівняння буде виглядати так:
y = a0 * x0 + a1 * x1 + ... + aN * 1
Зауважте, що рівняння все ще описує один нейрон, одну вихідну мережу; якщо у вас більше нейронів, ви просто додаєте один вимір до матриці коефіцієнтів, щоб мультиплексувати входи до всіх вузлів і підсумовувати кожен внесок кожного вузла.
Що ви можете писати у векторному форматі як
A = [a0, a1, .., aN] , X = [x0, x1, ..., 1]
Y = A . XT
тобто вводячи коефіцієнти в один масив і (входи + зміщення) в інший, у вас є бажане рішення як крапковий добуток двох векторів (вам потрібно перенести X, щоб форма була правильною, я написав XT «X transposed»)
Отже, врешті-решт, ви також можете побачити свою зміщення, оскільки це лише ще один вхід, який представляє частину результату, яка насправді не залежить від вашого вкладу.