Operacje Matematyczne za pomocą sieci neuronowych?

0

Witam,
Od wczoraj zacząłem zagłębiać się w temat sieci neuronowych. Napisałem sobie sieć nieliniową z bias'em korzystając ze wzorów. Jako funkcję aktywacji użyłem funkcję logistyczną. Chciałbym nauczyć swoją sieć choćby nawet dodawania, ale czy to możliwe?

Do nauki używam przykładowych wartości:

neuralNetwork.LearnNetwork(new double[] { 5.0 }, new double[] { 2.0, 3.0 }, 0.15);
result = neuralNetwork.Calculation(signals);
Debug.Log("Result: " + result[0]);

Dostaję na wyjściu wartości od 0 do 1. Czy jest w ogóle możliwość przykładowo "dodawania" wartości wejściowych i otrzymywania odpowiednich wyników na wyjściu?

0

Oczywiście że jest to możliwe. Jednak na wejściach taka sieć przyjmuje wartości rzeczywiste od -1 do 1 a na wyjściu w zależności od funkcji aktywacji 0..1 dla sigmoidalna unipolarna albo -1 do 1 dla sigmoidalna bipolarna. Bias jest po to żeby np. jeśli masz tą funkcję sigmoidalną bipolarną, to jeśli masz na wejściach same zera a na wyjściu chcesz mieć np 1 to bez tego nie nauczysz sieci.

Jeśli sieć nie obsługuje biasu (nie ma tego w swojej implementacji), najprościej jest dodać dodatkowe wejście na które dajesz stałą wartość np. 1.0 (albo -1.0). Nie zawsze jest zresztą ten bias potrzebny. Kolejna sprawa to to ile warstw musisz mieć i czy w ogóle potrzebujesz warstw ukrytych, w większości zastosowań wystarczy tylko jedna warstwa ukryta.

1

@wojas666 jest możliwe, ale wymaga żebyś rozumiał w ogóle jak taka sieć działa. Sieć interpretuje siłę przychodzących sygnałów i na ich podstawie generuje sygnał wyjściowy. Sygnał na wyjściu zwykle jest "dyskretny" i ma 0 albo 1 (albo -1 ewentualnie) i oznacza aktywacje neuronu.
Żeby uzyskać "wynik" potrzebowałbyś tylu neuronów ile bitów może mieć wynik! Co więcej wejście sensowniej byłoby także zadać binarnie tak żeby mieć wyraźne dyskretne wejście.

1

Robiłem kiedyś też tego typu prosty kalkulator, z tym że była to tabliczka mnożenia od 0 do 100, w sposób, że na wejściach były dwie liczby, reprezentacja binarna więc po 4 bity na każdą liczbę wejściową od 0 do 9, więc 8 wejść, 7 bitów na wyjściu więc 7 wyjść. Mam źródła, była to struktura 8-16-7, funkcja sigmoidalna unipolarna.

Fajnie to wygląda w praktyce, bo można świetnie zobrazować proces uczenia, tzn. jak mała liczba rund treningowych to tym więcej błędów taka sieć popełnia, zwiększanie liczby rund treningowych aż do momentu kiedy to sieć wypluwa dane bez żadnych błedów, co obrazuje nauczenie się tabliczki mnożenia jakby na blachę :-)

Robiłem to w Lazarusie na FANN (port pod Lazarusa) i to tylko eksperymentalnie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1