Künstliche Intelligenz und neuronale Netze sind Teil eines der interessantesten Themengebiete der modernen Informatik. Jene sind allerdings recht komplex und vor allem im Detail nicht sehr leicht verständlich. In dieser Facharbeit werden künstliche neuronale Netze von Grund auf modelliert und in Python implementiert. Mit diesem Bottom-Up-Ansatz soll das Konzept und die konkrete Funktionsweise jener Strukturen verständlich werden.
Hierbei wird das Konzept eines künstlichen neuronalen Netzwerks erklärt. Zuerst werden die mathematischen Grundlagen erarbeitet und optimiert. Danach werden Feedforward-Netzwerke in Python selbstständig Schritt für Schritt implementiert und mithilfe des Backpropagation-Algorithmus auf 60000 Abbildungen handschriftlich gezeichneter Ziffern trainiert. Es werden hierbei verschiedene Netzwerkstrukturen analysiert. Mit der Bibliothek TensorFlow werden ebenfalls ähnliche Netze erstellt und mit der eigenen Implementierung verglichen.
Diverse Probleme wie Overfitting und Underfitting werden erläutert und diskutiert.Mithilfe eines Programmes wird die Klassifizierung eigener Zeichnungen ermöglicht und demonstriert. Es wird festgestellt, dass es für jedes Problem eine optimale Netzstruktur geben muss, und dass ein komplexeres Netz nicht zwingend mit einer höheren Genauigkeit verbunden sein muss. Die eigene Implementierung unterscheidet sich von der modernen Bibliothek hauptsächlich im Kriterium Geschwindigkeit (Zeitkosten).
Inhaltsverzeichnis
1 Motivation und Schwerpunkt
1.1 Motivation
1.2 Schwerpunkt und Ergebnis
2 Theoretischer Teil
2.1 Was ist ein neuronales Netz?
2.1.1 Neuronen
2.2 Künstliche neuronale Netze
2.2.1 Künstliche Neuronen
2.2.2 Neuronenschichten
2.2.3 Feedforward
2.2.4 Backpropagation
2.2.5 Vorstellung der Bibliothek TensorFlow
2.3 Anwendungsbeispiel Handschrifterkennung
2.4 Erwartungen
3 Praktischer Teil
3.1 Implementierung
3.1.1 Grundlegende Klassenstrukturen
3.1.2 Feedforward-Algorithmus
3.1.3 Backpropagation-Algorithmus
3.2 Analyse
3.2.1 Verschiedene Netzstrukturen
3.3 Verarbeitung selbstständig erstellter Daten (/Zeichnungen)
4 Ergebnisse
4.1 Rechnereigenschaften
4.2 Genauigkeitsverlauf
4.3 Vergleich mit TensorFlow
5 Diskussion
5.1 Differenzen zwischen den Strukturen
5.2 Differenzen zwischen eigenem Netz und TensorFlow-Netz
5.3 Fazit
6 Ausblick
Zielsetzung und Themen
Das Hauptziel dieser Arbeit ist die eigenständige Modellierung und Implementierung eines künstlichen neuronalen Netzwerks (knN) zur Klassifikation handschriftlich gezeichneter Ziffern. Die Forschungsfrage untersucht dabei sowohl die theoretischen Grundlagen als auch die praktische Leistungsfähigkeit verschiedener Netzstrukturen im Vergleich zu einer etablierten Bibliothek wie TensorFlow unter Berücksichtigung von Genauigkeit und Zeitaufwand.
- Konzept und Funktionsweise künstlicher neuronaler Netze
- Implementierung von Feedforward- und Backpropagation-Algorithmen in Python
- Vergleich verschiedener Netzarchitekturen hinsichtlich Lernraten und Genauigkeit
- Benchmarking der eigenen Implementierung gegenüber TensorFlow
- Praktische Erprobung des Netzes mittels einer grafischen Benutzeroberfläche zur Ziffernerkennung
Auszug aus dem Buch
2.2.1 Künstliche Neuronen
Künstliche Neuronen sollen ähnlich funktionieren wie ihre biologischen Vorbilder. Die Aufnahme von Impulsen/Signalen wird durch Verbindungen mithilfe von Synapsen realisiert. Eine Synapse verbindet hierbei genau zwei Neuronen miteinander. Jedes Neuron erhält also über Synapsen Werte von anderen Neuronen übergeben. Diese Werte können im reellen, binären oder bipolaren Bereich liegen. Die Synapsen besitzen hierbei ein Gewicht, welches die übertragenen Werte erniedrigt oder erhöht. Die Gewichte können im selben Definitionsbereich liegen, in der Regel werden aber reelle Zahlen aus dem Intervall [-1;1] verwendet. Um zu verhindern, dass Neuronen mit dem Wert 0 passiv werden, erhält jedes Neuron ein sogenanntes Bias, welches zum gewichteten Wert addiert wird. Auch hierfür wird meist eine reelle Zahl aus dem Intervall [-1;1] gewählt. Der Wert, den ein Neuron nach Verarbeitung der Inputs besitzt, wird Aktivierung genannt. Jene wird berechnet, indem der gewichtete Wert durch eine Aktivierungsfunktion Φ verarbeitet wird.
Zusammenfassung der Kapitel
1 Motivation und Schwerpunkt: Einführung in das Themengebiet des Machine Learnings und Darlegung der Zielsetzung, ein eigenes neuronales Netz zur Handschrifterkennung zu implementieren.
2 Theoretischer Teil: Vermittlung der wissenschaftlichen Grundlagen zu neuronalen Netzen, einschließlich der Funktionsweise von Neuronen, Schichten, sowie den Algorithmen Feedforward und Backpropagation.
3 Praktischer Teil: Detaillierte Beschreibung der eigenen Implementierung der Klassenstrukturen, Algorithmen und der methodischen Analyse verschiedener Netzkonfigurationen.
4 Ergebnisse: Präsentation der erzielten Genauigkeitswerte und Vergleich der Leistung zwischen dem selbst entwickelten Netz und der TensorFlow-Bibliothek.
5 Diskussion: Analyse der Unterschiede in den Netzstrukturen, der Einfluss von Lernraten sowie die Auswertung der Effizienz-Differenzen im Vergleich zu TensorFlow.
6 Ausblick: Reflexion der Ergebnisse und Diskussion potenzieller Erweiterungen durch modernere Netzarchitekturen wie rekurrente oder gefaltete Netze.
Schlüsselwörter
Künstliche neuronale Netze, knN, Handschrifterkennung, Feedforward, Backpropagation, Machine Learning, TensorFlow, Python, Gradientverfahren, Netzstruktur, Aktivierungsfunktion, Klassifikation, MNIST, Datensätze, Genauigkeit.
Häufig gestellte Fragen
Worum geht es in dieser Arbeit grundsätzlich?
Die Arbeit befasst sich mit der Entwicklung und Analyse künstlicher neuronaler Netze zur Klassifizierung handschriftlicher Ziffern sowie dem Vergleich einer Eigenimplementierung mit modernen Industriestandards.
Welche zentralen Themenfelder werden behandelt?
Die zentralen Felder umfassen die theoretische Architektur neuronaler Netze, die mathematische Umsetzung von Lernalgorithmen, die programmtechnische Realisierung in Python und die empirische Evaluierung der Performance.
Was ist das primäre Ziel oder die Forschungsfrage?
Das Hauptziel ist es, ein funktionsfähiges knN selbst zu programmieren, dessen Genauigkeit zu optimieren und herauszufinden, wie sich verschiedene Netzwerkstrukturen und Lernraten auf die Klassifikationsleistung auswirken.
Welche wissenschaftliche Methode wurde verwendet?
Es wurde ein empirisch-analytischer Ansatz gewählt, bei dem verschiedene Netzarchitekturen auf dem MNIST-Datensatz trainiert, ihre Genauigkeit gemessen und ihre Effizienz (Zeitkosten) quantitativ ausgewertet wurde.
Was wird im Hauptteil behandelt?
Der Hauptteil deckt die technische Implementierung, die mathematische Herleitung der Gradientenberechnung für die Backpropagation sowie die systematische Analyse verschiedener Schichtenkonfigurationen ab.
Welche Schlüsselwörter charakterisieren die Arbeit?
Wichtige Begriffe sind Machine Learning, Feedforward, Backpropagation, TensorFlow, MNIST, neuronale Netze, Lernrate und Klassifikationsgenauigkeit.
Wie groß war die erreichte Genauigkeit des eigenen Netzes?
Das eigene Netz erreichte nach dem Training mit 60.000 Bildern eine Klassifikationsgenauigkeit von ca. 95,16 % bei unbekannten Datensätzen.
Warum unterscheidet sich die Geschwindigkeit der eigenen Lösung von TensorFlow?
Der Geschwindigkeitsunterschied ist maßgeblich auf die Art der Implementierung zurückzuführen, da TensorFlow auf hochoptimierte Funktionen und native Bibliotheken zugreift, die weitaus effizienter arbeiten als eine grundlegende Python-Schleifen-Implementierung.
- Quote paper
- Anonym (Author), 2019, Modellierung, Implementierung und Strukturvergleich eigener neuronaler Netze zur Handschrifterkennung und Vergleich mit modernen Bibliotheken, Munich, GRIN Verlag, https://www.grin.com/document/900934