Maschinelles Lernen und neuronale Netze - Seite 50

 

So trainieren Sie Ihr Neuron (DL 04)



So trainieren Sie Ihr Neuron (DL 04)

In unserem vorherigen Video haben wir die Berechnung eines einzelnen Neurons untersucht. Wir haben gelernt, dass ein Neuron rechnet, indem es eine gewichtete Summe von Eingaben nimmt, einen Bias hinzufügt und eine Aktivierungsfunktion anwendet. Durch die Verwendung einer Schrittfunktion zur Aktivierung erhalten wir einen binären Klassifikator, während eine lineare Funktion einen Regressor liefert.

Wir haben auch die Messung des Verlusts eines Modells in seinem Datensatz mithilfe der Summe der quadratischen Fehler und das Training des Modells mithilfe des Gradienten der Verlustfunktion besprochen. Die Verlustfunktion hängt von den Parametern des Modells ab, nämlich den Gewichten und dem Bias. Der mittlere quadratische Fehler wird üblicherweise als Verlustfunktion in Berechnungen verwendet.

Um zu verstehen, wie die Verlustfunktion von den Parametern abhängt und wie wir sie ändern können, um den Verlust zu reduzieren, haben wir den Verlust anhand eines kleinen Regressionsdatensatzes berechnet. Durch Summieren der quadrierten Differenzen zwischen den korrekten und den vorhergesagten Ausgaben haben wir den Verlustwert erhalten.

Als nächstes konzentrierten wir uns darauf, den Gradienten der Verlustfunktion zu finden. Wir haben die partiellen Ableitungen des Verlusts für jeden Parameter abgeleitet. Diese partiellen Ableitungen bilden den Gradienten, der uns bei der Verringerung des Verlusts hilft. Indem wir die Parameter in die entgegengesetzte Richtung des Gradienten aktualisieren, können wir den Verlust minimieren und die Darstellung des Datensatzes durch unser Modell verbessern.

Wir haben die Verlustfunktion als Oberfläche im Parameterraum visualisiert und diskutiert, wie der Gradient die Richtung des steilsten Anstiegs des Verlusts anzeigt. Durch kleine Schritte in die entgegengesetzte Richtung des Gradienten können wir den Verlust iterativ verringern und unser Modell verfeinern.

Bei Klassifizierungsaufgaben stießen wir auf eine Herausforderung, als wir die Ableitung der Stufenfunktionsaktivierung ermittelten. Um dieses Problem zu lösen, haben wir die Stufenfunktion durch eine glatte Näherung namens Sigmoidfunktion ersetzt. Wir haben das Verhalten der Sigmoidfunktion und ihre Fähigkeit erklärt, probabilistische Ausgaben zwischen 0 und 1 zu erzeugen.

Wir haben die Sigmoidfunktion auf ein Klassifizierungsbeispiel angewendet und gezeigt, wie der Verlust und der Gradient mithilfe der neuen Aktivierung berechnet werden. Der Prozess der Aktualisierung der Parameter und der Verbesserung des Modells bleibt derselbe wie bei der Regression.

Abschließend haben wir betont, dass die diskutierten Konzepte auf höhere Dimensionen erweitert werden können, indem dieselben Formeln auf mehrere Gewichte und Datenpunkte angewendet werden. Die allgemeinen Prinzipien der Verlustberechnung, der Gradientenberechnung und der Parameteraktualisierung gelten unabhängig von der Dimensionalität der Eingabe.

Insgesamt bildet das Verständnis der Berechnung eines einzelnen Neurons, der Verlustfunktion und des Gradienten die Grundlage für das Training neuronaler Netze und die Verbesserung ihrer Leistung.

How to train your neuron (DL 04)
How to train your neuron (DL 04)
  • 2022.09.03
  • www.youtube.com
Davidson CSC 381: Deep Learning, Fall 2022
 

Die Datenanalyse-Pipeline (DL 05)



Die Datenanalyse-Pipeline (DL 05)

In unserem Deep-Learning-Kurs werden wir uns eingehend mit der Erforschung neuronaler Netze befassen. Es ist jedoch wichtig zu bedenken, dass ein neuronales Netzwerk oder jedes Modell für maschinelles Lernen nur ein Teil eines größeren Systems ist. Bevor Daten in ein neuronales Netzwerk eingespeist werden können, müssen sie gesammelt und in ein Format verarbeitet werden, das das Netzwerk verstehen kann. Ebenso erfordern die Ergebnisse eines neuronalen Netzwerks häufig eine Nachbearbeitung oder weitere Analyse.

Während des gesamten Semesters wird es hilfreich sein, sich die Metapher einer Datenanalyse-Pipeline vor Augen zu halten. Diese Analogie unterstreicht, dass unser Ziel beim maschinellen Lernen darin besteht, Beobachtungen der Welt in Vorhersagen über die Welt umzuwandeln, und das neuronale Netzwerk ist nur ein Schritt in diesem Prozess. Die Pipeline erinnert uns daran, die Phasen zu berücksichtigen, die unsere Daten durchlaufen, und wie jede Phase zur nächsten beiträgt.

Unterschiedliche Probleme erfordern unterschiedliche Phasen in der Pipeline. Während standardisierte oder simulierte Datensätze es uns möglicherweise ermöglichen, bestimmte Phasen zu überspringen, erfordern reale Anwendungen von Deep Learning, dass wir die praktischen Aspekte der Datenanalyse berücksichtigen.

Lassen Sie uns einige wichtige Aspekte von Datenanalyse-Pipelines genauer besprechen. Die erste Stufe ist die Datenerhebung. Obwohl in einigen Fällen bereits vorhandene Datensätze verwendet werden können, müssen wir, wenn wir ein neues Problem mit Deep Learning lösen wollen, bestimmen, welche Daten für das Training unseres Modells geeignet sind. Beim Sammeln von Daten müssen wir sicherstellen, dass wir über eine ausreichende Menge verfügen, wenn man bedenkt, dass die jüngsten Erfolge des Deep Learning auf großen Datensätzen beruhen. Allerdings gibt es auch so etwas wie zu viele Daten, insbesondere wenn die Rechenressourcen begrenzt sind. In bestimmten Fällen kann die Arbeit mit einer begrenzten Datenmenge von Vorteil sein, insbesondere bei der Erkundung und Problemerkennung. Es ist wichtig sicherzustellen, dass der Datensatz, den wir für das Training verwenden, repräsentativ für das Problem ist, das wir lösen möchten. Dabei geht es darum, Faktoren wie die Darstellung aller gewünschten Klassen in einer Klassifizierungsaufgabe zu berücksichtigen und wichtige Ausreißer, die das Modell erkennen soll, nicht zu übersehen.

Eine weitere Herausforderung besteht darin, systematische Verzerrungen in Datensätzen zu identifizieren. Verzerrungen können auf verschiedene Weise entstehen, beispielsweise durch eine Überdarstellung von Bildern, die an sonnigen Tagen aufgenommen wurden, was bei bewölktem Wetter zu Schwierigkeiten bei der Bildklassifizierung führt. Verzerrungen können sich auch auf Vorhersagen in Bezug auf Gesundheit oder Bildung auswirken, indem einzelne Faktoren auf breitere soziale Strukturen zurückgeführt werden. Es ist wichtig, bei der Datenerfassung auf mögliche Verzerrungen zu achten. Das Ansprechen und Korrigieren von Vorurteilen ist jedoch ein komplexes Problem, das fortlaufende Deep-Learning-Forschung erfordert.

Nach dem Sammeln von Daten müssen wir diese häufig bereinigen, bevor wir maschinelles Lernen oder andere Verarbeitungstechniken anwenden. Dieser Schritt umfasst den Umgang mit fehlenden Daten, die Entscheidung, welche Dimensionen der Daten relevant sind, und den Umgang mit unterschiedlichen Dimensionalitäten in den Beispielen. Die richtige Kennzeichnung der Daten ist für überwachtes Lernen von entscheidender Bedeutung. Das Erhalten geeigneter Bezeichnungen kann eine Herausforderung sein, insbesondere beim Transkribieren von Gebärdensprache oder beim Umgang mit Inkonsistenzen zwischen Sprache und Text. Die Beschriftungen sollten die Aspekte der Daten, die unser Modell lernen soll, genau darstellen.

Als nächstes müssen wir die Daten in ein numerisches Format umwandeln, das für das Training unseres neuronalen Netzwerks oder unseres Modells für maschinelles Lernen geeignet ist. Neuronale Netze erwarten numerische Eingaben in Form von Vektoren oder Matrizen. Der Prozess der numerischen Codierung ist je nach Problem unterschiedlich schwierig. Beispielsweise ist die Verarbeitung von Bilddaten aufgrund der von Computern bereits verwendeten pixelbasierten Darstellung relativ einfach. Die Verarbeitung von im ASCII-Format codierten Textdaten erfordert jedoch alternative Darstellungen. Die Transformation der Datendarstellung oder sogar der Dimensionalität wird immer wichtiger, je komplexer die Probleme werden.

Darüber hinaus kann es von Vorteil sein, die Daten zu normalisieren, insbesondere wenn neuronale Netze dazu neigen, Werte im Bereich von null bis eins auszugeben. Bei der Normalisierung wird der Bereich der Datenwerte skaliert, um sicherzustellen, dass die Eingaben in das neuronale Netzwerk näher beieinander liegen. Nach der Ausgabe des neuronalen Netzwerks müssen wir möglicherweise Nachbearbeitungsschritte durchführen. Dazu gehört die Dekodierung der Netzwerkausgabe in das gewünschte Vorhersageformat, die Vermittlung der Vorhersagesicherheit und die Berücksichtigung der Anwendung oder des Algorithmus, die die Vorhersagen des Modells verwenden.

Sobald wir die Daten verarbeitet und unser neuronales Netzwerk trainiert haben, können wir mit der Auswertung und Abstimmung fortfahren. Hier bewerten wir die Leistung unseres Modells und nehmen Verbesserungen vor. Bei der Auswertung wird der Testsatz verwendet, den wir zuvor beiseite gelegt haben. Indem wir das trainierte neuronale Netzwerk auf diese unsichtbaren Daten anwenden, können wir messen, wie gut es sich auf neue Beispiele übertragen lässt. Normalerweise verwenden wir Metriken wie Genauigkeit, Präzision, Rückruf und F1-Score, um die Leistung unseres Modells zu bewerten. Diese Metriken geben Aufschluss darüber, wie effektiv das neuronale Netzwerk Vorhersagen trifft.

Basierend auf den Bewertungsergebnissen können wir Bereiche identifizieren, in denen das Modell möglicherweise leistungsschwach ist oder Einschränkungen aufweist. Diese Informationen helfen uns bei der Durchführung notwendiger Anpassungen und Verbesserungen. Wir können die Modellarchitektur und Hyperparameter iterieren oder bei Bedarf sogar zusätzliche Daten sammeln. Ziel ist es, die Leistung des Modells zu verbessern und sicherzustellen, dass es die gewünschte Genauigkeit und Zuverlässigkeit erreicht.

Während des Tuning-Prozesses experimentieren wir mit verschiedenen Konfigurationen und Einstellungen, um die Leistung des Modells zu optimieren. Dazu gehört die Anpassung von Hyperparametern wie Lernrate, Stapelgröße und Regularisierungstechniken. Durch systematische Erkundung und Experimente wollen wir die beste Kombination von Einstellungen finden, die die Wirksamkeit des neuronalen Netzwerks maximiert.

Neben der Feinabstimmung des Modells selbst berücksichtigen wir auch den breiteren Kontext seiner Anwendung. Wir berücksichtigen das spezifische Problem, das wir zu lösen versuchen, und die realen Auswirkungen der Modellvorhersagen. Dabei werden die sozialen, ethischen und rechtlichen Aspekte der Umsetzung des Modells in der Praxis untersucht. Es ist von entscheidender Bedeutung, sicherzustellen, dass das Modell fair und unvoreingenommen ist und auf die Werte und Anforderungen des Problembereichs abgestimmt ist.

Als Deep-Learning-Praktiker geht unsere Verantwortung über die Entwicklung präziser Modelle hinaus. Wir müssen die Ergebnisse kritisch analysieren und interpretieren und dabei mögliche Verzerrungen oder Einschränkungen berücksichtigen. Um die Wirksamkeit des Modells langfristig aufrechtzuerhalten, ist eine regelmäßige Überprüfung und Neubewertung der Leistung des Modells erforderlich.

Das Studium neuronaler Netze in einem Deep-Learning-Kurs erfordert das Verständnis, dass sie Teil eines größeren Systems sind. Die Datenanalyse-Pipeline umfasst von der Datenerfassung über die Vorverarbeitung bis hin zum Training und der Auswertung mehrere Phasen, die sorgfältig geprüft werden müssen. Indem wir den gesamten Prozess im Auge behalten und unsere Modelle kontinuierlich verbessern, können wir die Leistungsfähigkeit des Deep Learning effektiv nutzen, um genaue Vorhersagen zu treffen und reale Probleme zu lösen.

The Data Analysis Pipeline (DL 05)
The Data Analysis Pipeline (DL 05)
  • 2022.09.09
  • www.youtube.com
Davidson CSC 381: Deep Learning, Fall 2022
 

Out-of-Sample-Validierung (DL 06)



Out-of-Sample-Validierung (DL 06)

Beim maschinellen Lernen geht es bei der Bewertung eines Modells darum, neue Vorhersagen zu treffen und diese anhand unbekannter Daten zu testen. In dieser Diskussion werden wir untersuchen, wie wir unsere Daten effektiv nutzen können, um unsere Modelle für maschinelles Lernen zu validieren und zu verbessern.

Der Prozess der Modellauswahl beginnt mit der Identifizierung der verfügbaren Optionen zur Lösung eines bestimmten Problems. Dies führt uns zum Konzept des Hypothesenraums eines Modells, der die Funktionstypen definiert, die das Modell darstellen kann. Der Hypothesenraum wird durch Faktoren wie die gewählte Eingabedarstellung und den erforderlichen Ausgabetyp eingeschränkt.

Sobald wir ein bestimmtes Modell oder einen Algorithmus für maschinelles Lernen ausgewählt haben, können verschiedene Aspekte des Modells optimiert werden. Dazu gehört die Anpassung der Modellparameter wie Gewichte und Verzerrungen, die anhand der Daten trainiert werden. Darüber hinaus können andere Aspekte wie die Lernrate oder die Anzahl der Iterationen als Hyperparameter betrachtet werden, die die Leistung des Modells beeinflussen.

Um verschiedene Optionen effektiv zu erkunden und zu testen, verlassen wir uns auf experimentelle Validierung. Dazu gehört die Aufteilung unseres Datensatzes in Trainings- und Testsätze. Der Trainingssatz wird zum Trainieren des Modells verwendet, während der Testsatz zur Bewertung seiner Leistung anhand unsichtbarer Daten verwendet wird. Durch den Vergleich verschiedener Modelle oder Hyperparameter im Testsatz können wir bestimmen, welche bei der Verallgemeinerung auf neue Daten effektiver sind.

Die Generalisierung ist ein entscheidender Aspekt des maschinellen Lernens, da unser Ziel darin besteht, Modelle zu entwickeln, die genaue Vorhersagen zu neuen, unsichtbaren Daten treffen können. Eine Überanpassung, bei der ein Modell zu spezifisch für die Trainingsdaten wird, ist eine häufige Herausforderung beim Erreichen einer guten Generalisierung. Indem wir einen Teil der Daten für die Validierung außerhalb der Stichprobe trennen, können wir beurteilen, ob ein Modell überpasst oder erfolgreich verallgemeinert.

Bei der Untersuchung mehrerer Hyperparameter können wir deren Werte systematisch variieren oder zufällig Stichproben aus einem plausiblen Bereich ziehen. Durch die Randomisierung können wir ein breiteres Wertespektrum effizient untersuchen. Wenn umfangreiche Experimente jedoch zu einer Überanpassung des Testsatzes führen, kann eine weitere Aufteilung der Daten in Trainings-, Validierungs- und Testsätze oder der Einsatz einer Kreuzvalidierung erforderlich sein.

Bei der Kreuzvalidierung werden die Daten in mehrere Teilmengen aufgeteilt und das Modell iterativ anhand verschiedener Kombinationen dieser Teilmengen trainiert und getestet. Dieser Ansatz bietet eine robustere Schätzung der Leistung und Generalisierungsfähigkeit des Modells.

Die Schlüsselidee beim maschinellen Lernen besteht darin, unsere Modelle experimentell zu validieren, indem Trainings- und Testdaten getrennt werden. Dies ermöglicht es uns, ihre Leistung anhand unbekannter Beispiele zu bewerten und fundierte Entscheidungen über die Modellauswahl und die Optimierung von Hyperparametern zu treffen.

Out-of-Sample Validation (DL 06)
Out-of-Sample Validation (DL 06)
  • 2022.09.09
  • www.youtube.com
Davidson CSC 381: Deep Learning, Fall 2022
 

Feed-Forward-Neuronale Netze (DL 07)



Feed-Forward-Neuronale Netze (DL 07)

Neuronale Netze bestehen im Gegensatz zu einzelnen Neuronen aus mehreren Schichten und führen Berechnungen über Knoten durch. Jeder Knoten berechnet die gewichtete Summe der Eingaben und wendet eine Aktivierungsfunktion an. In einem neuronalen Netzwerk kann die Eingabe eines Knotens von früheren Knotenaktivierungen stammen und seine berechnete Aktivierung kann an spätere Knoten weitergegeben werden.

Beispielsweise empfängt Neuron 8 in einem Netzwerk Eingaben von den Neuronen 5, 6 und 7. Die gewichtete Summe der von Neuron 8 durchgeführten Eingaben ist die Summe der Aktivierungen dieser Neuronen multipliziert mit den entsprechenden Gewichten plus der Vorspannung. Anschließend wird die Aktivierungsfunktion auf die gewichtete Summe angewendet. Die Ausgabe von Neuron 8 wird als Eingabe für die Knoten 11 und 12 verwendet. In einem neuronalen Netzwerk können verschiedene Aktivierungsfunktionen verwendet werden, beispielsweise der hyperbolische Tangens und die Gleichrichter-Lineareinheit (ReLU).

Um Berechnungen mithilfe eines neuronalen Netzwerks zur Erstellung von Vorhersagen durchzuführen, legen wir zunächst die Aktivierungen der Eingabeschichtknoten basierend auf den Eingabedaten fest. Die Eingabeschichtknoten speichern einfach die Werte des Eingabevektors. Die Größe der Eingabe- und Ausgabeschichten hängt von der Dimensionalität der Daten und der gewünschten Vorhersage ab. Die verborgenen Neuronen im Netzwerk, die in Schichten organisiert sind, führen Berechnungen zwischen den Ein- und Ausgängen durch. Indem wir die Aktivierungen für jede Schicht berechnen, können wir die Eingaben unter Bezugnahme auf die vorherigen Aktivierungen an die nächste Schicht weitergeben. Diese Aktivierungen werden auch für den Gradientenabstieg während Gewichtsaktualisierungen benötigt. Das Vorhandensein verborgener Schichten in einem neuronalen Netzwerk bietet die Möglichkeit, nichtlineare Aktivierungsfunktionen zu verwenden. Lineare Aktivierungen bieten in mehrschichtigen Netzwerken keinen Vorteil. Nichtlineare Aktivierungsfunktionen, wie beispielsweise die Sigmoidfunktion, ermöglichen die Darstellung verschiedener Funktionen.

Neuronen, die logische Operationen wie AND, OR und NOT darstellen, können mithilfe von Schrittfunktionsklassifikatoren konstruiert werden. Durch die Annäherung dieser logischen Operationen mithilfe von Sigmoid-Aktivierungen kann ein neuronales Netzwerk jede boolesche Funktion darstellen. Um ein neuronales Netzwerk zu trainieren, verwenden wir den Gradientenabstieg, um die Gewichte und Verzerrungen zu aktualisieren. Die Parameter des Netzwerks umfassen alle Gewichte und Bias im gesamten Netzwerk. Die Verlustfunktion in einem Netzwerk mit mehreren Ausgabeneuronen kann der mittlere quadratische Fehler sein, der über alle Ausgabeneuronen summiert wird. Ziel ist es, den Verlust durch iterative Aktualisierung der Parameter zu reduzieren.

Der Gradientenabstieg erfolgt durch Berechnen der Verlustgradienten in Bezug auf die Parameter, wobei Schritte in die entgegengesetzte Richtung der Gradienten unternommen werden, um den Verlust zu minimieren. Dieser Prozess wird als Backpropagation bezeichnet und ermöglicht es dem Netzwerk, zu lernen und seine Vorhersagen zu verbessern. Im nächsten Video werden wir uns mit den Details des Backpropagation-Algorithmus befassen, der zur Durchführung von Gradientenabstiegsaktualisierungen in einem neuronalen Netzwerk verwendet wird. Backpropagation ermöglicht eine effiziente Berechnung der Verlustgradienten in Bezug auf die Netzwerkparameter.

Der Prozess beginnt mit der Berechnung des Gradienten der Verlustfunktion in Bezug auf die Ausgabeaktivierungen. Dieser Gradient stellt die Empfindlichkeit des Verlusts gegenüber Änderungen der Ausgangsaktivierungen dar. Er kann durch Anwendung der Kettenregel ermittelt werden, da der Verlust von den Ausgabeaktivierungen durch die Aktivierungsfunktion und der quadrierten Differenz mit den Zielwerten abhängt. Sobald der Verlustgradient in Bezug auf die Ausgabeaktivierungen berechnet ist, wird er rückwärts durch das Netzwerk propagiert. Auf jeder Ebene werden die Gradienten mit der Ableitung der Aktivierungsfunktion in Bezug auf die gewichtete Summe der Eingaben multipliziert. Diese Ableitung erfasst die Empfindlichkeit der Aktivierung gegenüber Änderungen in der gewichteten Summe.

Durch die Rückwärtsausbreitung der Gradienten können wir die Verlustgradienten in Bezug auf die Aktivierungen der vorherigen Schicht berechnen. Diese Gradienten geben an, wie viel jede Aktivierung in der vorherigen Schicht zum Verlust beiträgt. Mithilfe der Verlustgradienten in Bezug auf die Aktivierungen können wir dann die Verlustgradienten in Bezug auf die Gewichte und Verzerrungen in jeder Schicht berechnen. Diese Gradienten werden durch Multiplikation der Aktivierung der vorherigen Schicht mit dem entsprechenden Gradienten der Aktivierungsfunktion erhalten. Schließlich können wir mit den Gradienten des Verlusts in Bezug auf die Parameter die Gewichte und Verzerrungen mithilfe des Gradientenabstiegsalgorithmus aktualisieren. Indem wir Schritte in die entgegengesetzte Richtung zu den Gradienten unternehmen, optimieren wir schrittweise die Parameter des Netzwerks, um den Verlust zu minimieren.

Dieser iterative Prozess der Vorwärtsausbreitung, Rückwärtsausbreitung und Parameteraktualisierungen wird für eine bestimmte Anzahl von Epochen wiederholt oder bis der Verlust einem zufriedenstellenden Wert entspricht. Durch diesen Trainingsprozess lernt das neuronale Netzwerk, bessere Vorhersagen zu treffen, indem es seine Gewichte und Verzerrungen basierend auf den bereitgestellten Trainingsdaten anpasst.

Neuronale Netze nutzen mehrere Schichten und nichtlineare Aktivierungsfunktionen, um komplexe Berechnungen durchzuführen und Vorhersagen zu treffen. Durch den Einsatz des Backpropagation-Algorithmus und des Gradientenabstiegs können neuronale Netze aus Daten lernen und ihre Parameter optimieren, um ihre Vorhersagefähigkeiten zu verbessern.

Feed-Forward Neural Networks (DL 07)
Feed-Forward Neural Networks (DL 07)
  • 2022.09.16
  • www.youtube.com
Davidson CSC 381: Deep Learning, Fall 2022
 

Backpropagation neuronaler Netze (DL 08)



Backpropagation neuronaler Netze (DL 08)

In diesem Video leiten wir den Backpropagation-Algorithmus ab, der zum Trainieren eines neuronalen Netzwerks durch einen Schritt des stochastischen Gradientenabstiegs verwendet wird. Der Algorithmus besteht aus drei Hauptschritten.

Zuerst führen wir einen Feedforward-Durchlauf durch, um Vorhersagen für einen Datenpunkt zu treffen. Diese Vorhersagen bestimmen den Verlust, der den Fehler zwischen den vorhergesagten Ausgaben und den tatsächlichen Ausgaben darstellt. Als nächstes führen wir einen Rückwärtsdurchlauf durch, um die partiellen Ableitungen des Verlusts zu berechnen. Wir berechnen für jedes Neuron in der Ausgabe- und der verborgenen Schicht eine Größe namens „Delta“. Delta stellt die partielle Ableitung des Verlusts in Bezug auf die gewichtete Summe der Eingaben an diesem Neuron dar. Durch die Anwendung der Kettenregel können wir Delta für jedes Neuron berechnen, indem wir dessen Auswirkung auf den Verlust berücksichtigen.

Um Delta für die Neuronen der Ausgabeschicht zu berechnen, verwenden wir die Ableitung der Aktivierungsfunktion und die Differenz zwischen dem Ziel und der Aktivierung. Diese Berechnung berücksichtigt die Beziehung zwischen dem Verlust und der gewichteten Summe der Inputs. Für Neuronen der verborgenen Schicht berücksichtigen wir deren Auswirkungen auf die Neuronen der nächsten Schicht und berechnen rekursiv das Delta, indem wir die Beiträge der Knoten der nächsten Schicht summieren, multipliziert mit den Gewichten und der Aktivierungsableitung. Nachdem wir die Deltas für alle Neuronen berechnet haben, können wir sie verwenden, um die partiellen Ableitungen der Gewichte und Bias zu berechnen.

Die partielle Ableitung für jedes Gewicht ist das Produkt des entsprechenden Deltas und der Aktivierung des Neurons der vorherigen Schicht. Ebenso ist die partielle Ableitung für jede Abweichung gleich dem entsprechenden Delta.

Um einen Gradientenabstieg durchzuführen, mitteln wir die partiellen Ableitungen über eine Teilmenge der Datenpunkte, die als Batch bezeichnet wird. Dieser Ansatz wird als stochastischer Gradientenabstieg bezeichnet. Indem wir die Gewichte und Bias mit den durchschnittlichen partiellen Ableitungen multipliziert mit einer Lernrate aktualisieren, verschieben wir die Parameter in die Richtung, die den Verlust minimiert.

In der Praxis verwenden wir häufig den stochastischen Gradientenabstieg mit zufälligen Chargen, anstatt die Deltas und partiellen Ableitungen für jeden Datenpunkt zu berechnen. Wir nehmen zufällig Stichproben aus einer Teilmenge der Daten, berechnen den durchschnittlichen Verlust und seinen Gradienten für diese Teilmenge und führen die Parameteraktualisierungen entsprechend durch. Dies beschleunigt den Trainingsprozess, insbesondere bei großen Datensätzen.

Der Backpropagation-Algorithmus kombiniert Vorwärts- und Rückwärtsdurchläufe, um die Deltas und partiellen Ableitungen zu berechnen, die dann für stochastische Gradientenabstiegsaktualisierungen verwendet werden. Durch die iterative Aktualisierung der Parameter lernt das neuronale Netzwerk, den Verlust zu minimieren und seine Vorhersagen zu verbessern.

Neural Network Backpropagation (DL 08)
Neural Network Backpropagation (DL 08)
  • 2022.09.20
  • www.youtube.com
Davidson CSC 381: Deep Learning, Fall 2022Re-upload, because I got sloppy with notation at the end and gave an incorrect formula for the bias update!
 

Bessere Aktivierung und Verlust für die Klassifizierung: Softmax und kategoriale Kreuzentropie (DL 09)



Bessere Aktivierung und Verlust für die Klassifizierung: Softmax und kategoriale Kreuzentropie (DL 09)

Bei der Durchführung einer Mehrklassenklassifizierung mithilfe eines neuronalen Netzwerks mit Sigmoidneuronen treten bestimmte Einschränkungen auf. Bisher konnte ein einzelnes Neuron bei der Verarbeitung von nur zwei Klassen entweder 0 oder 1 ausgeben. Wenn jedoch mehrere Bezeichnungen beteiligt sind, beispielsweise bei der Klassifizierung handgeschriebener Ziffern von 0 bis 9, ist eine andere Darstellung erforderlich.

Ein gängiger Ansatz besteht darin, die Beschriftungen als One-Hot-Vektor zu kodieren, wobei jede Beschriftung ihre eigene Dimension hat und jeweils nur eine Dimension aktiviert ist. Beispielsweise kann ein fünfdimensionaler Vektor fünf mögliche Beschriftungen angeben, wobei Dimension vier aktiviert wird, um die vierte Beschriftung darzustellen. Während eine auf Sigmoid-Neuronen basierende Ausgabeschicht möglicherweise diese Art von Ausgabe erzeugen kann, gibt es praktische Probleme.

Das erste Problem besteht darin, dass die Sigmoidschicht möglicherweise relativ große Werte für mehrere Beschriftungen ausgibt, was die Interpretation der Vorhersage erschwert. Im Idealfall möchten wir, dass die Ausgabeebene Nullen und Einsen oder etwas erzeugt, das das Vertrauen in verschiedene mögliche Bezeichnungen widerspiegelt. Das zweite Problem entsteht beim Training der Sigmoid-Ausgabeschicht. Wenn das Ziel ein One-Hot-Vektor ist, wird der Gradientenabstieg verwendet, um die Aktivierung für die richtige Beschriftung in Richtung Eins und für die anderen Beschriftungen in Richtung Null zu verschieben. Aufgrund der Natur der Sigmoidfunktion können die Neuronen mit größeren Fehlern jedoch kleinere Deltas aufweisen, was es schwierig macht, falsche Vorhersagen zuverlässig zu korrigieren.

Ein ähnliches Problem, bekannt als das Problem des verschwindenden Gradienten, tritt auch auf, wenn Sigmoid-Aktivierungen für versteckte Neuronen verwendet werden. In diesem Video konzentrieren wir uns jedoch auf eine alternative Kombination aus Ausgabeaktivierungen und Verlustfunktion, um diese Probleme anzugehen. Anstelle von Sigmoid-Aktivierungen führen wir Softmax-Aktivierungen für die Ausgabeschicht ein. Softmax-Aktivierungen werden auf der gesamten Ebene berechnet, wobei die Unterschiede zwischen den Eingaben vergrößert und die Aktivierungen normalisiert werden, sodass sie sich auf eins summieren. Dies führt zu Ergebnissen, die besser als Vorhersagen interpretiert werden können und als Vertrauen des Netzwerks in jede mögliche Bezeichnung angesehen werden können.

Um Softmax-Aktivierungen effektiv zu nutzen, kombinieren wir sie mit der kategorialen Kreuzentropieverlustfunktion. Der Kreuzentropieverlust berechnet den negativen Logarithmus der Aktivierung für das Zielneuron, der sich bei Verwendung von One-Hot-Vektoren auf den Logarithmus der Aktivierung vereinfacht. Diese Kombination ermöglicht effektive Aktualisierungen des Gradientenabstiegs. Um die Deltas für die Ausgabeschicht zu berechnen, leiten wir die partiellen Ableitungen des Verlusts in Bezug auf die Aktivierungen ab. Für das Zielneuron beträgt die Ableitung -1 dividiert durch die Aktivierung. Für die anderen Neuronen sind die Ableitungen Null. Aufgrund der gegenseitigen Abhängigkeit von Softmax-Aktivierungen werden für alle Eingaben Deltas ungleich Null erhalten, auch wenn nur das Zielneuron eine Ableitung ungleich Null aufweist.

Mithilfe dieser Formeln können wir die Deltas sowohl für das Zielneuron als auch für die anderen Neuronen in der Ausgabeschicht berechnen. Das Delta für das Zielneuron lässt sich einfach berechnen, da es sich um die Aktivierung minus eins handelt. Die Deltas für die anderen Neuronen vereinfachen sich auf die negative Aktivierung selbst.

Mit dieser Kombination aus Softmax-Aktivierungen und kategorialem Kreuzentropieverlust erzielen wir aussagekräftige Ausgaben für Klassifizierungsprobleme und erhalten Gradienten, die die Ausgaben effizient in Richtung korrekter Vorhersagen treiben. Die Verwendung von Softmax-Aktivierungen und kategorialem Kreuzentropieverlust bietet uns einen leistungsstarken Rahmen für die Klassifizierung mehrerer Klassen. Lassen Sie uns genauer untersuchen, wie diese Komponenten zusammenarbeiten, um ein effektives Training neuronaler Netze zu ermöglichen.

Nachdem wir die Deltas für die Ausgabeschicht berechnet haben, dienen diese Deltas als Ausgangspunkt für die Backpropagation, bei der wir die Fehlergradienten rückwärts durch das Netzwerk verbreiten, um die Gewichte zu aktualisieren. Um die Gewichte zu aktualisieren, die die Ausgabeebene mit der vorherigen Ebene verbinden, können wir die Deltawerte verwenden und den Gradientenabstiegsalgorithmus anwenden. Die Gewichtsaktualisierung wird durch Multiplizieren des Deltas jedes Ausgabeneurons mit der Eingabeaktivierung des entsprechenden Gewichts und Anpassen des Gewichts durch eine Lernrate bestimmt.

Durch die Rückausbreitung der Deltas durch das Netzwerk können auch die Gradienten für die Gewichte in den verborgenen Schichten berechnet werden. Dadurch können wir die Gewichte in den verborgenen Schichten entsprechend aktualisieren und so die Leistung des Netzwerks weiter verbessern. Es ist wichtig zu beachten, dass wir bei der Verwendung von Softmax-Aktivierungen und kategorischem Kreuzentropieverlust sicherstellen müssen, dass Softmax nur auf die Ausgabeebene angewendet wird. Für die verborgenen Schichten empfiehlt es sich, Aktivierungsfunktionen wie ReLU (Rectified Linear Unit) oder tanh zu verwenden. Softmax-Aktivierungen ermöglichen es uns, Ausgaben zu erhalten, die als Wahrscheinlichkeiten oder Konfidenzwerte für jede Klasse interpretiert werden können. Die Werte im Ausgabevektor summieren sich zu 1 und ermöglichen es uns, das Vertrauen des Netzwerks in seine Vorhersagen einzuschätzen. Ein höherer Wert weist auf eine höhere Konfidenz für eine bestimmte Klasse hin.

Der kategoriale Kreuzentropieverlust ergänzt Softmax-Aktivierungen, indem er die Diskrepanz zwischen den vorhergesagten Wahrscheinlichkeiten und den wahren Bezeichnungen effektiv misst. Es ermutigt das Netzwerk, die Differenz zwischen vorhergesagten Wahrscheinlichkeiten und dem One-Hot-codierten Zielvektor zu minimieren, und treibt so das Netzwerk zu genaueren Vorhersagen.

Durch die Kombination von Softmax-Aktivierungen und kategorialem Kreuzentropieverlust erzielen wir mehrere Vorteile. Wir erhalten aussagekräftige und interpretierbare Ergebnisse, die es uns ermöglichen, die Vorhersagen und Konfidenzniveaus des Netzwerks für verschiedene Klassen zu verstehen. Die aus dem kategorialen Kreuzentropieverlust abgeleiteten Gradienten steuern die Gewichtsaktualisierungen auf eine Weise, die zu einem effektiveren Lernen und einer verbesserten Genauigkeit führt. Erwähnenswert ist, dass weitere Aktivierungs- und Verlustfunktionen verfügbar sind, die jeweils für unterschiedliche Arten von Problemen geeignet sind. Softmax-Aktivierungen mit kategorialem Kreuzentropieverlust haben sich jedoch als erfolgreiche Kombination für Klassifizierungsaufgaben mit mehreren Klassen erwiesen und bieten sowohl Interpretierbarkeit als auch effektive Trainingsdynamik.

Zusammenfassend lässt sich sagen, dass die Verwendung von Softmax-Aktivierungen und kategorialem Kreuzentropieverlust in neuronalen Netzen mit mehreren Klassenklassifizierungen es uns ermöglicht, aussagekräftige Vorhersagen zu erhalten, Konfidenzniveaus zu interpretieren und effiziente Gradientenabstiegsaktualisierungen durchzuführen. Diese Kombination spielt eine entscheidende Rolle bei der Erzielung genauer und zuverlässiger Ergebnisse bei verschiedenen Klassifizierungsaufgaben.

Better Activation & Loss for Classification: Softmax & Categorical Crossentropy (DL 09)
Better Activation & Loss for Classification: Softmax & Categorical Crossentropy (DL 09)
  • 2022.09.23
  • www.youtube.com
Davidson CSC 381: Deep Learning, Fall 2022
 

Neuronale Netze mit Vektorisierung schnell machen (DL 10)



Neuronale Netze mit Vektorisierung schnell machen (DL 10)

Um das Innenleben eines neuronalen Netzwerks zu verstehen, ist es hilfreich, sich auf die Ebene eines einzelnen Neurons zu begeben und die Verbindungen zwischen Neuronen zu betrachten. Während des Vorwärtsdurchlaufs, bei dem Aktivierungen berechnet werden, und des Rückwärtsdurchlaufs, bei dem Deltas berechnet werden, kann das Denken in Knoten und Kanten dabei helfen, die Intuition zu entwickeln. Allerdings funktioniert Deep Learning auf diese Weise nicht wirklich. Um groß angelegte neuronale Netze aufzubauen, die effizient trainiert werden können, müssen wir zu einer höheren Abstraktionsebene übergehen und in Vektoren, Matrizen und Tensoren denken.

Der erste Schritt zu dieser höheren Abstraktionsebene besteht darin, die Aktivierungen einer Ebene als Vektor darzustellen. Wenn unser neuronales Netzwerk in Schichten organisiert ist, können wir die Aktivierungen einer Schicht in einem Vektor sammeln. Beispielsweise speichert der Vektor A^l alle Aktivierungen für Schicht l mit so vielen Einträgen, wie es Knoten in dieser Schicht gibt. Ebenso können wir die Deltas für eine Ebene während der Backpropagation in einem Vektor sammeln. Wir können auch Vektoren verwenden, um die Voreingenommenheiten oder Eingaben einer Ebene darzustellen.

Um die Berechnungen in dieser vektorisierten Notation auszudrücken, betrachten wir zunächst, wie ein Knoten seine gewichtete Summe der Eingaben berechnet. Die Eingabe X^5, die in die Aktivierungsfunktion für Knoten 5 eingeht, wird als gewichtete Summe der Aktivierungen der vorherigen Schicht zuzüglich einer Abweichung berechnet. Indem die Aktivierungen der vorherigen Schicht im Vektor A^K gesammelt werden und ein Vektor von Gewichtungen in Knoten 5 eingeht, kann die gewichtete Summe der Eingaben als Skalarprodukt zwischen diesen beiden Vektoren dargestellt werden. Eine andere Möglichkeit, das Skalarprodukt zu schreiben, besteht darin, den ersten Vektor zu transponieren und eine Matrixmultiplikation zwischen dem Zeilenvektor und dem Spaltenvektor durchzuführen. Daher können wir die Eingabe in Knoten 5 als den in Knoten 5 eingehenden Gewichtsvektor (transponiert) multipliziert mit dem Aktivierungsvektor für die vorherige Schicht plus der Vorspannung von Knoten 5 ausdrücken.

Diese vektorisierte Notation kann noch weiter gehen und es uns ermöglichen, den gesamten Vektor der Eingaben für Schicht l auf einmal zu berechnen. Indem wir den Zeilenvektor der Gewichte für Knoten 5 mit den Zeilenvektoren der Gewichte für andere Neuronen in dieser Schicht kombinieren, erhalten wir eine Matrix, die alle Gewichte von Schicht K bis Schicht l enthält. Diese Gewichtsmatrix hat so viele Zeilen, wie es Knoten in Schicht l gibt (jede Zeile stellt einen Vektor von Gewichten in einem der Neuronen der Schicht l dar) und so viele Spalten, wie es Knoten in der vorherigen Schicht K gibt (jede Spalte stellt einen Vektor von dar). Gewichte, die von einem der Schicht-K-Knoten kommen). Die Multiplikation dieser Gewichtsmatrix mit dem Aktivierungsvektor für Schicht K ergibt einen Vektor, in dem jedes Element die gewichtete Summe der Eingaben für einen der Knoten der Schicht l darstellt. Um die Eingaben der Aktivierungsfunktion zu erhalten, fügen wir diesem Vektor die Bias hinzu, die in einem Vektor gesammelt wurden.

Mithilfe der Matrix-Vektor-Multiplikation, der Vektoraddition und elementweiser Funktionen können wir nun die Operationen zum Berechnen aller Eingaben für eine Ebene ausdrücken. Früher waren für diese Berechnungen verschachtelte Schleifen erforderlich, jetzt können wir sie effizient und vektorisiert durchführen.

In Zukunft können wir diesen vektorisierten Ansatz auch auf den Rückwärtsdurchlauf erweitern. Anstatt jeweils ein Neuron zu berücksichtigen, können wir das Delta für einen Knoten in Schicht K als gewichtete Summe aller Deltas auf der nächsten Schicht multipliziert mit der Ableitung der Aktivierungsfunktion dieses Knotens berechnen. Auch hier können wir diese gewichtete Summe als Skalarprodukt ausdrücken. Indem wir einen Zeilenvektor mit Gewichten, die von Knoten 3 kommen, mit dem Delta-Vektor für Schicht l multiplizieren und dann mit der Aktivierungsableitung multiplizieren, können wir den Delta-Vektor für Schicht K berechnen. Mithilfe einer Gewichtsmatrix, die alle Gewichte für Schicht sammelt l Neuronen und multipliziert es mit dem Delta-Vektor für Schicht l, können wir eine Matrix erhalten, deren Abmessungen mit der Gewichtsmatrix übereinstimmen.

Durch die Nutzung von Matrixoperationen können wir erhebliche Leistungssteigerungen bei der Berechnung dicht verbundener neuronaler Feed-Forward-Netzwerke erzielen. Dies ist besonders vorteilhaft, da Matrixoperationen effizient auf spezieller Hardware wie Grafikprozessoren (GPUs) ausgeführt werden können, was diese Berechnungen erheblich beschleunigen kann.

Wenn wir unsere neuronalen Netzwerkberechnungen mithilfe von Matrizen darstellen, können wir den Vorwärtsdurchlauf, den Rückwärtsdurchlauf und die Gewichtsaktualisierungen auf hocheffiziente und parallelisierte Weise durchführen. Fassen wir noch einmal die wichtigsten Schritte zusammen:

  1. Vorwärtsdurchlauf: Wir können die Aktivierungen jeder Schicht für einen gesamten Datenstapel berechnen, indem wir eine Matrix-Vektor-Multiplikation und eine elementweise Aktivierungsfunktionsanwendung durchführen. Durch die Organisation der Aktivierungen in einer Matrix, in der jede Spalte die Aktivierungen für einen anderen Datenpunkt darstellt, können wir die Aktivierungen für den gesamten Stapel effizient berechnen.

  2. Rückwärtsdurchlauf: Ebenso können wir die Deltas (Fehlergradienten) für jede Schicht vektorisiert berechnen. Indem wir die Deltas als Matrix darstellen, wobei jede Spalte den Deltas für einen bestimmten Datenpunkt entspricht, können wir eine Matrix-Vektor-Multiplikation und eine elementweise Multiplikation mit Aktivierungsableitungen durchführen, um die Deltas für die gesamte Charge effizient zu berechnen.

  3. Gewichtsaktualisierungen: Um die Gewichte und Bias zu aktualisieren, können wir Matrixoperationen verwenden, um das Skalarprodukt zwischen der Delta-Matrix und der Transponierten der Gewichtsmatrix zu berechnen. Diese Operation ergibt eine Matrix von Gewichtsaktualisierungen, wobei jeder Eintrag die Aktualisierung für ein bestimmtes Gewicht darstellt. Indem wir die Skalarprodukte durch die Stapelgröße dividieren, erhalten wir die durchschnittliche Aktualisierung und können dann die Gewichte aktualisieren, indem wir die Lernrate multipliziert mit der durchschnittlichen Aktualisierung subtrahieren. Die Bias-Aktualisierungen werden berechnet, indem der Durchschnitt der Delta-Vektoren über die Spalten hinweg genommen und die mit dem Durchschnitt multiplizierte Lernrate von den Bias subtrahiert wird.

Durch die Vektorisierung dieser Berechnungen und die Nutzung von Matrixoperationen können wir eine erhebliche Recheneffizienz erreichen und die Vorteile der Hardwarebeschleunigung für die Parallelverarbeitung nutzen. Dieser Ansatz ermöglicht es uns, große neuronale Netze effizient zu trainieren und Deep Learning für eine Vielzahl von Aufgaben und Datensätzen möglich zu machen.

Es ist erwähnenswert, dass der Text zwar einen allgemeinen Überblick über die Vektorisierung und Nutzung von Matrixoperationen bietet, die tatsächlichen Implementierungsdetails jedoch je nach verwendeter Programmiersprache oder verwendetem Framework variieren können. Verschiedene Sprachen und Frameworks verfügen möglicherweise über eigene optimierte Funktionen und Bibliotheken für Matrixoperationen, wodurch die Leistung weiter verbessert wird.

Zusätzlich zu den Leistungsvorteilen bietet die Nutzung von Matrixoperationen beim Deep Learning weitere Vorteile:

  1. Einfachheit und Lesbarkeit des Codes: Durch die Verwendung von Matrixoperationen wird der Code für neuronale Netzwerkberechnungen prägnanter und leichter verständlich. Anstatt explizite Schleifen für einzelne Datenpunkte zu schreiben, können wir die Berechnungen mithilfe von Matrixoperationen in einer kompakteren und intuitiveren Form ausdrücken.

  2. Softwarekompatibilität: Viele gängige Deep-Learning-Frameworks und -Bibliotheken wie TensorFlow und PyTorch bieten effiziente Implementierungen von Matrixoperationen. Diese Frameworks nutzen häufig optimierte lineare Algebra-Bibliotheken wie BLAS (Basic Linear Algebra Subprograms) oder cuBLAS (CUDA Basic Linear Algebra Subprograms), um Matrixberechnungen auf CPUs oder GPUs zu beschleunigen. Durch die Nutzung dieser Frameworks können wir von ihren optimierten Implementierungen profitieren und die Kompatibilität mit anderen Komponenten der Deep-Learning-Pipeline sicherstellen.

  3. Verallgemeinerung auf andere Schichttypen: Matrixoperationen können nicht nur auf dicht verbundene Schichten angewendet werden, sondern auch auf andere Schichttypen, beispielsweise Faltungsschichten und wiederkehrende Schichten. Indem wir die Berechnungen in Matrixform ausdrücken, können wir dieselben effizienten Matrixoperationen und Optimierungen über verschiedene Schichttypen hinweg nutzen, wodurch die Implementierung vereinfacht und die Gesamtleistung verbessert wird.

  4. Integration mit Hardwarebeschleunigung: Spezielle Hardware wie GPUs oder Tensor-Processing-Units (TPUs) sollen Matrixberechnungen beschleunigen. Diese Hardwarebeschleuniger zeichnen sich durch die Durchführung umfangreicher paralleler Matrixoperationen aus und eignen sich daher ideal für Deep-Learning-Workloads. Durch den Einsatz von Matrixoperationen können wir diese Hardwarebeschleuniger nahtlos integrieren und ihre Fähigkeiten voll ausnutzen, was zu erheblichen Beschleunigungen der Trainings- und Inferenzzeiten führt.

Zusammenfassend lässt sich sagen, dass die Nutzung von Matrixoperationen beim Deep Learning Leistungsvorteile, Einfachheit des Codes, Softwarekompatibilität und Integration mit Hardwarebeschleunigern bietet. Indem wir neuronale Netzwerkberechnungen in Matrixform ausdrücken und optimierte Matrixoperationen nutzen, können wir Deep-Learning-Modelle effizient trainieren und für eine Vielzahl von Aufgaben und Plattformen einsetzen.

Making Neural Networks Fast with Vectorization (DL 10)
Making Neural Networks Fast with Vectorization (DL 10)
  • 2022.09.23
  • www.youtube.com
Davidson CSC 381: Deep Learning, Fall 2022
 

Verschwindende (oder explodierende) Farbverläufe (DL 11)



Verschwindende (oder explodierende) Farbverläufe (DL 11)

Während wir uns mit der Skalierung neuronaler Netze zur Lösung größerer Probleme befassen, wird das Hinzufügen weiterer Schichten notwendig. Allerdings können in tieferen Netzwerken während des Trainings Probleme auftreten, die durch verschwindende oder explodierende Gradienten verursacht werden. Betrachten wir ein tiefes neuronales Netzwerk mit Sigmoid-Aktivierungen für die verborgenen Schichten. Die Visualisierung eines solchen Netzwerks mit zahlreichen Knoten und Schichten wird unpraktisch. Stattdessen können wir es mit einem Blockdiagramm darstellen, in dem jede Spalte eine Ebene darstellt und in jedem Block Aktivierungsfunktionen angegeben sind.

Eine andere Möglichkeit, das Netzwerk zu visualisieren, ist ein Rechendiagramm, das die Abfolge der auf jeden Datenstapel angewendeten Vorgänge zeigt. Beginnend mit Eingabematrizen führen wir Matrixmultiplikationen durch, addieren Bias und wenden Aktivierungsfunktionen auf jeder Ebene an. Dieser Prozess wird durch die verborgenen Schichten fortgesetzt, bis wir die Ausgabeschicht erreichen, wo sich die Aktivierungsfunktion in Softmax ändert. Der Verlust wird aus den Aktivierungen und Zielen berechnet.

Um die Berechnungen mathematisch auszudrücken, multiplizieren wir Gewichtsmatrizen mit Eingabematrizen, fügen Bias hinzu und wenden Aktivierungsfunktionen an. Die Ausdrücke werden über die verborgenen Ebenen fortgesetzt und erreichen schließlich die Ausgabeebene, auf der die Softmax-Aktivierung angewendet wird. Die Ausgabeaktivierungen und -ziele werden zur Berechnung des Verlusts verwendet.

Bei der Berechnung von Ableitungen für Gradientenabstiegsaktualisierungen wird die Kettenregel wiederholt angewendet. Ausgehend von der Ausgabeschicht berechnen wir Deltas durch Multiplikation mit der Transponierten von Gewichtsmatrizen und elementweiser Multiplikation mit der Ableitung der Aktivierungsfunktion. Dieser Prozess breitet Deltas rückwärts durch die verborgenen Schichten aus.

Das Problem des verschwindenden Gradienten tritt auf, wenn Sigmoid-Aktivierungsfunktionen für verborgene Schichten verwendet werden. Die Ableitung eines Sigmoids neigt dazu, kleine Werte zu haben, was dazu führt, dass Deltas mit jeder Rückwärtsausbreitung kleiner werden. Dadurch werden die Farbverläufe immer kleiner, was es insbesondere in den frühen Schichten schwierig macht, die Gewichte effektiv zu aktualisieren.

Deep Learning hatte aufgrund des Problems des verschwindenden Gradienten Schwierigkeiten beim Training tiefer neuronaler Netze. Vor etwa einem Jahrzehnt wurden jedoch Ansätze entwickelt, um diese Herausforderung zu bewältigen. Eine Methode besteht darin, die Initialisierung der Gewichtsmatrix zu ändern und größere anfängliche Zufallsgewichte zu generieren, um den durch Sigmoid-Derivate verursachten abnehmenden Deltas entgegenzuwirken.

Der bedeutendste Durchbruch gelang mit der Einführung von Gleichrichter-Lineareinheiten (ReLU) als Aktivierungsfunktionen. Im Gegensatz zu Sigmoid-Derivaten neigen ReLU-Derivate dazu, Deltas nicht wesentlich zu reduzieren. Diese Eigenschaft machte ReLU-Aktivierungen beliebter, da sie das Training tiefer neuronaler Netze erleichterten.

Die Verwendung von ReLU-Aktivierungen birgt jedoch das Risiko explodierender Gradienten, bei denen Deltas bei der Rückwärtsausbreitung größer werden können. Um dies zu mildern, empfiehlt es sich, im Vergleich zu Sigmoidaktivierungen kleinere Anfangsgewichte zu wählen.

ReLU-Neuronen werden aufgrund ihrer einfachen Schulung und Recheneffizienz für versteckte Schichten bevorzugt. Die Initialisierung von Gewichten hängt von der verwendeten Aktivierungsfunktion ab, und die Deep-Learning-Community hat erhebliche Fortschritte bei der Bestimmung geeigneter Methoden zur Gewichtsinitialisierung für verschiedene Aktivierungstypen gemacht. Moderne Deep-Learning-Bibliotheken führen die Gewichtsinitialisierung häufig automatisch basierend auf den angegebenen Aktivierungen durch.

Vanishing (or Exploding) Gradients (DL 11)
Vanishing (or Exploding) Gradients (DL 11)
  • 2022.09.30
  • www.youtube.com
Davidson CSC 381: Deep Learning, Fall 2022
 

Vermeidung einer Überanpassung neuronaler Netze (DL 12)



Vermeidung einer Überanpassung neuronaler Netze (DL 12)

Da wir für Deep Learning mit größeren neuronalen Netzen arbeiten, steigt das Risiko einer Überanpassung erheblich. Es ist von entscheidender Bedeutung, die Ursachen der Überanpassung zu verstehen und zu wissen, wie man sie erkennt und verhindert. Überanpassung tritt auf, wenn ein Modell für maschinelles Lernen zu spezifisch für den Trainingssatz wird und nicht auf neue Daten verallgemeinert werden kann. Die Hauptursache liegt darin, dass ein Modell im Vergleich zur Menge an Trainingsdaten über eine übermäßige Parameterfreiheit verfügt, wodurch Modelle mit hohen Freiheitsgraden oder kleinen Trainingssätzen anfälliger werden.

Bei der polynomialen Regression beispielsweise bietet die Erhöhung des Grades des Polynoms mehr Parameter zur Feinabstimmung, sodass das Modell die Trainingsdaten genauer anpassen kann. Dies kann jedoch die Fähigkeit zur Verallgemeinerung auf Beispiele außerhalb des Trainingssatzes beeinträchtigen.

Im Kontext neuronaler Netze dienen die Gewichte und Bias als Parameter. Da neuronale Netze mit zunehmender Gewichtung größer werden, haben sie eine größere Freiheit bei der Wahl ihrer Parameter. Daher ist es beim Training eines großen neuronalen Netzwerks wichtig, auf eine mögliche Überanpassung zu achten, wobei die primäre Methode zur Identifizierung die Überwachung des Validierungssatzes ist.

Die Aufteilung des Datensatzes in Trainings-, Validierungs- und Testsätze hilft bei der Beurteilung der Generalisierung des Netzwerks. Wenn eine Überanpassung auftritt, gibt es eine deutliche Diskrepanz im Verlust oder in der Genauigkeit zwischen dem Trainingssatz und dem Validierungssatz. Im Idealfall sollte der Verlust des Trainingssatzes im Laufe der Epochen abnehmen. Wenn er jedoch zunimmt, deutet dies auf ein Problem hin. Ebenso sollte der Validierungssatzverlust im Einklang mit dem Trainingssatzverlust abnehmen. Wenn er zuzunehmen beginnt, während der Trainingssatzverlust weiter abnimmt, deutet dies auf eine starke Überanpassung hin. Die Genauigkeit des Modells in beiden Sätzen kann auch eine Überanpassung bei Klassifizierungsproblemen aufdecken.

Ein Ansatz zur Bekämpfung der Überanpassung besteht darin, die Ursachen direkt anzugehen. Unzureichende Daten können durch die Erfassung weiterer Daten gemildert werden, wie dies bei groß angelegten Deep-Learning-Erfolgen unter Verwendung riesiger Datensätze der Fall ist. Wenn es jedoch nicht möglich ist, mehr Daten zu erhalten, kann eine Verkleinerung des Modells dazu beitragen, eine Überanpassung zu bekämpfen und die Effizienz zu verbessern. Die allgemeine Richtlinie besteht darin, eine neuronale Netzwerkarchitektur zu wählen, die für das spezifische Problem ausreichend dimensioniert ist.

Wenn die Bedenken bezüglich der Überanpassung weiterhin bestehen, sollten fortgeschrittene Techniken in Betracht gezogen werden. Eine dieser Techniken ist das frühe Stoppen, bei dem das Training angehalten wird, wenn eine Trennung zwischen den Trainings- und Validierungssätzen beobachtet wird, noch bevor die maximale Anzahl von Epochen erreicht ist. Darüber hinaus können Methoden wie Dropout und Gewichtsregulierung eingesetzt werden, um eine Überanpassung zu verhindern.

Beim Dropout werden einige Aktivierungen im Netzwerk während des Trainings zufällig auf Null gesetzt, um zu verhindern, dass bestimmte Neuronen übermäßige Auswirkungen haben. Durch das Weglassen von Neuronen werden nachfolgende Schichten des Netzwerks gezwungen, Funktionen zu erlernen, die nicht übermäßig auf diese Neuronen angewiesen sind, wodurch eine Überanpassung reduziert wird. Während des Tests werden Anpassungen vorgenommen, um das Fehlen von Dropout zu berücksichtigen.

Die Gewichtsregulierung bekämpft eine Überanpassung, indem sie verhindert, dass die Gewichte zu groß werden. Dies wird erreicht, indem ein Strafterm in die Verlustfunktion integriert wird, der große Gewichte verhindert. Eine übliche Form der Gewichtsregulierung ist die L2-Regularisierung, bei der die Summe der Quadrate aller Gewichte als quadratischer Strafterm hinzugefügt wird. Dieser durch einen Hyperparameter gesteuerte Regularisierungsterm gleicht die Betonung der Regularisierung gegenüber der ursprünglichen Verlustfunktion aus.

Beim Training neuronaler Netze ist es wichtig, auf Überanpassung zu achten. Berücksichtigen Sie die Größe des Modells und die verfügbaren Daten und wenden Sie bei Bedarf Techniken wie frühes Stoppen, Dropout und Regularisierung an, um einer Überanpassung entgegenzuwirken.

Avoiding Neural Network Overfitting (DL 12)
Avoiding Neural Network Overfitting (DL 12)
  • 2022.10.01
  • www.youtube.com
Davidson CSC 381: Deep Learning, Fall 2022
 

Faltungsschichten (DL 13)



Faltungsschichten (DL 13)

Die bisher betrachteten neuronalen Netze waren dicht miteinander verbunden, wobei jede Schicht mit der nächsten Schicht verbunden war. Dichte Netzwerke sind ein guter Ausgangspunkt, da sie allgemein und vielseitig sind. Für bestimmte Anwendungen können wir jedoch alternative Architekturen wählen, die effektiver sind. In diesem Video erkunden wir die erste alternative Architektur namens Faltungsschichten.

Faltungsnetzwerke eignen sich gut für Bildverarbeitungsaufgaben. Anstatt das Eingabebild als flachen Vektor zu behandeln, bewahren Faltungsschichten die räumlichen Informationen des Bildes. Jedes Neuron in einer Faltungsschicht ist nur mit einem kleinen Bereich des Bildes verbunden und erfasst so die räumliche Nähe von Pixeln. Durch die Verwendung dieser Architektur erhält das Netzwerk einen Vorteil beim Erlernen von Bildverarbeitungsaufgaben.

Faltungsschichten haben zwei Schlüsselideen: lokale Konnektivität und Gewichtsbindung. Lokale Konnektivität bedeutet, dass Neuronen mit einem kleinen Teilbereich des Bildes verbunden sind und so bestimmte Merkmale erlernen können. Durch die Gewichtsbindung wird sichergestellt, dass dieselbe Funktion auf verschiedene Bereiche des Bildes angewendet wird. Durch die gemeinsame Gewichtung kann das Netzwerk lernen, dieselbe Funktion in mehreren Regionen anzuwenden.

Faltungsschichten führen neue zu berücksichtigende Hyperparameter ein. Dazu gehören die Kernelgröße (Bestimmung der Unterregionsgröße), die Schrittweite (wie weit das Fenster gleitet), die Anzahl der Ausgabekanäle (Anzahl der auf jedes Fenster angewendeten Funktionen), das Padding (Verarbeitung von Bildkanten) und das Pooling (Aggregation von Neuronenergebnissen). um die Dimensionalität zu reduzieren).

Das Pooling trägt dazu bei, die Anzahl der Parameter im Netzwerk zu reduzieren, indem es die Ergebnisse von Neuronen in einer Region aggregiert. Dies kann durch Mittelwertbildung oder Maximalwertbildung erfolgen. Das Pooling ist nützlich, wenn wir keine genaue Lokalisierung von Features benötigen, sondern vielmehr die Gesamtpräsenz von Features in einer Region.

Faltungsnetzwerke bieten im Vergleich zu dichten Netzwerken eine effizientere Möglichkeit, Bilder zu verarbeiten. Sie nutzen die räumlichen Informationen und reduzieren die Anzahl der Parameter, wodurch sie einfacher zu trainieren sind.

Durch das Pooling können die Dimensionalität der Feature-Maps und die Anzahl der Parameter in den nachfolgenden Schichten reduziert werden. Durch die Aggregation der Ergebnisse benachbarter Neuronen bleiben beim Pooling die wichtigsten Informationen erhalten, während einige räumliche Details verworfen werden.

Es gibt verschiedene Arten von Pooling-Vorgängen, z. B. maximales Pooling und durchschnittliches Pooling. Beim Max-Pooling wird der Maximalwert innerhalb jedes Pooling-Fensters als repräsentativer Wert für diese Region ausgewählt. Dies hilft dabei, die hervorstechendsten Merkmale im Fenster zu erfassen. Beim durchschnittlichen Pooling hingegen wird der Durchschnittswert des Fensters verwendet, was eine glattere Darstellung der Merkmale ermöglicht.

Nach dem Pooling können wir weitere Faltungsschichten weiter stapeln, um komplexere und abstraktere Merkmale aus der Ausgabe der vorherigen Schicht zu lernen. Jede nachfolgende Schicht erfasst Merkmale höherer Ebene, indem sie die Informationen aus mehreren kleineren Empfangsfeldern kombiniert.

Zusammenfassend lässt sich sagen, dass Faltungs-Neuronale Netze (CNNs) mit Faltungs- und Pooling-Schichten gut für Bildverarbeitungsaufgaben geeignet sind. Die Faltungsschichten erfassen räumliche Nähe und nutzen die Gewichtsverteilung, sodass das Netzwerk lokale Merkmale effizient lernen kann. Durch das Pooling wird die Dimensionalität reduziert und wichtige Informationen extrahiert, sodass nachfolgende Schichten abstraktere Darstellungen lernen können. Dieses hierarchische Merkmalslernen macht CNNs leistungsstark für verschiedene Computer-Vision-Anwendungen, einschließlich Bildklassifizierung, Objekterkennung und Bildsegmentierung.

Convolutional Layers (DL 13)
Convolutional Layers (DL 13)
  • 2022.10.15
  • www.youtube.com
Davidson CSC 381: Deep Learning, Fall 2022