Algorithmus zum Training eines mehrschichtigen neuronalen Netzwerks mithilfe der Backpropagation-Methode. Back-Propagation-Algorithmus

Um ein mehrschichtiges Netzwerk zu trainieren, schlugen Rummelhart und Hinton (Rummelhart D.E., Hinton G.E., Williams R.J., 1986) einen Fehler-Rückausbreitungsalgorithmus vor. Zahlreiche Veröffentlichungen zu industriellen Anwendungen mehrschichtiger Netzwerke mit diesem Lernalgorithmus haben seine grundsätzliche Leistungsfähigkeit in der Praxis bestätigt.

Zu Beginn stellt sich die berechtigte Frage: Warum kann die bereits bekannte Rosenblatt--Regel nicht zum Trainieren eines mehrschichtigen Perzeptrons angewendet werden (siehe Vorlesung 4)? Die Antwort lautet: Um die Rosenblatt-Methode anzuwenden, ist es notwendig, nicht nur die aktuellen Neuronenausgänge y zu kennen, sondern auch die erforderlichen richtig Werte Y. Bei einem mehrschichtigen Netzwerk liegen diese korrekten Werte nur für Neuronen vor freier Tag Schicht. Die erforderlichen Ausgabewerte für Neuronen der verborgenen Schicht sind unbekannt, was die Anwendung der -Regel einschränkt.

Die Hauptidee hinter der Backpropagation besteht darin, eine Fehlerschätzung für Neuronen der verborgenen Schicht zu erhalten. beachte das berühmt Fehler, die von Neuronen in der Ausgabeschicht verursacht werden, entstehen durch Unbekannt während die Fehler der Neuronen der verborgenen Schichten. Je größer der Wert der synaptischen Verbindung zwischen dem Neuron der verborgenen Schicht und dem Ausgabeneuron ist, desto stärker beeinflusst der Fehler des ersten den Fehler des zweiten. Folglich kann die Schätzung des Fehlers der Elemente verborgener Schichten als gewichtete Summe der Fehler nachfolgender Schichten erhalten werden. Während des Trainings breiten sich Informationen von niedrigeren Schichten der Hierarchie zu höheren aus, und vom Netzwerk vorgenommene Fehlerschätzungen werden in die entgegengesetzte Richtung verteilt, was sich im Namen der Methode widerspiegelt.

Kommen wir zu einer detaillierten Betrachtung dieses Algorithmus. Um die Notation zu vereinfachen, beschränken wir uns auf die Situation, in der das Netzwerk nur eine verborgene Schicht hat. Wir bezeichnen die Matrix der Gewichtungskoeffizienten von den Eingaben zur verborgenen Schicht als W und die Matrix der Gewichtungen, die die verborgene und die Ausgabeschicht verbinden, als V. Für Indizes verwenden wir die folgende Notation: Eingaben werden nur nach Index i nummeriert, Elemente der verborgenen Schicht nach Index j bzw. Ausgaben nach Index k.

Lassen Sie das Netzwerk an einer Stichprobe (X,Y),=1..p, trainieren. Die Aktivitäten von Neuronen werden durch Kleinbuchstaben y mit dem entsprechenden Index und die gesamten gewichteten Eingaben von Neuronen durch Kleinbuchstaben x bezeichnet.

Die allgemeine Struktur des Algorithmus ähnelt der in Vorlesung 4 besprochenen, mit komplexeren Formeln zur Anpassung der Gewichte.

Tabelle 6.1. Backpropagation-Algorithmus.

Die Anfangswerte der Gewichte aller Neuronen aller Schichten V(t=0) und W(t=0) werden auf Zufallszahlen gesetzt.

Das Eingabebild X wird dem Netzwerk präsentiert, wodurch das Ausgabebild yY erzeugt wird. In diesem Fall arbeiten Neuronen sequentiell von Schicht zu Schicht gemäß den folgenden Formeln:

verborgene Schicht

Ausgabeschicht

Hier ist f(x) eine Sigmoidfunktion, die durch Formel (6.1) bestimmt wird.

Die Netzwerkfehlerfunktion für ein gegebenes Eingabebild hat die Form:

Diese Funktionalität muss minimiert werden. Die klassische Gradientenoptimierungsmethode besteht aus einer iterativen Verfeinerung des Arguments gemäß der Formel:

Die Fehlerfunktion enthält nicht explizit eine Abhängigkeit vom Gewicht V jk , daher verwenden wir die Formeln zur impliziten Differenzierung einer komplexen Funktion:

Dabei wird eine nützliche Eigenschaft der Sigmoidfunktion f(x) berücksichtigt: Ihre Ableitung wird nur durch den Wert der Funktion selbst ausgedrückt, f’(x)=f(1-f). Somit wurden alle notwendigen Größen zum Anpassen der Gewichte der Ausgabeschicht V erhalten.

In diesem Schritt werden die Gewichte der verborgenen Ebene angepasst. Die Gradientenmethode liefert immer noch:

Berechnungen von Ableitungen werden mit denselben Formeln durchgeführt, mit Ausnahme einiger Komplikationen der Formel für den Fehler  j.

Bei der Berechnung von  j wurde hier das Prinzip der Fehlerrückausbreitung angewendet: Partielle Ableitungen werden nur in Bezug auf Variablen vorgenommen anschließend Schicht. Mithilfe der erhaltenen Formeln werden die Gewichte der Neuronen der verborgenen Schicht geändert. Wenn ein neuronales Netzwerk über mehrere verborgene Schichten verfügt, wird das Backpropagation-Verfahren nacheinander auf jede von ihnen angewendet, beginnend mit der Schicht vor der Ausgabeschicht und weiter bis zur Schicht nach der Eingabeschicht. In diesem Fall behalten die Formeln ihre Form bei, wobei die Elemente der Ausgabeebene durch Elemente der entsprechenden verborgenen Ebene ersetzt werden.

Die Schritte 1–3 werden für alle Trainingsvektoren wiederholt. Das Training endet, wenn ein kleiner Gesamtfehler oder die maximal zulässige Anzahl von Iterationen erreicht ist, wie bei der Rosenblatt-Trainingsmethode.

Wie aus der Beschreibung der Schritte 2-3 hervorgeht, geht es beim Training darum, das Problem der Optimierung der Fehlerfunktion mithilfe der Gradientenmethode zu lösen. Der Sinn der Rückausbreitung von Fehlern besteht darin, dass man zur Schätzung für Neuronen in verborgenen Schichten die gewichtete Summe der Fehler der nachfolgenden Schicht heranziehen kann.

Der Parameter h hat die Bedeutung der Lernrate und wird klein genug für die Konvergenz des Verfahrens gewählt. Zur Konvergenz müssen noch einige zusätzliche Anmerkungen gemacht werden. Erstens zeigt die Praxis, dass die Konvergenz der Backpropagation-Methode sehr langsam ist. Eine niedrige Konvergenzrate ist eine „genetische Krankheit“ aller Gradientenmethoden, da die lokale Richtung des Gradienten nicht mit der Richtung zum Minimum übereinstimmt. Zweitens werden die Gewichte für jedes Bildpaar im Trainingssatz unabhängig angepasst. In diesem Fall kann eine Verbesserung der Funktionsweise eines bestimmten Paares im Allgemeinen zu einer Verschlechterung der Leistung früherer Bilder führen. In diesem Sinne, Nein zuverlässige (abgesehen von der sehr umfangreichen Praxis der Anwendung der Methode) Konvergenzgarantien.

Untersuchungen zeigen, dass zur Darstellung einer beliebigen Funktionsabbildung, die durch einen Trainingssatz spezifiziert wird, lediglich Folgendes erforderlich ist zwei Schichten Neuronen. In der Praxis kann jedoch bei komplexen Funktionen durch die Verwendung von mehr als einer verborgenen Schicht die Gesamtzahl der Neuronen eingespart werden.

Am Ende der Vorlesung machen wir eine Notiz zur Festlegung der Schwellenwerte von Neuronen. Es ist leicht zu erkennen, dass der Schwellenwert eines Neurons einem zusätzlichen Gewicht entspricht, das mit einem Dummy-Eingang von -1 verbunden ist. Wenn wir W 0 =, x 0 =-1 wählen und die Summierung bei Null beginnen, können wir tatsächlich ein Neuron mit einem Schwellenwert von Null und einem zusätzlichen Eingang betrachten:

Zusätzliche Neuroneneingaben, die Schwellenwerten entsprechen, sind in Abb. dargestellt. 6.1 mit dunklen Quadraten. Unter Berücksichtigung dieser Bemerkung beginnen alle im Backpropagation-Algorithmus dargelegten Eingabesummierungsformeln mit einem Nullindex.

Der Backpropagation-Algorithmus ist eine der Methoden zum Training mehrschichtiger Feedforward-Neuronalnetze, auch Multilayer-Perzeptrone genannt. Mehrschichtige Perzeptrone wurden erfolgreich zur Lösung vieler komplexer Probleme eingesetzt.

Das Training mit dem Backpropagation-Algorithmus umfasst zwei Durchgänge durch alle Schichten des Netzwerks: vorwärts und rückwärts. Beim Vorwärtsdurchlauf wird der Eingabevektor der Eingabeschicht des neuronalen Netzwerks zugeführt und breitet sich dann von Schicht zu Schicht durch das Netzwerk aus. Als Ergebnis wird eine Reihe von Ausgangssignalen generiert, die die tatsächliche Reaktion des Netzwerks auf ein bestimmtes Eingabebild darstellen. Während des Vorwärtsdurchlaufs werden alle synaptischen Gewichte des Netzwerks festgelegt. Während des Rückwärtsdurchlaufs werden alle synaptischen Gewichte gemäß einer Fehlerkorrekturregel angepasst, nämlich: Die tatsächliche Ausgabe des Netzwerks wird von der gewünschten Ausgabe subtrahiert, was zu einem Fehlersignal führt. Dieses Signal breitet sich anschließend im gesamten Netzwerk in entgegengesetzter Richtung zur Richtung der synaptischen Verbindungen aus. Daher der Name - Backpropagation-Algorithmus. Synaptische Gewichte werden angepasst, um die Netzwerkausgabe so nah wie möglich an die gewünschte zu bringen.

Betrachten wir die Funktionsweise des Algorithmus genauer. Nehmen wir an, Sie müssen das folgende neuronale Netzwerk mithilfe des Backpropagation-Algorithmus trainieren:

In der Abbildung werden folgende Symbole verwendet:

Als Aktivierungsfunktion in mehrschichtigen Perzeptronen wird in der Regel eine Sigmoid-Aktivierungsfunktion verwendet, insbesondere eine logistische:

wobei der Steigungsparameter der Sigmoidalfunktion ist. Durch Ändern dieses Parameters können Sie Funktionen mit unterschiedlichen Steigungen konstruieren. Machen wir einen Vorbehalt, dass wir für alle weiteren Argumente genau die logistische Aktivierungsfunktion verwenden werden, die nur durch die obige Formel dargestellt wird.

Das Sigmoid schränkt den Variationsbereich ein, sodass der Wert zwischen Null und Eins liegt. Mehrschichtige neuronale Netze haben nur bei Vorhandensein von Nichtlinearität eine größere Darstellungsleistung als einschichtige neuronale Netze. Die Kompressionsfunktion sorgt für die erforderliche Nichtlinearität. Tatsächlich gibt es viele Funktionen, die genutzt werden könnten. Der Backpropagation-Algorithmus erfordert lediglich, dass die Funktion überall differenzierbar ist. Sigmoid erfüllt diese Anforderung. Es hat den zusätzlichen Vorteil einer automatischen Verstärkungsregelung. Bei schwachen Signalen (dh nahe Null) weist die Eingabe-Ausgabe-Kurve eine starke Steigung auf, was zu einem großen Gewinn führt. Wenn die Signalgröße größer wird, sinkt die Verstärkung. Auf diese Weise werden große Signale vom Netzwerk ohne Sättigung akzeptiert und kleine Signale passieren das Netzwerk ohne übermäßige Dämpfung.

Der Zweck des Netzwerktrainings Der Backpropagation-Algorithmus ist eine Anpassung seiner Gewichte, sodass die Anwendung eines bestimmten Satzes von Eingaben zu dem erforderlichen Satz von Ausgaben führt. Der Kürze halber werden diese Sätze von Ein- und Ausgängen als Vektoren bezeichnet. Beim Training wird davon ausgegangen, dass zu jedem Eingabevektor ein Zielvektor gepaart ist, der die erforderliche Ausgabe angibt. Zusammen werden sie als Trainingspaar bezeichnet. Das Netzwerk wird auf viele Paare trainiert.

Nächste:

  1. Initialisieren Sie synaptische Gewichte mit kleinen Zufallswerten.
  2. Wählen Sie das nächste Trainingspaar aus dem Trainingssatz aus. Senden Sie den Eingabevektor an den Netzwerkeingang.
  3. Berechnen Sie die Netzwerkleistung.
  4. Berechnen Sie die Differenz zwischen der Netzwerkausgabe und der erforderlichen Ausgabe (Zielvektor des Trainingspaars).
  5. Passen Sie die Netzwerkgewichte an, um Fehler zu minimieren (siehe unten).
  6. Wiederholen Sie die Schritte 2 bis 5 für jeden Vektor des Trainingssatzes, bis der Fehler im gesamten Satz ein akzeptables Niveau erreicht.

Die in den Schritten 2 und 3 ausgeführten Vorgänge ähneln denen, die ausgeführt werden, wenn das Netzwerk bereits trainiert ist, d. h. Es wird ein Eingabevektor angegeben und die resultierende Ausgabe berechnet. Die Berechnungen werden Schicht für Schicht durchgeführt. In Abb. In 1 werden zunächst die Ausgaben der Neuronen der Schicht berechnet (die Schicht ist die Eingabe, was bedeutet, dass in ihr keine Berechnungen stattfinden), dann werden sie als Eingaben der Schicht verwendet und die Ausgaben der Neuronen der Schicht berechnet , die den Ausgabevektor des Netzwerks bilden. Die Schritte 2 und 3 bilden einen sogenannten „Vorwärtsdurchlauf“, bei dem sich das Signal vom Eingang zum Ausgang durch das Netzwerk ausbreitet.

Die Schritte 4 und 5 stellen einen „Backpass“ dar, bei dem das berechnete Fehlersignal durch das Netzwerk zurückgeleitet und zum Anpassen der Gewichte verwendet wird.

Schauen wir uns Schritt 5 genauer an – das Anpassen der Netzwerkgewichte. Zwei im Folgenden beschriebene Fälle sollen hier hervorgehoben werden.

Fall 1. Anpassung der synaptischen Gewichte der Ausgabeschicht

Zum Beispiel für das neuronale Netzwerkmodell in Abb. 1 handelt es sich dabei um Gewichte mit folgenden Bezeichnungen: und . Lassen Sie uns entscheiden, dass der Index das Neuron bezeichnet, von dem das synaptische Gewicht ausgeht, und das Neuron, in das es eintritt:

Wir führen den Wert ein, der der Differenz zwischen der erforderlichen und der tatsächlichen Leistung entspricht, multipliziert mit der Ableitung der logistischen Aktivierungsfunktion (die Formel der logistischen Aktivierungsfunktion finden Sie oben):

Dann sind die Gewichte der Ausgabeschicht nach der Korrektur gleich:

Hier ist ein Beispiel für Berechnungen des synaptischen Gewichts:

Fall 2. Anpassung der synaptischen Gewichte der verborgenen Schicht

Für das neuronale Netzwerkmodell in Abb. 1 sind dies die Gewichte, die den Schichten und entsprechen. Entscheiden wir, dass der Index das Neuron bezeichnet, von dem das synaptische Gewicht ausgeht, und das Neuron, in das es eintritt (beachten Sie das Erscheinen einer neuen Variablen).

Streng genommen handelt es sich bei der Backpropagation-Methode um eine Methode zur schnellen Berechnung eines Gradienten, die auf Merkmalen der Netzwerk-Neuberechnungsfunktion basiert und die rechnerische Komplexität der Gradientenberechnung verringert. Die Methode verwendet den Fehler am Netzwerkausgang, um partielle Ableitungen in Bezug auf die Gewichte der letzten Schicht trainierter Verbindungen zu berechnen. Anschließend wird unter Verwendung der Gewichte der letzten Schicht und des Netzwerkfehlers der Fehler am Ausgang der vorletzten Schicht berechnet ermittelt und der Vorgang wiederholt sich.

Beschreibung des Algorithmus

Backpropagation gilt für mehrschichtige Netzwerke, deren Neuronen eine Nichtlinearität mit einer kontinuierlichen Ableitung aufweisen, wie zum Beispiel:

Eine Nichtlinearität dieser Art ist aufgrund der Einfachheit der Berechnung der Ableitung praktisch:

Um das Netzwerk zu trainieren, werden P Paare von Signalvektoren verwendet: der Eingangsvektor I und der Vektor, der am Ausgang des Netzwerks D erhalten werden soll. Das Netzwerk besteht im einfachen Fall aus N Schichten und jedem Neuron des Die nachfolgende Schicht ist durch Verbindungen mit allen Neuronen der vorherigen Schicht mit Gewichten w[n] verbunden.

Bei der direkten Ausbreitung wird für jede Schicht das Gesamtsignal am Ausgang der Schicht (S[n]) und das Signal am Ausgang des Neurons berechnet (und gespeichert). Somit ist das Signal am Eingang des i-ten Neurons der n-ten Schicht:

Dabei sind w (i,j) die Gewichte der Verbindungen der n-ten Schicht. Das Neuronenausgangssignal wird berechnet, indem die Nichtlinearität des Neurons auf das Gesamtsignal angewendet wird.

Das Ausgangsschichtsignal x[N] wird als Ausgangssignal des Netzwerks O betrachtet.

Basierend auf dem Ausgangssignal des Netzwerks O und dem Signal D, das am Netzwerkausgang für einen bestimmten Eingang erhalten werden soll, wird der Netzwerkfehler berechnet. Typischerweise wird das durchschnittliche Quadrat der Abweichung über alle Vektoren des Trainingssatzes verwendet:

Um das Netzwerk zu trainieren, wird der Gradient der Fehlerfunktion über die Netzwerkgewichte verwendet. Der Backpropagation-Algorithmus beinhaltet die Berechnung des Gradienten der Fehlerfunktion durch „Backpropagation des Signals“ des Fehlers. Anschließend wird die partielle Ableitung des Fehlers nach den Verbindungsgewichten nach folgender Formel berechnet:

Dabei ist d das Netzwerkresiduum, das für die Ausgabeschicht mithilfe der Fehlerfunktion berechnet wird:

Und für verborgene Schichten – entsprechend der Abweichung zur vorherigen Schicht:

Für den Fall der Sigmoid-Nichtlinearität und der mittleren quadratischen Abweichung als Funktion des Fehlers:

Das eigentliche Training des Netzwerks besteht darin, solche Gewichtswerte zu finden, die den Fehler an den Netzwerkausgängen minimieren. Zur Lösung dieses Problems stehen viele Gradienten- oder Gradientenmethoden zur Verfügung. Im einfachsten Fall wird das Netzwerk mit kleinen Inkrementen von Verbindungsgewichten in der entgegengesetzten Richtung zum Gradientenvektor trainiert:

Diese Lernmethode wird „Gradient Descent Optimization“ genannt und wird bei neuronalen Netzen oft als Teil der Backpropagation-Methode betrachtet.

Implementierung des Fehler-Backpropagation-Algorithmus am Beispiel der Funktionsnäherung

Aufgabe: Es gebe eine Tabelle mit Argumentwerten ( X ich ) und die entsprechenden Funktionswerte ( f(x ich )) ( Diese Tabelle könnte bei der Berechnung einer analytisch spezifizierten Funktion bei der Durchführung eines Experiments zur Ermittlung der Abhängigkeit des Stroms vom Widerstand im Stromnetz, bei der Ermittlung des Zusammenhangs zwischen Sonnenaktivität und der Anzahl der Besuche im Kardiologiezentrum sowie zwischen der Höhe der Subventionen entstanden sein an Landwirte und das Volumen der landwirtschaftlichen Produktion usw. ).

In der Matlab-Umgebung ist es notwendig, ein neuronales Netzwerk aufzubauen und zu trainieren, um eine in der Tabelle angegebene Funktion i = 1, 20 anzunähern. Entwickeln Sie ein Programm, das den Approximationsalgorithmus des neuronalen Netzwerks implementiert und die Approximationsergebnisse in Form von Diagrammen anzeigt.

Die Approximation besteht darin, dass wir unter Verwendung der verfügbaren Informationen über f (x) die Näherungsfunktion z (x) betrachten können, die in gewisser Weise nahe an f (x) liegt, was es uns ermöglicht, die entsprechenden Operationen daran durchzuführen und zu erhalten eine Schätzung des Fehlers eines solchen Ersatzes.

Unter Approximation versteht man in der Regel die Beschreibung einer, manchmal nicht explizit spezifizierten Abhängigkeit oder eines diese darstellenden Datensatzes unter Verwendung einer anderen, meist einfacheren oder einheitlicheren Abhängigkeit. Häufig liegen die Daten in Form einzelner Ankerpunkte vor, deren Koordinaten in der Datentabelle angegeben sind. Das Näherungsergebnis geht möglicherweise nicht durch die Knotenpunkte. Im Gegensatz dazu besteht die Aufgabe der Interpolation darin, Daten in der Nähe der Knotenpunkte zu finden. Hierzu werden geeignete Funktionen verwendet, deren Werte an den Knotenpunkten mit den Koordinaten dieser Punkte übereinstimmen.

Aufgabe. In der Matlab-Umgebung ist es notwendig, ein neuronales Netzwerk aufzubauen und zu trainieren, um eine tabellenspezifizierte Funktion anzunähern (siehe Abbildung 5).

Abbildung 5. Tabelle der Funktionswerte In der mathematischen Umgebung von Matlab schreiben wir im Befehlsfenster den Code für das Programm zum Erstellen und Trainieren eines neuronalen Netzwerks.

Um dieses Problem zu lösen, verwenden wir die Funktion newff (.) – Erstellen eines „klassischen“ mehrschichtigen neuronalen Netzwerks mit Training mithilfe der Backpropagation-Methode, d. h. die Synapsengewichte ändern sich unter Berücksichtigung der Fehlerfunktion; der Unterschied zwischen den realen und korrekten Antworten des neuronalen Netzwerks, die auf der Ausgangsschicht ermittelt werden, breitet sich in die entgegengesetzte Richtung aus – in Richtung des Signalflusses. Das Netzwerk wird zwei verborgene Schichten haben. В первом слое 5 нейронов, во втором - 1. Функция активации первого слоя - "tansig" (сигмоидная функция, возвращает выходные векторы со значениями в диапазоне от - 1 до 1), второго - "purelin" (линейная функция активации, возвращает выходные векторы ohne Veränderung). Es wird 100 Trainingsepochen geben. Die Trainingsfunktion „trainlm“ ist eine Funktion, die das Netzwerk trainiert (wird standardmäßig verwendet, da sie das schnellste Training bietet, aber viel Speicher benötigt).

Programmcode:

P = Nullen (1, 20);

für i = 1: 20 % Array-Erstellung P (i) = i*0,1; %input (Argument) end T= ; %input (Funktionswert) net = newff ([-1 2.09], ,("tansig" "purelin")); %Erstellung eines neuronalen Netzwerknetzes. trainParam. Epochen = 100; %setze die Anzahl der Trainingsepochen net=train (net,P,T); %Netzwerktraining y = sim(net,P); %trained network poll number(1);

plot (P,T,P,y,"o"),grid; %Zeichnen eines Diagramms der Quelldaten und der vom neuronalen Netzwerk generierten Funktion.

Das Ergebnis des neuronalen Netzwerks.

Trainingsergebnis (siehe Abb. 2): Die Grafik zeigt die Trainingszeit des neuronalen Netzwerks und den Trainingsfehler. In diesem Beispiel durchlief das neuronale Netzwerk alle 100 Epochen, lernte nach und nach und reduzierte Fehler und erreichte 10 -2,35 (0,00455531).

Abbildung 2. Ergebnis des neuronalen Netzwerktrainings

Diagramm der Originaldaten und der vom neuronalen Netzwerk generierten Funktion (siehe Abb. 3): Die Kreise geben die Originaldaten an und die Linie gibt die vom neuronalen Netzwerk generierte Funktion an. Als nächstes können Sie mit den erhaltenen Punkten eine Regression erstellen und eine Näherungsgleichung erhalten (siehe Abbildung 8). Wir haben die kubische Regression verwendet, da ihr Diagramm die erhaltenen Punkte am genauesten durchläuft. Die resultierende Gleichung sieht so aus:

y=0,049x 3 +0,88x 2 -0,006x+2,1.

Wir sehen also, dass Sie mit einem neuronalen Netzwerk schnell eine Funktion finden können, indem Sie nur die Koordinaten der Punkte kennen, durch die sie verläuft.

Abbildung 3. Diagramm der Originaldaten und der vom neuronalen Netzwerk generierten Funktion


Abbildung 4. Diagramm der Näherungsfunktion

Das Ziel des Trainings eines Netzwerks besteht darin, seine Gewichte so anzupassen, dass die Anwendung eines bestimmten Satzes von Eingaben zu dem erforderlichen Satz von Ausgaben führt. Der Kürze halber werden diese Sätze von Ein- und Ausgängen als Vektoren bezeichnet. Beim Training wird davon ausgegangen, dass zu jedem Eingabevektor ein Zielvektor gepaart ist, der die erforderliche Ausgabe angibt. Zusammen werden sie als Trainingspaar bezeichnet. Typischerweise wird das Netzwerk auf vielen Paaren trainiert.

Vor Beginn des Trainings müssen allen Gewichten kleine Anfangswerte zugewiesen werden, die zufällig ausgewählt werden. Dies stellt sicher, dass das Netzwerk nicht mit großen Gewichten gesättigt wird und verhindert eine Reihe anderer pathologischer Fälle. Wenn beispielsweise allen Gewichten die gleichen Anfangswerte zugewiesen werden, die erforderliche Funktion jedoch unterschiedliche Werte erfordert, kann das Netzwerk nicht lernen.

Das Training eines Backpropagation-Netzwerks erfordert

Führen Sie die folgenden Operationen aus:

1. Wählen Sie das nächste Trainingspaar aus dem Trainingssatz aus und senden Sie den Eingabevektor an den Netzwerkeingang.

2. Berechnen Sie die Netzwerkleistung.

3. Berechnen Sie die Differenz zwischen der Netzwerkausgabe und der erforderlichen Ausgabe (Zielvektor des Trainingspaars).

4. Passen Sie die Netzwerkgewichte an, um den Fehler zu minimieren.

5. Wiederholen Sie die Schritte 1 bis 4 für jeden Vektor des Trainingssatzes, bis der Fehler im gesamten Satz ein akzeptables Niveau erreicht.

Die in den Schritten 1 und 2 ausgeführten Vorgänge ähneln denen, die ausgeführt werden, wenn das Netzwerk bereits trainiert ist, d. h. Es wird ein Eingabevektor angegeben und die resultierende Ausgabe berechnet. Die Berechnungen werden Schicht für Schicht durchgeführt. In Abb. 3 werden zunächst die Ausgänge der Neuronen der Schicht j berechnet, dann werden sie als Eingänge der Schicht k verwendet, dann werden die Ausgänge der Neuronen der Schicht k berechnet, die den Ausgangsvektor des Netzwerks bilden.

In Schritt 3 wird jeder der Netzwerkausgänge, die in Abb. 3 mit OUT gekennzeichnet sind, von der entsprechenden Komponente des Zielvektors subtrahiert, um den Fehler zu erhalten. Dieser Fehler wird in Schritt 4 verwendet, um die Netzwerkgewichte anzupassen, wobei das Vorzeichen und die Größe der Änderungen der Gewichte vom Lernalgorithmus bestimmt werden (siehe unten).

Nach ausreichender Wiederholung dieser vier Schritte sollte die Differenz zwischen den tatsächlichen Ausgaben und den Zielausgaben auf einen akzeptablen Wert sinken, und das Netzwerk gilt als gelernt. Jetzt wird das Netzwerk zur Erkennung verwendet und die Gewichte ändern sich nicht.

Die Schritte 1 und 2 können als „Vorwärtsdurchlauf“ betrachtet werden, da sich das Signal vom Eingang zum Ausgang durch das Netzwerk ausbreitet. Die Schritte 3 und 4 stellen einen „Backpass“ dar, hier wird das berechnete Fehlersignal zurück durch das Netzwerk weitergeleitet und zur Anpassung der Gewichte verwendet. Diese beiden Durchgänge werden nun detailliert beschrieben und in einer mathematischeren Form ausgedrückt.

Durchgang vorwärts. Die Schritte 1 und 2 können in Vektorform wie folgt ausgedrückt werden: Eingabevektor X und die Ausgabe ist ein Vektor Y. Vektor-Eingabe-Ziel-Paar X Und T wird aus dem Trainingssatz übernommen. Berechnungen werden am Vektor durchgeführt X um den Ausgabevektor zu erhalten Y.

Wie wir gesehen haben, erfolgt die Berechnung in mehrschichtigen Netzwerken Schicht für Schicht, beginnend mit der Schicht, die der Eingabe am nächsten liegt. Der NET-Wert jedes Neurons in der ersten Schicht wird als gewichtete Summe der Eingaben des Neurons berechnet. Die Aktivierungsfunktion F „komprimiert“ dann das NET und erzeugt einen OUT-Wert für jedes Neuron in dieser Schicht. Wenn der Ausgabesatz einer Ebene empfangen wird, wird er zum Eingabesatz für die nächste Ebene. Der Vorgang wird Schicht für Schicht wiederholt, bis der endgültige Satz an Netzwerkausgaben vorliegt.

Dieser Prozess kann in komprimierter Form mithilfe der Vektornotation ausgedrückt werden. Die Gewichte zwischen Neuronen können als Matrix betrachtet werden W. Beispielsweise wird das Gewicht von Neuron 8 in Schicht 2 bis Neuron 5 in Schicht 3 mit w 8,5 bezeichnet. Dann der NET-Vektor der Ebene N kann nicht als Summe von Produkten, sondern als Produkt ausgedrückt werden X Und W. In Vektornotation N= XW. Durch komponentenweises Anwenden der F-Funktion auf einen NET-Vektor N Der Ausgabevektor wird erhalten UM. Somit wird der Berechnungsprozess für eine bestimmte Schicht durch den folgenden Ausdruck beschrieben:

Ö=F( XW) (3)

Der Ausgabevektor einer Ebene ist der Eingabevektor für die nächste.

Rückwärtspass. Anpassen der Gewichte der Ausgabeebene. Da für jedes Neuron in der Ausgabeschicht ein Zielwert vorgegeben wird, lässt sich die Anpassung der Gewichte einfach über eine modifizierte Delta-Regel durchführen. Die inneren Schichten werden „verborgene Schichten“ genannt und ihre Ausgaben haben keine zu vergleichenden Zielwerte. Daher wird das Lernen schwieriger.

Training der letzten Schicht Abb. 2.4

In Abb. Abbildung 2.4 zeigt den Lernprozess für ein Gewicht von Neuron p. in der verborgenen Schicht j zum Neuron q in der Ausgabeschicht k. Die Ausgabe des Neurons der Schicht k, subtrahiert vom Zielwert (Target), ergibt das Fehlersignal. Dies wird mit der Ableitung der für dieses Schicht-6-Neuron berechneten Kontraktionsfunktion multipliziert und ergibt so den Wert d.

d = OUT(1 - OUT)(Ziel - OUT). (2.4)

Dann wird d mit dem OUT-Wert des Neurons j multipliziert, von dem das betreffende Gewicht stammt. Dieses Produkt wird wiederum mit einem Lernratenfaktor h (typischerweise zwischen 0,01 und 1,0) multipliziert und das Ergebnis zur Gewichtung addiert. Das gleiche Verfahren wird für jedes Gewicht vom Neuron in der verborgenen Schicht bis zum Neuron in der Ausgabeschicht durchgeführt.

Die folgenden Gleichungen veranschaulichen diese Berechnung:

Dw pq, k = hd q, k OUT p, j (2,5)

w pq,k (n+1) = w pq, k (n) + Dw pq, k (2.6)

Dabei ist w pq, k (n) der Wert der Gewichtung vom Neuron h in der verborgenen Schicht zum Neuron q in der Ausgabeschicht in Schritt n (vor der Korrektur). Beachten Sie, dass sich der Index k auf die Schicht bezieht, in der diese Gewichtung endet , d. h. gemäß der in diesem Buch angenommenen Konvention, mit der es verbunden ist; w pq, k (n+1) – Gewichtungswert bei Schritt n+1 (nach der Korrektur), d q, k – d-Wert für das Neuron in der Ausgabeschicht k, OUT p, j – OUT-Wert für das Neuron p in der verborgene Schicht j.

Anpassen der Gewichte ausgeblendeter Ebenen. Betrachten Sie ein einzelnes Neuron in der verborgenen Schicht vor der Ausgabeschicht. Während es vorwärts geht, überträgt dieses Neuron sein Ausgangssignal über die sie verbindenden Gewichte an die Neuronen in der Ausgangsschicht. Während des Trainings arbeiten diese Gewichte in umgekehrter Reihenfolge und geben den Wert von d von der Ausgabeschicht zurück an die verborgene Schicht. Jedes dieser Gewichte wird mit dem d-Wert des Neurons multipliziert, mit dem es in der Ausgabeschicht verbunden ist. Der für ein verborgenes Schichtneuron erforderliche Wert d wird durch Summieren aller dieser Produkte und Multiplizieren mit der Ableitung der Komprimierungsfunktion erhalten:

(siehe Abb. 5) Sobald der Wert von d ermittelt wurde, können die Gewichte, die die erste verborgene Schicht versorgen, mithilfe der Gleichungen (5) und (6) angepasst werden, wobei die Indizes entsprechend der Schicht geändert werden.

Ausbildung der Innenschicht Abb. 2.5

Für jedes Neuron in einer bestimmten verborgenen Schicht muss d berechnet und alle dieser Schicht zugeordneten Gewichte angepasst werden. Dieser Vorgang wird Schicht für Schicht in Richtung Eingabe wiederholt, bis alle Gewichte angepasst sind.

Mithilfe der Vektornotation kann die Fehler-Backpropagation-Operation wesentlich kompakter geschrieben werden. Bezeichnen wir die Wertemenge d der Ausgabeschicht als D k und die Gewichtungsmenge der Ausgabeschicht als Array W k . Um Dj, den d-Vektor der Ausgabeschicht, zu erhalten, genügen die folgenden zwei Operationen:

1. Multiplizieren Sie den d-Vektor der Ausgabeschicht D k mit der transponierten Gewichtsmatrix W k, die die verborgene Schicht mit der Ausgabeschicht verbindet.

2. Multiplizieren Sie jede Komponente des resultierenden Produkts mit der Ableitung der Kompressionsfunktion des entsprechenden Neurons in der verborgenen Schicht.

In symbolischer Notation:

,

wobei der $-Operator das komponentenweise Produkt von Vektoren bezeichnet. O j ist der Ausgabevektor der Schicht j und I ist ein Vektor, dessen Komponenten alle gleich 1 sind.

Netzwerklähmung. Während des Netzwerktrainingsprozesses können die Gewichtswerte durch Korrekturen sehr groß werden. Dies kann dazu führen, dass alle oder die meisten Neuronen mit sehr großen OUT-Werten arbeiten, in einem Bereich, in dem die Ableitung der Kontraktionsfunktion sehr klein ist. Da der während des Lernprozesses zurückgesendete Fehler proportional zu dieser Ableitung ist, kann der Lernprozess praktisch einfrieren. Aus theoretischer Sicht ist dieses Problem kaum verstanden. Dies wird normalerweise durch Verringern der Schrittweite n vermieden, allerdings verlängert sich dadurch die Trainingszeit. Um Lähmungen vorzubeugen oder sich von ihnen zu erholen, wurden verschiedene Heuristiken eingesetzt, die jedoch derzeit nur als experimentell betrachtet werden können.

Lokale Minima. Backpropagation verwendet eine Variation des Gradientenabstiegs, d. h. bewegt sich entlang der Fehleroberfläche und passt die Gewichte kontinuierlich in Richtung des Minimums an. Die Fehleroberfläche eines komplexen Netzwerks ist sehr zerklüftet und besteht aus Hügeln, Tälern, Falten und Schluchten im hochdimensionalen Raum. Ein Netzwerk kann in ein lokales Minimum (flaches Tal) fallen, wenn sich in der Nähe ein viel tieferes Minimum befindet. An einem lokalen Minimalpunkt zeigen alle Richtungen nach oben und das Netzwerk kann diesem nicht entkommen. Statistische Lernmethoden können helfen, diese Falle zu vermeiden, sie sind jedoch langsam. Es wird eine Methode vorgeschlagen, die die statistischen Methoden der Kasha-Maschine mit dem Gradientenabstieg der Backpropagation kombiniert und zu einem System führt, das das globale Minimum findet und gleichzeitig eine hohe Backpropagation-Geschwindigkeit beibehält. Dies wird in Kap. besprochen. 5.

Schrittlänge. Eine sorgfältige Prüfung des Konvergenzbeweises zeigt, dass die Gewichtskorrekturen als verschwindend gering angenommen werden. Dies ist in der Praxis natürlich nicht umsetzbar, da es zu einer endlosen Lernkurve führt. Die Schrittweite sollte als endlich angenommen werden und man darf sich dabei nur auf die Erfahrung verlassen. Wenn die Schrittweite sehr klein ist, ist die Konvergenz zu langsam, ist sie jedoch sehr groß, kann es zu Lähmungen oder ständiger Instabilität kommen.

Vorübergehende Instabilität. Wenn das Netzwerk lernt, Buchstaben zu erkennen, macht es keinen Sinn, B zu lernen, wenn A vergessen wird. Der Lernprozess sollte so ablaufen, dass das Netzwerk auf dem gesamten Trainingssatz trainiert wird, ohne das bereits Gelernte zu überspringen. Im Konvergenznachweis ist diese Bedingung erfüllt, es ist jedoch auch erforderlich, dass dem Netzwerk alle Vektoren des Trainingssatzes vorgelegt werden, bevor die Gewichte angepasst werden. Die notwendigen Gewichtsänderungen müssen für den gesamten Satz berechnet werden, was zusätzlichen Speicher erfordert; Nach einer Reihe solcher Trainingszyklen nähern sich die Gewichte einem minimalen Fehler an. Diese Methode kann nutzlos sein, wenn sich das Netzwerk in einer sich ständig ändernden externen Umgebung befindet, sodass derselbe Vektor möglicherweise nicht ein zweites Mal wiederholt wird. In diesem Fall kann es sein, dass der Lernprozess niemals konvergiert, ziellos umherschweift oder wild schwankt. In diesem Sinne unterscheidet sich die Rückausbreitung von biologischen Systemen.

In mehrschichtigen neuronalen Netzen sind die optimalen Ausgabewerte von Neuronen aller Schichten außer der letzten in der Regel unbekannt. Ein drei- oder mehrschichtiges Perzeptron kann nicht mehr trainiert werden, indem es sich nur an den Fehlerwerten orientiert an den Netzwerkausgängen

Eine Möglichkeit zur Lösung dieses Problems besteht darin, Sätze von Ausgangssignalen zu entwickeln, die den Eingangssignalen für jede Schicht des neuronalen Netzwerks entsprechen, was natürlich ein sehr arbeitsintensiver Vorgang ist und nicht immer durchführbar ist um die Gewichtungskoeffizienten von Synapsen dynamisch anzupassen, wobei sich in der Regel die schwächsten Verbindungen um einen kleinen Betrag in die eine oder andere Richtung ändern und nur die Änderungen gespeichert werden, die zu einer Verringerung des Fehlers am Ausgang des Synapsen führen Offensichtlich ist diese Methode trotz

Die scheinbare Einfachheit erfordert umständliche Routineberechnungen. Und schließlich ist die Ausbreitung von Fehlersignalen von den Ausgängen des neuronalen Netzwerks zu seinen Eingängen in der entgegengesetzten Richtung zur direkten Ausbreitung von Signalen im normalen Betrieb Der Algorithmus wird als Backpropagation-Verfahren (Fehler-Backpropagation) bezeichnet. Er wird im Folgenden besprochen

Der Backpropagation-Algorithmus ist ein iterativer Gradientenlernalgorithmus, der verwendet wird, um die Standardabweichung des Stroms von den erforderlichen Ausgängen mehrschichtiger neuronaler Netze mit seriellen Verbindungen zu minimieren

Nach der Methode der kleinsten Quadrate ist die Zielfehlerfunktion des zu minimierenden neuronalen Netzwerks der Wert

Wo ist der tatsächliche Ausgabezustand des Neurons auf der Ausgabeschicht des neuronalen Netzwerks, wenn ein Bild seinen Eingängen zugeführt wird, der erforderliche Ausgabezustand dieses Neurons?

Die Summierung erfolgt über alle Neuronen der Ausgabeschicht und über alle vom Netzwerk verarbeiteten Bilder. Die Minimierung mithilfe der Gradientenabstiegsmethode gewährleistet die Anpassung der Gewichtskoeffizienten wie folgt

wo ist der Gewichtungskoeffizient der synaptischen Verbindung, die ein Schichtneuron mit einem Schichtneuron verbindet – der Lernratenkoeffizient,

Gemäß der Differenzierungsregel komplexer Funktionen

wobei die gewichtete Summe der Eingangssignale des Neurons das Argument der Aktivierungsfunktion ist. Da die Ableitung der Aktivierungsfunktion auf der gesamten x-Achse bestimmt werden muss, sind die Einheitssprungfunktion und andere Aktivierungsfunktionen mit Inhomogenitäten nicht geeignet Für die betrachteten neuronalen Netze verwenden sie glatte Funktionen wie Tangens hyperbolicus oder klassische Sigmoidfunktion mit Exponentialfunktion (siehe Tabelle 1 1), beispielsweise im Fall eines Tangens hyperbolicus

Der dritte Multiplikator entspricht der Ausgabe des Neurons der vorherigen Schicht

Der erste Faktor in (1.11) lässt sich leicht wie folgt erweitern:

Hier erfolgt die Summierung zwischen den Neuronen der Schicht durch Einführung einer neuen Variablen:

wir erhalten eine rekursive Formel zur Berechnung der Werte einer Schicht aus den Werten einer älteren Schicht

Für die Ausgabeschicht:

Jetzt können wir (1.10) in erweiterter Form schreiben:

Um dem Gewichtskorrekturprozess eine gewisse Trägheit zu verleihen und scharfe Sprünge beim Bewegen entlang der Oberfläche der Zielfunktion auszugleichen, wird (1.17) manchmal um den Wert der Gewichtsänderung bei der vorherigen Iteration ergänzt.

wo ist der Trägheitskoeffizient; aktuelle Iterationsnummer.

Somit ist der vollständige Algorithmus zum Training eines neuronalen Netzwerks mithilfe des Backpropagation-Verfahrens wie folgt aufgebaut.

SCHRITT 1. Wenden Sie eines der möglichen Bilder auf die Netzwerkeingänge an und berechnen Sie im normalen Betriebsmodus des neuronalen Netzwerks, wenn sich Signale von Eingängen zu Ausgängen ausbreiten, deren Werte. Wir möchten Sie daran erinnern:

Wo ist die Anzahl der Neuronen in der Schicht unter Berücksichtigung eines Neurons mit einem konstanten Ausgabezustand, der die Vorspannung festlegt; Neuroneneingabe auf der Ebene

Wo ist das Sigmoid?

Wo ist die Vektorkomponente des Eingabebildes?

SCHRITT 4. Passen Sie alle Gewichte im neuronalen Netzwerk an:

SCHRITT 5. Wenn der Netzwerkfehler schwerwiegend ist, fahren Sie mit Schritt 1 fort. Andernfalls beenden Sie den Vorgang.

In Schritt 1 werden dem Netzwerk alle Trainingsbilder abwechselnd in zufälliger Reihenfolge präsentiert, sodass das Netzwerk, bildlich gesprochen, einige nicht vergisst, während es sich andere merkt.

Aus Ausdruck (1.17) folgt, dass die Lerneffizienz merklich abnimmt, wenn der Ausgabewert gegen Null tendiert. Bei binären Eingabevektoren wird im Durchschnitt die Hälfte der Gewichtungskoeffizienten nicht angepasst, daher ist es ratsam, den Bereich möglicher Werte der Neuronenausgänge innerhalb der Grenzen zu verschieben, die durch einfache Modifikationen logistischer Funktionen erreicht werden können. Beispielsweise wird ein Sigmoid mit einer Exponentialfunktion in die Form umgewandelt:

Betrachten wir die Frage nach der Kapazität eines neuronalen Netzwerks, d. h. der Anzahl der seinen Eingängen präsentierten Bilder, die es erkennen lernen kann. Für Netzwerke mit mehr als zwei Schichten bleibt diese Frage offen. Für Netzwerke mit zwei Schichten wird die deterministische Netzwerkkapazität wie folgt geschätzt:

Dabei ist die Anzahl der einstellbaren Gewichte die Anzahl der Neuronen in der Ausgabeschicht.

Dieser Ausdruck wurde unter Berücksichtigung einiger Einschränkungen ermittelt. Erstens muss die Anzahl der Eingänge und Neuronen in der verborgenen Schicht die Ungleichung erfüllen. Zweitens wurde die obige Schätzung jedoch für Netzwerke mit Schvon Neuronen vorgenommen, und die Kapazität von Netzwerken mit glatten Aktivierungsfunktionen, zum Beispiel (1.23), ist in der Regel größer. Darüber hinaus bedeutet der Begriff deterministisch, dass die resultierende Kapazitätsschätzung für alle Eingabemuster geeignet ist, die durch die Eingaben dargestellt werden können. In der Realität weist die Verteilung der Eingabemuster tendenziell eine gewisse Regelmäßigkeit auf, was es dem neuronalen Netzwerk ermöglicht, zu verallgemeinern und so seine tatsächliche Kapazität zu erhöhen. Da die Verteilung von Bildern im Allgemeinen nicht im Voraus bekannt ist, können wir nur vorläufig über die tatsächliche Kapazität sprechen, diese ist jedoch normalerweise doppelt so groß wie die deterministische Kapazität.

Die Frage nach der Kapazität eines neuronalen Netzwerks hängt eng mit der Frage nach der erforderlichen Leistung der Ausgangsschicht des Netzwerks zusammen, die die endgültige Klassifizierung von Bildern durchführt. Um beispielsweise einen Satz Eingabebilder in zwei Klassen zu unterteilen, reicht ein Ausgabeneuron aus. In diesem Fall bezeichnet jede logische Ebene eine eigene Klasse. Auf zwei Ausgabeneuronen mit einer Skönnen vier Klassen kodiert werden. Um die Zuverlässigkeit der Klassifizierung zu erhöhen, ist es wünschenswert, Redundanz einzuführen, indem jeder Klasse ein oder noch besser mehrere Neuronen in der Ausgabeschicht zugewiesen werden, von denen jedes darauf trainiert ist, zu bestimmen, ob ein Bild zu einer Klasse mit seinem eigenen Grad an gehört Vertrauen, zum Beispiel: hoch, mittel und niedrig. Solche neuronalen Netze ermöglichen die Klassifizierung von Eingabebildern, die zu unscharfen (unscharfen oder sich überschneidenden) Sätzen kombiniert werden. Diese Eigenschaft bringt solche Netze näher an die realen Betriebsbedingungen biologischer neuronaler Netze heran.

Das betreffende neuronale Netzwerk weist mehrere Engpässe auf. Erstens können dabei große positive oder negative Werte der Gewichte den Arbeitspunkt auf den Sigmoiden von Neuronen in den Sättigungsbereich verschieben. Kleine Werte der Ableitung der logistischen Funktion führen gemäß (1.15) und (1.16) zu einem Lernstopp, der das Netzwerk lähmt. Zweitens garantiert die Verwendung der Gradientenabstiegsmethode nicht, dass das globale Minimum der Zielfunktion gefunden wird. Dies hängt eng mit der Frage der Wahl der Lernrate zusammen. Die Gewichtszuwächse und damit die Lernrate zum Finden des Extremums müssen verschwindend gering sein, aber in diesem Fall wird das Lernen verschwinden

geschieht unannehmbar langsam. Andererseits können zu große Anpassungen der Gewichte zu einer dauerhaften Instabilität im Lernprozess führen. Daher wird normalerweise eine Zahl kleiner als 1 (z. B. 0,1) als Lernratenkoeffizient 1] gewählt, der während des Lernprozesses allmählich abnimmt. Um versehentliche Treffer des Netzwerks in lokalen Minima auszuschließen, wird außerdem manchmal nach der Stabilisierung der Werte der Gewichtungskoeffizienten 7 für kurze Zeit deutlich erhöht, um den Gradientenabstieg von einem neuen Punkt aus zu beginnen. Wenn das Netzwerk durch mehrmaliges Wiederholen dieses Vorgangs in den gleichen Zustand gebracht wird, können wir davon ausgehen, dass ein globales Minimum gefunden wurde.

Es gibt eine weitere Methode zur Eliminierung lokaler Minima und Netzwerklähmungen, nämlich die Verwendung stochastischer neuronaler Netzwerke.

Lassen Sie uns das Obige geometrisch interpretieren.

Im Backpropagation-Algorithmus wird der Gradientenvektor der Fehleroberfläche berechnet. Dieser Vektor gibt die Richtung des kürzesten Abstiegs entlang der Oberfläche vom aktuellen Punkt an, wobei eine Bewegung entlang dieser zu einer Verringerung des Fehlers führt. Eine Abfolge abnehmender Schritte führt zu einem Minimum der einen oder anderen Art. Die Schwierigkeit liegt hier in der Wahl der Schrittlänge.

Bei einer großen Schrittweite erfolgt die Konvergenz schneller, es besteht jedoch die Gefahr, über die Lösung zu springen oder bei einer komplexen Fehlerfläche in die falsche Richtung zu gehen, beispielsweise durch eine enge Schlucht mit steilen Hängen. von einer Seite zur anderen springen. Im Gegenteil: Bei einem kleinen Schritt und der richtigen Richtung sind viele Iterationen erforderlich. In der Praxis wird davon ausgegangen, dass die Schrittgröße proportional zur Steilheit der Steigung ist, sodass der Algorithmus in der Nähe des Minimums langsamer wird. Die richtige Wahl der Lernrate hängt von der konkreten Aufgabenstellung ab und erfolgt in der Regel empirisch. Diese Konstante kann auch von der Zeit abhängen und mit fortschreitendem Algorithmus abnehmen.

Typischerweise wird dieser Algorithmus so modifiziert, dass er einen Impuls- (oder Trägheits-)Term enthält. Dies fördert den Fortschritt in einer festen Richtung. Wenn also mehrere Schritte in die gleiche Richtung unternommen wurden, erhöht der Algorithmus die Geschwindigkeit, wodurch Sie manchmal ein lokales Minimum vermeiden und flache Bereiche schneller durchqueren können.

Bei jedem Schritt des Algorithmus werden alle Trainingsbeispiele nacheinander dem Netzwerkeingang zugeführt, die tatsächlichen Ausgangswerte des Netzwerks mit den erforderlichen Werten verglichen und der Fehler berechnet. Der Wert des Fehlers sowie die Steigung der Fehlerfläche

Wird zum Anpassen der Skalen verwendet. Anschließend werden alle Aktionen wiederholt. Der Lernprozess stoppt entweder, wenn eine bestimmte Anzahl von Epochen vergangen ist, oder wenn der Fehler ein bestimmtes kleines Niveau erreicht, oder wenn der Fehler nicht mehr abnimmt.

Betrachten wir die Probleme der Generalisierung und Umschulung eines neuronalen Netzwerks genauer. Unter Generalisierung versteht man die Fähigkeit eines neuronalen Netzwerks, eine genaue Vorhersage für Daten zu treffen, die nicht zum ursprünglichen Trainingssatz gehören. Überanpassung ist eine Überanpassung, die auftritt, wenn der Trainingsalgorithmus zu lange dauert und das Netzwerk zu komplex für die Aufgabe oder die verfügbare Datenmenge ist.

Lassen Sie uns die Probleme der Generalisierung und Umschulung am Beispiel der Approximation einer bestimmten Abhängigkeit nicht durch ein neuronales Netzwerk, sondern mittels Polynomen demonstrieren, und das Wesen des Phänomens wird absolut dasselbe sein.

Polynomgraphen können unterschiedliche Formen haben, und je höher der Grad und die Anzahl der Terme, desto komplexer kann diese Form sein. Für die Ausgangsdaten können Sie eine Polynomkurve (Modell) auswählen und so eine Erklärung der bestehenden Abhängigkeit erhalten. Die Daten können verrauscht sein, daher kann nicht davon ausgegangen werden, dass das beste Modell alle verfügbaren Punkte genau durchläuft. Ein Polynom niedriger Ordnung erklärt die Beziehung möglicherweise besser, ist jedoch möglicherweise nicht flexibel genug, um sich an die Daten anzupassen, während ein Polynom höherer Ordnung möglicherweise übermäßig flexibel ist, sich aber eng an die Daten anpasst und dabei eine gewundene Form annimmt, die nichts damit zu tun hat tatsächliche Beziehung.

Neuronale Netze stehen vor den gleichen Schwierigkeiten. Netzwerke mit mehr Gewichten modellieren komplexere Funktionen und neigen daher zu einer Überanpassung. Netzwerke mit einer geringen Anzahl an Gewichtungen sind möglicherweise nicht flexibel genug, um bestehende Abhängigkeiten zu modellieren. Beispielsweise modelliert ein Netzwerk ohne verborgene Schichten nur eine gewöhnliche lineare Funktion.

Wie wählt man den richtigen Grad an Netzwerkkomplexität? Fast immer führt ein komplexeres Netzwerk zu einem kleineren Fehler, dies deutet jedoch möglicherweise nicht auf eine gute Qualität des Modells hin, sondern eher auf ein Übertraining des Netzwerks.

Die Lösung besteht darin, eine Benchmark-Kreuzvalidierung zu verwenden. Zu diesem Zweck wird ein Teil des Trainingsmusters reserviert, der nicht zum Training des Netzwerks mithilfe des Backpropagation-Algorithmus, sondern zur unabhängigen Überwachung des Ergebnisses während des Algorithmus verwendet wird. Zu Beginn der Arbeiten trat ein Netzwerkfehler im Trainings- und Netzwerkbereich auf

Die Kontrollsätze werden gleich sein. Wenn das Netzwerk trainiert wird, nimmt der Trainingsfehler ab, ebenso wie der Fehler im Kontrollsatz. Wenn der Kontrollfehler nicht mehr abnimmt oder sogar zunimmt, deutet dies darauf hin, dass das Netzwerk begonnen hat, sich den Daten zu sehr anzunähern (übertrainiert) und das Training gestoppt werden sollte. In diesem Fall sollte die Anzahl der versteckten Elemente und/oder Schichten reduziert werden, da das Netzwerk für diese Aufgabe zu leistungsfähig ist. Wenn beide Fehler (Training und Kreuzvalidierung) nicht ein ausreichend kleines Niveau erreichen, kam es natürlich nicht zu einem erneuten Training, und das Netzwerk ist im Gegenteil nicht leistungsfähig genug, um die bestehende Abhängigkeit zu modellieren.

Die beschriebenen Probleme führen dazu, dass man bei der Arbeit mit neuronalen Netzen in der Praxis mit einer Vielzahl verschiedener Netze experimentieren, diese teilweise mehrmals trainieren und die erzielten Ergebnisse vergleichen muss. Der Hauptindikator für die Qualität des Ergebnisses ist der Kontrollfehler. Gleichzeitig ist es nach dem systemweiten Prinzip sinnvoll, aus zwei Netzen mit annähernd gleichen Regelfehlern das einfachere zu wählen.

Die Notwendigkeit wiederholter Experimente führt dazu, dass der Kontrollsatz eine Schlüsselrolle bei der Modellauswahl spielt und Teil des Lernprozesses wird. Dies schwächt seine Rolle als unabhängiges Kriterium der Modellqualität. Bei einer großen Anzahl von Experimenten besteht eine hohe Wahrscheinlichkeit, ein erfolgreiches Netzwerk auszuwählen, das gute Ergebnisse im Kontrollsatz liefert. Um dem endgültigen Modell jedoch die richtige Zuverlässigkeit zu verleihen, gehen sie häufig (wenn die Menge an Trainingsbeispielen dies zulässt) wie folgt vor: Reservieren Sie einen Testsatz von Beispielen. Das endgültige Modell wird anhand von Daten aus diesem Satz getestet, um sicherzustellen, dass die mit den Trainings- und Testsätzen von Beispielen erzielten Ergebnisse real und keine Artefakte des Lernprozesses sind. Um seine Rolle gut zu erfüllen, sollte der Testsatz natürlich nur einmal verwendet werden: Wenn er zur Anpassung des Lernprozesses wiederverwendet wird, wird er tatsächlich zu einem Kontrollsatz.

Um den Lernprozess des Netzwerks zu beschleunigen, wurden zahlreiche Modifikationen des Fehler-Backpropagation-Algorithmus vorgeschlagen, verbunden mit der Verwendung verschiedener Fehlerfunktionen, Verfahren zur Richtungsbestimmung und Schrittgrößen.

1) Fehlerfunktionen:

Integrale Fehlerfunktionen über den gesamten Satz von Trainingsbeispielen;

Fehlerfunktionen ganzzahliger und gebrochener Potenzen

2) Verfahren zur Bestimmung der Schrittgröße bei jeder Iteration

Dichotomie;

Trägheitsbeziehungen (siehe oben);

3) Verfahren zur Bestimmung der Schrittrichtung.

Verwendung einer Matrix aus Ableitungen zweiter Ordnung (Newton-Methode);

Verwendung von Anweisungen in mehreren Schritten (Partan-Methode).