Dieser Abschnitt präsentiert den
ersten originären Beitrag der vorliegenden Arbeit.
Wie oben gesehen, beträgt RTRLs
Berechnungskomplexität2.2pro Zeitschritt .
Im folgenden werden wir die Gradientenkalkulation
so umarrangieren, daß die Speicherkomplexität des
neuen Verfahrens dieselbe
Ordnung wie die von RTRL aufweist, die Berechnungskomplexität
aber in Proportion zur Zahl der Knoten im Netzwerk sinkt.
Im Gegensatz zu der in [156] vorgestellten ad-hoc
Methode bestimmt das neuartige Verfahren den exakten Gradienten,
nicht etwa nur eine Approximation desselben [109].
Alle Zeitschritte benötigt die neue Methode
Operationen, bei allen dazwischenliegenden Zeitschritten sind
allerdings nur
Operationen erforderlich. Dies drückt die durchschnittliche
Zeitkomplexität pro Zeitschritt auf
.
Eine Trainingssequenz mit Zeitschritten startet wieder
zum Zeitschritt 0 und endet zum Zeitschritt
. Der nachfolgende
Algorithmus ist von Interesse, falls
(sonst sei BPTT empfohlen).
Der Algorithmus2.3 ist ein Hybrid zwischen BPTT und RTRL [109].
Die folgende Beschreibung enthält sowohl die Herleitung
als auch einige Kommentare zur Komplexität der einzelnen Schritte.
Die wesentliche Idee ist: Zerlege die Gradientenberechnung in
mehrerere Blöcke, von denen jeder Zeitschritte
umfaßt. Führe für jeden Block
BPTT-ähnliche
Berechnungsphasen durch. Eine davon dient zur Bestimmung
gewisser Fehlergradienten, die restlichen
Phasen dienen zur
Berechnung der partiellen Ableitungen der Netzeingaben
jedes internen Knotens am Ende jedes Blocks. Führe schließlich
RTRL-ähnliche Berechnungsphasen durch, um die Resultate
der BPTT-Phasen mit den aus früher abgearbeiteten Blocks
gewonnenen Resultaten zu verrechnen. Siehe Abbildung 2.3.
![]() |
Für alle und für alle
definieren wir
Zu Beginn des Algorithmus setzen wir die Variable
.
bezeichnet den ersten Zeitschritt des gegenwärtigen Blocks.
Man beachte, daß
für alle in Frage kommenden
gilt:
Die Hauptschleife des Algorithmus umfaßt 5 Schritte.
1. SCHRITT: Setze
(es sei empfohlen:
).
Die Größe
ist für alle
bereits bekannt. Dasselbe gilt für
für alle in Frage kommenden
.
Gesucht ist eine effiziente Methode zur Bestimmung des Beitrags von
zur Änderung von
,
2. SCHRITT: Führe eine Aktivationsausbreitungsphase
für die Zeitschritte bis einschließlich
gemäß der in Gleichung (2.1) spezifizierten
Aktivierungsdynamik durch. Stellt sich zur Laufzeit heraus, daß
die gegenwärtige Trainingssequenz weniger als
Zeitschritte umfaßt
(i.e.,
), dann setze
. Falls
, terminiere den Algorithmus.
3. SCHRITT:
Führe zur Berechnung von Fehlerableitungen
folgende Kombination einer BPTT-ähnlichen Berechnungsphase
mit einer RTRL-ähnlichen Berechnungsphase
durch. Wir schreiben
![]() |
(2.7) |
Wir kennen bereits den ersten Term des Ausdrucks (2.7). Man konzentriere sich auf den dritten Term:
4. SCHRITT:
Um
für alle möglichen
zu berechnen, führe
BPTT/RTRL-Kombinationen
(eine solche Kombination für jedes
) aus:
![]() |
(2.8) |
Für gegebenes kostet die Berechnung von (2.8)
für alle
Operationen.
Der 3. und der 4. SCHRITT
brauchen zusammen also
Operationen,
die sich allerdings über
Zeitschritte verteilen.
Da wir zu Beginn
gesetzt haben, verstreuen sich
demzufolge
Operationen über
Zeitschritte.
Dies zieht eine durchschnittliche Berechnungskomplexität
der Ordnung
nach sich.
Der 5. Schritt schließt die Hauptschleife des Algorithmus ab:
5. SCHRITT: Setze
und springe zum 1. SCHRITT.
So wie er oben formuliert wurde, führt der Algorithmus
bei jedem -ten Zeitschritt zu
einen Spitzenberechnungsaufwand von
Operationen.
Nichts hält uns jedoch davon ab,
diese
Berechnungen gleichmäßig über
Zeitschritte zu verteilen. Man könnte zum Beispiel
zu jedem Zeitschritt des
-ten Blocks eine der
BPTT-Phasen des 4. SCHRITTs des
-ten Blocks
durchführen. Dies würde auch den Spitzenberechnungsaufwand pro
Zeitschritt auf
drücken.
Die off-line Version des Algorithmus führt die Gesamtgewichtsänderung nach Abschluß der Präsentation aller Trainingssequenzen aus.
Die korrespondierende on-line-Version
ändert die Gewichte jeweils nach dem 4. SCHRITT (also jeweils
nach der Abarbeitung eines Blockes der Zeitdauer ).
Die im nächsten Abschnitt (sowie in den Arbeiten der
anderen in diesem Kapitel aufgeführten Autoren)
beschriebenen Experimente verwenden für alle
Versionen aller drei oben betrachteten Algorithmen
gewöhnlich Lernraten zwischen 0.01 und 1.0.