künstliche neuronale Netze – grundlegende Backpropagation

 

 

Es sei ein gewöhnliches deep neural network ohne Rekursionen mit​​ N​​ Layern gegeben. Die Gewichte sind mit​​ wij​​ bezeichnet wobei j<=N​​ und i kleiner gleich der Anzahl der in dem jeweiligen Layer befindlichen Nodes ist. Speist man eine Eingabe bei relativ willkürlich initialisierten Gewichten ein, ergibt sich eine Abweichung vom gewünschten Ergebniss. Um diese​​ Abweichung​​ zu charakterisieren​​ kann man eine Fehlerfunktion benutzen z.B. die Summe der Quadratischenfehler aus den Ausgangsnodes

E :=Outputnodesxi-x~i2

Nun möchten wir die Änderungsrate des Fehlers E in abhängigkeit zu jedem Gewicht w kennen also die Ableitung​​ Ewij​​ um zu wissen in welche Richtung w korrigiert werden muss um einen geringeren Fehler zu erhalten. Nach der Kettenregel gilt also

 

als​​ φx​​ verwenden wir eine sigmoide Funktion, die monoton steigend ist, durch die Grenzwerte 0 und 1 nach oben und unten beschränkt ist und möglichst einfach stetig differenzierbar ist.​​ 

φx=11+e-ax mit aR+

Dem entsprechend gilt für die Ableitung(Substitution und Partialbruchzerlegung):

xj sum=φxx=sum=ae-ax1+e-ax2x=sum=a1+e-ax-a1+e-ax2x=sum=a1+e-ax1-a1+e-axx=sum=φx1-φxx=sum=φsum1-φsum

 sum wij=nij

Exj=xjOutputnodesxi-x~i2=2xj-x~j für Ausgabe-Nodes

Es ergibt sich eine Rekursive Definition.​​ Für Ausgabe-Nodes​​ gilt:

Ewij=2 nij φsum1-φsumxj-x~j

für Hidden-Nodes

Ewij=2 nij φsum1-φsumjϑj+1wi(j+1)

Bzw.

ϑj:= φsum1-φsumxj-x~j    wenn j ein output Node ist φsum1-φsumjϑj+1wi(j+1)  wenn j ein hidden Node ist 

Ewij=2nijϑj

Der Fehler soll iterativ minimiert werden also wird​​  wij​​ zu​​ 

 wij=-C'Ewij=-C nijϑj

Gewählt wobei​​  C :=C(t)​​ mit der Iterationszahl​​ t​​ eine von der​​ Iteration abhängige Lernrate beschreibt, die im simpelsten fall als konstant definiert wird. In einem Iterationsschritt berechnen sich die neuen Gewichte wie folgt:

 wijnew= wijold+ wij

Pro Trainingssample kann ein oder mehrmals iteriert werden. Um noch bessere Ergebnisse zu erzielen macht man​​  wij(t)​​ von der vorhergehenden Iteration wij(t-1)​​ abhängig​​ und führt z.B. einen Gewichtungsfaktor G ein, der von 0 bis 100 festlegt wie groß der Einfluss der Gewichtsänderung der vorhergehenden Iteration sein soll:

 wij(t)=-Ct1-Gnijϑj+G wij(t-1)

Dies sorgt anschaulich für eine​​ endliche Beschleunigungsrate durch quadratische Effekte und hilft nicht​​ multi-dimensionalen​​ Nebenminima​​ festzustecken.

Für weitere Optimierungen kann man je nach Anwendung für verschiedene Layer unterschiedliche Aktivierungsfunktionen verwenden die​​ ReLu Funktion​​ fx=max(0,x), die auf Grund der für Backpropagation notwendigen Differenzierbarkeit mit​​ fx=ln(1+ex)​​ approximiert ist z.B. auch oft nützlich. Neuere Ansätze benutzen​​ auch​​ eine​​ wachsende Anzahl an Nodes​​ um die Lerngeschwindigkeit bei hochkomplexen Netzen um Größenordnungen zu steigern. Netze solcher Art sind allerdings nur ein kleiner Baustein um größere künstlich „denkende“ Systeme mit rekursiven Pipelines oder gar eine hohe neuronale Programmiersprache aufzubauen. Es gilt also noch viel zu entdecken und zu experimentieren.​​ Interessant ist vor allem auch, wie man ein fertig trainiertes System schaltungstechnisch in integrierte Hardware umsetzt ohne dabei platzraubende und kostenintensive elektrische​​ Kapazitäten einsetzen zu müssen.