Benutzer:ThePacker/ MachineLearning

Aus Wikibooks
Zur Navigation springen Zur Suche springen

Outline[Bearbeiten]

  • Machine-Learning (Part I)
  • Einführung Machine Learning
    • Neuronen
      • Funktionen (Sigmoid, Tanh, Relu)
    • Neuronale Netze (Layer Architektur, Input-Layer, Hidden-Layer, Output-Layer)
    • Training von Neuronalen Netzen
      • Loss-Function etc.
      • Supervised Learning / Reinforcement Learning / Semi-Supervised Learning / Unsupervised Learning
      • Backpropagation
  • Techniken für Robuste Erkennung
    • Dropout und Probleme die mit dropout verbunden sind. (Gewichtungen stimmen nicht mehr danach)


  • Machine-Learning (Part II)
  • Einführung in DNN (Deep Neuronal Networks / Deep neural networks)
    • Einführung in CNN (Convolutional Neuronal networks / convolutional neural networks)
    • Einführung in RNN (Recurrent Neuronal Networks / recurrent neural networks)
      • Einführung in LSTM (Long Short-Term Memory)


  • Machine-Learning (Part III)
    • Die wirklich coolen Sachen...
    • Deep Neuronal Networks - Netzwerk Architekturen
    • Attention und Segmentieurung, Objekterkennung
    • GAN - Generative Adversarial Networks
    • MT - Machine Translation
    • Kombinationen aus LSTM und CNN - Image Captioning
    • Spracherkennung / Information Retrieval


  • Appendix
    • Installation und Setup Python-Stack
    • Installation und Setup TensorFlow

Part Zero[Bearbeiten]

  • Part Zero, ist noch ziemlich unsortiert und enthält nur einige Grundideen.
  • Alles in Allem ist Part Zero die Motivation, warum man Machine Learning einsetzen muss
Ein neues Zeitalter
  • Im Jahre 2012 zeigte ein Forscher mit seiner Arbeit, dass Maschinen sehen können und wie man tiefe neuronale Netzwerke mit Hilfe von Grafikkarten trainieren kann und eröffnete so ein neues Zeitalter der Forschung und Anwendung rund um die Künstliche Intelligenz, Deep Learning und dem Machine Learning
  • Danach erfolgte im Prinzip ein Dammbruch
  • Wir erleben aktuell, wie jeden Tag neue Forschungsergebnisse präsentiert werden, und wie jeden Tag mit vergleichsweise einfachen Ideen bessere Ergebnisse erzielt werden. (in meinem Worten viele Low hanging Fruits)
  • Jeden Tag werden neue Werkzeuge und Software-Development-Kits veröffentlicht, die die Arbeit mit neuronalen Netzwerken vereinfachen oder sie visualisieren
  • Seit dem sind Hersteller von leistungsfähigen Grafikkarten auf diesen Zug aufgesprungen, weil es (durch das Machine Learning nun) einen neuen massenhaften Hunger nach enormer Rechenleistung gibt. Waren es früher noch leistungshungrige Büro-Anwendungen, so sind deren Bedürftnisse durch neuere Mehrkern-Architekturen recht gut bedient.
  • Selbst "kleine" Netzwerke mit 1-30 Mio Parameter sind nicht effizent mit normalen CPUs trainierbar, mit GPUs jedoch sieht dieses Verhältnis völlig anders aus. Das Trainieren "kleiner" Netzwerke macht Hunger auf mehr, denn je mehr wir probieren, desto mehr scheint zu gelingen und desto mehr scheint machbar.


  • Netzwerke mit 10 Milliarden Parameter sind heute trainierbar


  • Dinge, die vor kurzer Zeit noch Science Fiction waren, werden aktuell Realität, wir erleben gerade ein Computer-Zeitalter, das noch aufregender ist, als alles was wir bislang erlebt haben.
  • Wir erleben mit dem Zeitalter der Künstlichen Intelligenz die mittlerweile nächste Industrielle Revolution, und sie ist derzeit in vollem Gange
Trotz des neuen Zeitalters
  • Die algorithmischen Grundlagen gibt es schon seit langer Zeit, und sind nicht über Nacht entstanden
Übermenschliche Fähigkeiten
  • Die beiden wichtigsten Sinne "Sehen" und "Hören" werden von Computern heute in höherer Präzision (bedeutet niedrigerer Fehlerrate als Menschen) erledigt. Seit GoogLeNet und ResNet haben wir Kandidaten die mit höherer Präzision den Inhalt von Bildern korrekt zu klassifizieren.
  • Mit den von Baidu (Deep Speech) veröffentlichten Ergebnissen, ist nachvollziehbar, dass die mit Machine Learning erzielbaren Ergebnisse, mittlerweile niedrigere Fehlerraten bei der Erkennung von Sprache aufweisen, als Menschen sie machen.
    • Wozu?: Vermeiden Dinge in das Mobiltelefon eintippen zu müssen, statt dessen Spracherkennung
    • Unterschied 95% Richtig -> seltene Nutzung (zu viele Fehler 5%); 99% Richtig (Wenige Fehler 1%) -> häufige Nutzung dieses Features
  • GPU - Konferenz (Nvidia CEO Jensen(Jen-Hsun) Huang, Zitieren)
  • LipNet - Lippen lesen kann der Computer heute auch besser als Menschen
Zitate und Stimmen
Andrew Ng
  • Jede Aufgabe, die heute von einem Menschen in einer Sekunde erledigt werden kann, kann die Maschine heute bereits (gleich gut)erledigen, oder in den nächsten paar Jahren. (TODO: Zitat heraussuchen)
    • "Anything [a] typical human can do with <= 1 sec of thought, we can probably now or soon automate with AI."
    • Youtube Video: "Andrew Ng, Artificial Intelligence is the New Electricity"
Die Big Player

(erst mal in random Order)

  • Google
  • Baidu
  • Amazon
  • Microsoft
  • Facebook

Es sind die großen Konzerne. KI-Forschung und KI-Anwednung findet derzeit hauptsächlich (>50 Prozent) in den großen Konzernen statt.

(Wo findet KI-Forschung und Entwicklung statt?)
  • TODO: Grafiken zu Konzernen
  • TODO: Grafik Konzernen vs. Universitäten
  • TODO: Grafik Länder untereinander (China, USA, .... )
Faktoren die Machine Learning erfolgreich machen
  • Rechenleistung in Form von GPUs (Teraflops...)
  • Die Verfügbarkeit von Terabytes an hochwertigen Daten
  • Die Art der zu lösenden Probleme - (die meisten Probleme/Ideen lassen sich derzeit mit supervised learning erlernen - Die meisten Daten liegen jedoch in der Art vor, dass diese für das supervised learning erst aufwändig aufbereitet werden müssen - Viel attraktiver ist es Daten roh verarbeiten zu können.)
Wozu ist das alles gut?
  • Dinge in Bildern erkennen zu können, sie zu identifizieren, sie zu bewerten, hilft dabei komplexe Situationen zu erfassen und die richtigen Schlussfolgerungen zu ziehen. Also beispielsweise die Frage zu beantworten, ob ein Auto weiterfahren darf oder ob es anhalten muss.
Die Möglichkeiten sind schier endlos,
  • Autonomes Fahren
  • Analyse von medizinischern Bildern
  • Erstellen von medizinischen Diagnosen
  • Berechnen von wirksamen Medikamenten
  • mit dem Computer reden
  • Übersetzungen zwischen verschiedenen Sprachen
  • ...
  • Vieles was wir uns heute kaum vorstellen können


Sortiert nach Rechenleistung aufsteigend

  • Will man ein Auto auf einer Autobahn steuern
    • Straße erkennen, Fahrspur erkennen, andere Fahrzeuge erkennen, Hindernisse erkennen, Verkehrszeihen erkennen
  • Will man ein Auto in der Stadt steuern
    • Fußgänger erkennen, Ampeln erkennen, Kreuzungen erkennen, erkennen wo es sicher ist zu fahren
  • Will man ein Auto autonom auf unbefestigtem Gelände fahren lassen, vielleicht Nachts auf Feldwegen (NVidia BB8)
    • den "Weg" erkennen, ...
  • TransportIndustrie hat einen Umfang von 10+ Billionen Dollars
    • 1 Mrd Fahrzeuge
    • 20 Mio Taxifahrten täglich
    • 300 Mio LKWs mit zusammen 1,2 Billionen Km pro ahr
    • Busse....
Von der Grafikkarte zur künstlichen Intelligenz
  • Firmen wie Nvidia haben ihr Geld vor allem mit immer besseren Grafikkarten verdient, die sie an Spieler verkauft hatten, die einen immer größeren Hunger nach immer höherem Realismus hatten (Gaming)
  • Später sind Virtual Reality (VR), Augmented Reality (AR), und MR dazugekommen
  • Nun statten sie Daten- und Rechenzentren mit Hardware aus, in denen nun rund um die künstliche Intelligenz geforscht wird
  • Sie sind Plattformlieferant für selbstfahrende Autos
künstliche Intelligenzen können spielen
  • (Super) Mario
  • Doom
  • Go

Part I[Bearbeiten]

Das Neuron[Bearbeiten]

  • Idealisierung ohne den wesentlichen Kern wegzuidealisieren
    • Entfernt komplizierte Details die für das Verständnis nicht erforderlich sind
    • Erlaubt das Anwenden mathematischer Prinzipien
    • Nachdem die Grundlagen verstanden sind, kann weitere Komplexität hinzugefügt werden, damit Anpassung an die Realität
  • Sich nicht daran stören, dass Modell des Neurons falsch ist, nur wichtig, es nicht zu vergessen; Hilft trotzdem dabei es zu verstehen.
  • Die Neuronen die wir im Machine Learning verwenden, kommunizieren mit reellen Zahlen, statt diskreten Aktivierungen

Lineare Neuronen[Bearbeiten]

  • Einfach - aber vom Berechnungsmodel her limitiert.
  • Wenn man dieses Neuron verstanden hat, hilft es die anderen Neuronen zu verstehen
  • Mathematisch gesehen entspricht das einer gewichteten Summe der Eingabe

Binary Threshold Neuronen[Bearbeiten]

  • Berechnet zunächst eine gewichtete Summe der Eingabe
  • Danach eine Ausgabeeinheit, die den Wert 1 zurückgibt, wenn die gewichtete Summe einen bestimmten Schwellwert überschreitet

wegen

ergibt sich:

Rectified Linear Neuronen (ReLU)[Bearbeiten]

  • Berechnen eine gewichtete Summe der Eingebe
  • Ausgabe ist nicht linear
  • Kombination aus Binary Threshold Neutronen und Linearen Neuronen

Sigmoid Neuronen[Bearbeiten]

  • Ergibt einen reell-wertige Ausgabe, die sich differenzieren lässt und auf einen bestimmten Wertebereich beschränkt ist.
  • benutzt die logistische Funktion als Ausgabefunktion

Stochastische Binäre Neuronen[Bearbeiten]

  • Benutzen die gleiche Funktion wie Sigmoid Neuronen
  • Berechnet als Ausgabe die Wahrscheinlichkeit, mit der eine Spitze ausgegeben wird.
  • Berechnen einer Wahrscheinlichkeit mit der für ein bestimmtes Zeitfenster eine 1 ausgegeben wird.
  • Bei z = - unendlich praktisch nie eine Spitze
  • Bei z = + unendlich praktisch immer eine Spitze
  • Einen ähnlichen Trick gibt es mit Rectified Linear Neuronen
  • Ausgabe ist dann die Poissonrate der Spitzen

Neuronale Netze[Bearbeiten]

  • Input Layer
  • Output Layer
  • Hidden Layer

Training neuronaler Netze[Bearbeiten]

Arten des maschinellen Lernens[Bearbeiten]

Wir unterscheiden drei Arten des maschinellen Lernens.

Supervised Learning[Bearbeiten]
  • Ist das Lernen, einen bestimmten Ausgabevektor bei vorgegebenen Eingabevektor zu erzeugen
  • Supervised learning erfolgt mit sog. gelabelten Daten
  • Die Daten werden von A (EingabeDaten) auf die Ausgabedaten B abgebildet.
  • Die Zuordnung der Eingabedaten auf die Ausgabedaten ist bekannt
    • Bsp. A sind die Menge der E-Mails in roher Form und B ist die Information (das Label), ob es sich bei dieser E-Mail um Spam handelt oder nicht
    • Image A -> Object (Kategorie 1.... 10.000)
    • Audio Clip -> Transkript (Spracherkennung)
    • englischer Text -> deutscher Text (Übersetzung)
    • text -> Audio (Sprachsynthese)
  • Semi-Supervised Learning ist eine Unterart des Supervised Learnings unter Verwendung vieler ungelabelter Daten. Je nach Umfang der gelabelten oder ungelabelten Daten ist das Semi-Supervised Learning entweder dem Supervised Learning oder dem Unsupervised Learning näher.
Reinforcement Learning[Bearbeiten]
  • Ist das Lernen, eine Reihe/Serie von aufeinanderfolgenden Aktionen auszuwählen, um den maximal möglichen Gewinn zu erzielen.
Unsupervised Learning[Bearbeiten]
  • Ist das Lernen, eine gute interne Repräsentation der Eingabe zu erzielen. Man kann es sich vorstellen wie bei der Kompression von Daten. Erst Kodieren und dann Dekodieren und anschließend möglichst wenige Fehler entsprechend einer vorgegebenen Metrik zu erzielen.


Trainings-Datenaufbereitung[Bearbeiten]

  • Zerlegung der Daten in drei Cluster
    • Training - Die Daten werden benutzt, um die Features zu erlernen, Diese Daten sind in der Regel vollständig beschrieben (im Sinne des Supervised Learning)
    • Validierung - Das sind Daten, die dem System während des Trainings vorenthalten wurden. Jedoch vollständig verstanden sind, um so die Güte des Trainings zu verbessern - Ermitteln von Hyperparametern. Mit Hilfe dieser Daten darf nicht gelernt werden, sondern eben nur validiert werden.
    • Test - Das sind Daten, die zum Zeitpunkt des Trainings dem System vorenthalten wurden, und deren (Antwort)Testergebnisse in der Regel geheim sind - um so die Güte verschiedener Architekturen / und Traingsmethoden vergleichen zu können
  • Sind die Traingsdaten, die Testdaten und die Validierungsdaten gut ausgewählt, so ist die Treffergenauigkeit die mit den Validierungsdaten bestimmt wird, auch im Bereich dessen was der eigentliche Test mit den vollkommen unbekannten Daten erzielen wird.
  • Die Aufbereitung der Daten ist sehr aufwändig und sehr teuer
  • Die Firmen werden mittlerweile kreativ, wie sie an Daten hoher Qualität kommen - u.A. werden bspw. eigens nützliche und kostenlose Apps entwickelt, deren Ziel es ist, ganz bestimmte Daten zu generieren So dass sie diese Daten nutzen können um ein anderes Machine Learning Problem zu lösen. Jedoch halten sich die entsprechenden Firmen bedeckt, und benennen diese Apps nicht.

Traings-/Test-Corpora[Bearbeiten]

  • Für das Deep Learning werden vor allem viele Daten in hoher güte gebraucht, mit der massiven Verfügbarkeit der Daten, wurde das trainieren tiefer Netze erst möglich
  • Wenn bspw. Daten nicht immer verfügbar sind, dann kann man sich behelfen, indem man sich der Computergrafik bedient (Spiegeln, Streching, Translation, ....) um so den Trainings-/Test-Corpus besser zu nutzen.


  • Bspw. MNIST Zahlen Korpus:
    • Zahlen, die verschiendene Schreiber geschrieben haben.
    • die Ziffern der Schreiber dier Trainingsdaten, der Validierungsdaten und der Testdaten überscheiden sich nicht, nicht, dass eine Wiedererkennung des Schreibstils die Testergebnisse beeinflusst
  • Bspw. CIFAR-10 / CIFAR-100
    • Bilder in Thunbmnailgröße(32x32) CIFAR-10 -> 60.000 Bilder, 6.000 Bilder pro kategorie
    • 50.000 Trainingimages und 10.000 Testimags (Validierungsbilder müssen aus den Trainingsdaten selbst generiert werden)
    • Ist ein gelabeltes Subset aus ursprünglich 80 Mio Kleinstbildern (Thunbnails)
  • Tiny Images dataset
    • fast 80 Mio Bilder
    • allein die Bilddaten sind ein Download von 227 GB größe
    • die Metadaten sind weitere 57 GB
  • Bspw. MSCoco
    • Tausende Bilder
    • Hunderte Kategorien
    • Mehrere tausend bildbeschribungen - via Amazon mechanical turk
    • Mehrere tausend segmentierungen - Teilinformationen in Bildern
  • Bspw. ImageNet
    • Knapp 15 Millionen Bilder
    • davon knapp 1,04 Mio Bilder mit Boundingbx annotations
    • 21.000 kategorien / Schlagworte / inkl. Oberkategorien
  • Bspw. Wikipedia-Dumps
  • Bspw. Netflix
  • ....
  • und viele andere Quellen
  • Für jedes konkrete Lernziel - bspw. Röntgendiagnose, Netzhautbilder (Diabetiserkennung), Bilder von Hauttumoren und Nichthauttumoren muss in der Regel ein Corpus erstellt werden und mit Daten angereichert werden, um so das gewünschte System trainieren zu können.

Part II[Bearbeiten]

DNN - Deep neuronal Networks[Bearbeiten]

  • Tiefe neuronale Netze sind alle Netze, die mindestens 2 Hidden Layer besitze.
  • die Schwierigkeit bestand darin, solche Netze effizient zu trainieren (Hinton 1984)
  • Sehen
  • Hören
    • Das sind die beiden wichtigsten Sinne des Menschen
    • Tiefe neuronale Netzwerke sind heute besser darin zu sehen und zu hören, als Menschen
  • Zeitalter der Künstlichen Intelligenz hat begonnen

CNN - Convolutional Neuronal Networks[Bearbeiten]

  • Convolutional layers - Hyperparameter:
    • Stride
    • Padding
    • Filtergröße
    • Anzahl der Filter
    • Aktivierungsfunktion

=> Ziel ist die Featureerkennung - Kanten, linien, farb-blobs (Farbbereiche) und alle anderen visuellen merkmale => Mehr Filter bedeuten die Erkennung von mehr Features

  • Max pooling
  • subsampling
  • Dense Layers -
    • Im Grunde genommen ein normales neuronales Netz, das am Ende der Convolutional eingesetzt wird,
    • meist sind es jedoch mehre Layer, die am Ende stehen.
  • Output Layer
    • Umfang des output Layers hängt eng mit der Anzahl der zu erkennenden komplexen features ab (Hund, Katze, PKW, LKW)) - nicht zu verwechseln mit den elementaren Features wie Ecken, Kanten und Linien.
  • Softmax
    • Im grunde genommen der finale Layer

RNN - Recurrent Neuronal Networks / Rekurrente neuronale Netzwerke[Bearbeiten]

  • rekurrente Netze bieten große Flexibilität hinsichtlich ihrer Architektur
  • I kann ein einzelnes Zeichen oder ein komplexer (mehrdimensionaler, fixed size) Eingabevektor sein
  • O kann ein einzelnes Zeichen oder ein komplexer (mehrdimensionaler, fixed size) Ausgabevektor sein
  • H kann wiederum eine komplexe Archtektur aufweisen
  • one to one (vanilla neuronal networks) - (Bspw. Image Classification)
 +-----+      +-----+      +-----+
 |  I  |  ->  |  H  |  ->  |  O  |
 +-----+      +-----+      +-----+
  • one to one (vanilla recurrent network) - Der zusätzliche Pfeil bedeutet, dass das RNN einen Zustand hat, der sich an die früheren Eingaben erinnert - grundlage für die folgenden
 +-----+      +-----+      +-----+
 |  I  |  ->  | RNN |  ->  |  O  |
 +-----+      +-----+      +-----+
                ^  |
                |  |
                +--+
  • one to many ( bspw. image captioning - input an image -> create a sequence of words as description)
 +-----+      +-----+      +-----+
 |  I  |  ->  |  H  |  ->  |  O  |
 +-----+      +-----+      +-----+
                 |
                 V
              +-----+      +-----+
              |  H  |  ->  |  O  |
              +-----+      +-----+
                 |
                 V
              +-----+      +-----+
              |  H  |  ->  |  O  |
              +-----+      +-----+
  • many to one ( Bspw. sentiment classification - sequnce of words -> good or bad )
 +-----+      +-----+
 |  I  |  ->  |  H  |
 +-----+      +-----+
                 |
                 V
 +-----+      +-----+
 |  I  |  ->  |  H  |
 +-----+      +-----+
                 |
                 V
 +-----+      +-----+      +-----+
 |  I  |  ->  |  H  |  ->  |  O  |
 +-----+      +-----+      +-----+
  • many to many (1) (mit zeitlicher Verzögerug) (bspw. machine Translation -> Input: Sequence of Words (Sprache eng.) -> Output: Sequence of words (Sprache dt.))
 +-----+      +-----+
 |  I  |  ->  |  H  |
 +-----+      +-----+
                 |
                 V
 +-----+      +-----+
 |  I  |  ->  |  H  |
 +-----+      +-----+
                 |
                 V
 +-----+      +-----+      +-----+
 |  I  |  ->  |  H  |  ->  |  O  |
 +-----+      +-----+      +-----+
                 |
                 V
              +-----+      +-----+
              |  H  |  ->  |  O  |
              +-----+      +-----+
                 |
                 V
              +-----+      +-----+
              |  H  |  ->  |  O  |
              +-----+      +-----+
  • many to many (2) (ohne zeitliche Verzögerung) Video klassifikation auf basis von einzelbildern
 +-----+      +-----+      +-----+
 |  I  |  ->  |  H  |  ->  |  O  |
 +-----+      +-----+      +-----+
                 |
                 V
 +-----+      +-----+      +-----+
 |  I  |  ->  |  H  |  ->  |  O  |
 +-----+      +-----+      +-----+
                 |
                 V
 +-----+      +-----+      +-----+
 |  I  |  ->  |  H  |  ->  |  O  |
 +-----+      +-----+      +-----+
  • Sowie alle weiteren Kombinationen Anzahl der Inputs / Anzahl der Outputs / Anzahl der Hidden Layer bspw:
 +-----+      +-----+      +-----+      +-----+
 |  I  |  ->  |  H  |  ->  |  H  |  ->  |  O  |
 +-----+      +-----+      +-----+      +-----+
                 |            |
                 V            V
 +-----+      +-----+      +-----+      +-----+
 |  I  |  ->  |  H  |  ->  |  H  |  ->  |  O  |
 +-----+      +-----+      +-----+      +-----+
                 |            |
                 V            V
 +-----+      +-----+      +-----+      +-----+
 |  I  |  ->  |  H  |  ->  |  H  |  ->  |  O  |
 +-----+      +-----+      +-----+      +-----+

Part III[Bearbeiten]

Netzwerk-Architekturen[Bearbeiten]

  • In den letzten Jahren vermehren sich die Anstrengungen die Gründe zu verstehen warum bestimmte Neuronale Netzwerke bessere Ergebnisse erzielen als Andere, um so ihre Leistungsfähigkeit zu optimieren.
  • Wir stehen heute noch immer am Anfang dieser Entwicklung, und so sind Fortschritte auf diesem Gebiet noch vergleichsweise einfach erreichbar.
  • Die wichtigsten Architekturen und Durchbrüche folgen.

LeNet-5 (1989)[Bearbeiten]

  • Yann LeCunn et. al.; Backpropagation applied to handwritten zip code recognition; 1989
  • Die erste ConvNet Architektur zur Erkennung von Postleitzahlen

AlexNet (2012)[Bearbeiten]

  • Alex Krizhevsky; Ilya Sutskever; Geoffrey E. Hinton. ”ImageNet Classification with Deep Convolutional Neural Networks”. In Advances in Neural Information Processing Systems 25 (NIPS 2012), 2012.
  • Das erste Mal, dass eine GPU (eigentlich zwei GPUs) für das Training tiefer neuronaler Netze (Deep Learning) verwendet wurde(n)
  • Das erste Mal, dass die Features (Filter-Matrizen) nicht mehr von Hand entwickelt wurden
  • Das erste Mal, dass das Neuronale Netzwerk selbst angefangen hat die Features auf jeder Ebene zu erlernen
  • Die Architektur des neuronalen Netzwerks (AlexNet) war seinerzeit so leistungsfähig, dass alle anderen Wettbewerber bei der Erkennungsrate / und der Fehl-Erkennungsrate in den Schatten gestellt wurden
  • Durchbruch für die Verwendung von tiefen Convolutional Neuronal Networks (CNN)
  • CNN sind so erfolgreich, dass seit dem im Prinzip nur noch Convolutional Neuronal Networks (CNN) in der Bilderkennung eingesetzt werden, will man ähnlich hohe Erkennungsraten erzielen
  • Deep (Convolutional) Neuronal Networks wurden durch die Möglichkeit der Verarbeitung riesiger Datenmengen in GPUs erst erreichbar. Er hat GPUs für das Trainieren tiefer neuronaler Netzwerke populär gemacht - (und so den Grafikkartenherstellern ein neues Publikum bzw. einen neuen Anwenderkreis erschlossen)
  • Seit dieser Arbeit traten CNNs ihren Siegeszug an und werden seit dem immer weiter verbessert / heiß dass es danach praktisch nur noch CNNs gab
    • mehr Layer
    • Optimierung der Funktionen/Neuronen der Neuronalen Netzwerke

Bewertung der Arbeit / historischer Kontext muss aus diesem Kapitel verschoben werden

  • Seine Arbeit ist im Prinzip der Urknall der Künstlichen Intelligenz
  • Seit dem wurden jedes weitere Jahr mit jeder Weiteren Architekut die Fehlerraten so weit reduziert, dass Computer bei der Objekterkennung weniger Fehler machen als Menschen, Wir haben eine Schwelle erreicht, die "superhuman"-Recognition entspricht, Das Gleiche gilt mittlerweile auch bei der Erkennung von Sprache (bspw. bei Baidu).

ZFNet (2013)[Bearbeiten]

  • Matthew D. Zeiler and Rob Fergus. ”Visualizing and Understanding Convolutional Networks”. booktitle, 2013.
  • Visualisierung der erlernten Features
  • Analyse warum das AlexNet so gute Ergebniss erzielt (Layer ein und ausschalten und wie es sich auf die Testergebnisse auswirkt)
  • Analyse, dass mit mehr daten bessere Ergebnisse erzielt werden können
  • Modifikation der Hyperparameter des AlexNet Layer 6,7 sowie 3,4,5

MXNet[Bearbeiten]

VGGNet (2015)[Bearbeiten]

  • Kleine Convolutional filters 3x3 einen stack von 3x3 Convolutions statt 7x7 -> Reduktion der Parameter bspw. auf 3*(3^2 C)=27 C statt 1*(7^2 C) = 49 C Nachteil ist die Reduktion auf decomposable convolutions - 40 Prozent weniger Parmeter in den am höchsten aufgelösten Conv-Layern -> weniger Parameter zu trainieren -> Schneller
  • Ziel ist die Anzahl der Parameter in den ersten Layern zu reduzieren, wo in den meisten Fällen immer die gleichen Features erlernt werden.
  • Tiefe des Netzweks beträgt wegen der kleineren Filter nun zwischen 16 und 19, um die gleiche örtliche Auflösung zu erreichen.

ResNet (2015)[Bearbeiten]

  • Kaiming He; Xiangyu Zhang; Shaoqing Ren; Jian Sun. ”Deep Residual Learning for Image Recognition”. booktitle, 2015.
  • über statt wie bei VGG 19 Layer -> 34 Layer mit residual Network komponenten (shortcuts parallel zu den convolutions)
  • Bottleneck Architektur
  • getestet/evaluiert wurden auch tiefe CNNs mit bis zu 152 Layern (ResNet-152)

Inception v1 (2014) / GoogLeNet[Bearbeiten]

  • Christian Szegedy et. al.. ”Going deeper with convolutions”. booktitle, 2014.
  • GoogLeNet - 22 Layer Network
  • Jedes Neuron besteht aus kleinem Teilnetzwerk bestehend aus 1x1 convolutions, 3x3 convolutions, 5x5 convolutions und 3x3 maxpooling
  • Nach etwas Tuning wurden noch einige dimensionsrediktionen mit 1x1 Convolutions für die 3x3 und 5x5 convolutions eingebaut sowie das 3x3 maxpooling mit einer 1x1 convolution abgeschlossen
  • die verschiedenen convnetze werden zu einem Filterergebnis konkateniert
  • "Inception" => Conv-Netzwerk in Conv-Netzwerk

Inception v2 (2015)[Bearbeiten]

Inception v3 (2015)[Bearbeiten]

  • Christian Szegedy; Vincent Vanhoucke; Sergey Ioffe; Jonathon Shlens. “Rethinking the Inception Architecture for Computer Vision”. arXiv, 2015.
  • Zerlegen der 5x5 Convolutions in 2 aufeinanderfolgende 3x3 convolutions in jedem Teilnetzwerk - siehe auch VGGNet
  • Weitere Zerlegung der 3x3 Convoloutions in 3x1 und 1x3 Convolutions

Inception v4 (2016)[Bearbeiten]

  • Christian Szegedy; Sergey Ioffe; Vincent Vanhoucke. “Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning”. arXiv, 2016.
  • drei verschiedene Netzwerk vorschläge
  • Verbindung von ResNet + Inception v3
  • Inception.v3 + ResidualNetwork v1
  • Inception.v3 + ResidualNetwork v2
  • Inception v4 = Inception v1 + VGGNet Optimierungen mit 5x5 und 7x7 convolutions zerlegt in 1x5 und 5x1 sowie 1x7 und 7x1 Convolutions. 25 C -> 10 C; 49 C -> 14 C

Image Captioning / Bilder mit Text-Beschreibung versehen[Bearbeiten]

  • ein auf Klassifikation trainiertes CNN
    • wird um den Softmax layer und den letzten Klassifikationslayer bereinigt
    • Diese Ausgabe dient als Eingabe für den (initialen) Hidden state eines RNN
    • Anschließend sendet man dem RNN ein Startsymbol und es erzeugt den ersten Wortvektor / das erste wort
    • Das RNN ist eine Funktion des Eingabebildes
    • Da in der ausgabe aus dem CNN bereits alle Informationen drin stecken, kann man sich vortsellen, dass die tatsache, dass ein estimmtes Objekt in einem Bild zu sehen ist, zu einer höheren Wahrscheinlichkeit führt das Wort, das dieses Objekt bechreibt zu synthetisieren.
  • Um das erste Wort zu erhalten, wird ein Startsymbol an das RNN als Eingabe angelegt und das erste Wort synthetisiert.
  • Um einen Satz zu erhalten, wird das erste generierte Wort als Eingabe in das RNN eingespeist, um so das zweite Wort zu synthetisieren u.s.w.
  • Der Satz wird beendet, wenn das RNN ein stopsymbol synthetisiert. (oder wenn der Text zu lang geworden ist)

Fotorealistischer Style Transfer[Bearbeiten]

Deep Speech 1[Bearbeiten]

Deep Speech 2[Bearbeiten]

LipNet[Bearbeiten]

  • Lippenlesen
  • die Erkennung durch die Machine ist besser als es Menschen können.
  • title=LipNet: End-to-End Sentence-level Lipreading
  • author=Yannis M. Assael; Brendan Shillingford; Shimon Whiteson; Nando de Freitas
  • arxiv=1611.01599
  • year=2016

Appendix[Bearbeiten]

Machine-Learning unter Windows[Bearbeiten]

Als Autor möchte ich darauf hinweisen, dass ich Windows verwende und meine Installation vor allem darauf abzielt für meine Umgebung zu funktionieren. Dies ist kein Buch über die Installation von TensorFlow, weswegen ich von weiteren Installationsanleitungen Abstand nehmen möchte. Weitere Installationsanleitungen finden sie nämlich mittlerweile recht häufig im Internet. Diese Anleitung dient der Dokumentation, dass man und wie man TensorFlow unter Windows installieren kann.

Des Weiteren möchte ich darauf hinweisen, dass es weitere Bibliotheken wie "Caffee" (Python), "Torch" (Lua), "Theano" (Python) gibt, ich mich aber zunächst für TensorFlow (Python) entschieden habe. Es gibt durchaus eine Reihe von Gründen Caffee zu verwenden, bspw. dass es dort zur Zeit mehr (fertige) Modelle gibt. Das Buch selbst ist keine Anleitung wie man mit TensorFlow arbeitet, sondern TensorFlow ist das Mittel dieses Buches, die Ideen rund um das Machine-Learning zu vermitteln. Es kann jedoch sein, dass einige der Ideen im Laufe des Buches unter Verwendung von Caffee vermittelt werden.

Sowohl für Tensorflow als auch für Caffee werden wir ein funktionierenden Python-Stack, bestehend aus Python, GPU-Beschleunigung und Entwicklungsumgebung, benötigen. Hierfür sind folgende Schritte vorzunehmen:

  • Download / Installieren Python 3.5 (64 Bit) oder neuer
  • (Installation Visual Studio - nicht notwendig)
  • Download / Installieren Cuda-Toolkit 8.0 oder nueer
  • Download / Installieren CuDNN 5.1 oder neuer
  • Patchen Cuda-Toolkit mit CuDNN
  • Neustarten des Systems
  • Installieren von TensorFlow
    • Testen der TensorFlow-Installation mit dem Klassiker Hello World
  • Installieren Eclipse - Installieren PyDev
    • Erstellen eines Hello World proejektes

Auch hier möchte ich darauf hinweisen, dass ich mich zunächst aus für mich praktischen Gründen für Eclipse + PyDev entschieden habe und ich mir im Klaren darüber bin, dass auch Alternativen dazu, bspw. PyCharm, existieren.

Installation von TensorFlow (Windows)[Bearbeiten]

Öffnen einer Eingabeaufforderung.

Installation von TensorFlow mit GPU - Unterstützung

pip3 install --upgrade tensorflow-gpu

Installation von TensorFlow in der CPU-Variante (jedoch nicht auf dem System des Autors erprobt)

pip3 install --upgrade tensorflow

TensorFlow - Hello World[Bearbeiten]

Überprüfen können wir die Installation mit einem klassischen "Hello World"-Programm.

import tensorflow as tf
sess = tf.Session()
helloworld = tf.constant( 'Hello World!' )
print( sess.run( helloworld ) )

Die Ausgabe beim ausführen des Skripts ist recht umfangreich, der jedoch entscheidende Teil ist die "Hello World!"-Ausgabe:

b'Hello World!'

Der Teil den wir ignoriert haben, verrät uns mehr über den Installationszustand des Systems und ob alle CUDA-Bibliotheken geladen werden konnten.

Ausgabe von import tensorflow as tf

I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\stream_executor\dso_loader.cc:135] successfully opened CUDA library cublas64_80.dll locally
I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\stream_executor\dso_loader.cc:135] successfully opened CUDA library cudnn64_5.dll locally
I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\stream_executor\dso_loader.cc:135] successfully opened CUDA library cufft64_80.dll locally
I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\stream_executor\dso_loader.cc:135] successfully opened CUDA library nvcuda.dll locally
I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\stream_executor\dso_loader.cc:135] successfully opened CUDA library curand64_80.dll locally

Diese Ausgaben stammen noch aus Tensorflow 1.0. Leider fehlen diese Ausgaben unter Tensorflow 1.2 und 1.3 - so ist es nur schwer herauszufinden, ob die GPU korrekt verwendet wird. Ein Anhaltspunkt ist, dass die CPU beim Lernen nicht belastet wird, sondern die GPU belastet wird. Es gibt verschiedene Programme bzw. auch Windows 10, die die Auslastung der GPU anzeigen können. Bei neueren TensorFlow-Installationen kann es also passieren, dass Sie diese Art von hilfreichem Feedback nicht erhalten.

Die Ausgabe zeigt in Zeile 2, dass CuDNN korrekt angezogen wird.

I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\stream_executor\dso_loader.cc:135] successfully opened CUDA library cudnn64_5.dll locally

Ausgabe von tf.Session()

I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\core\common_runtime\gpu\gpu_device.cc:885] Found device 0 with properties: 
name: GeForce GTX 1070
major: 6 minor: 1 memoryClockRate (GHz) 1.683
pciBusID 0000:02:00.0
Total memory: 8.00GiB
Free memory: 7.63GiB
I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\core\common_runtime\gpu\gpu_device.cc:906] DMA: 0 
I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\core\common_runtime\gpu\gpu_device.cc:916] 0:   Y 
I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\core\common_runtime\gpu\gpu_device.cc:975] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GTX 1070, pci bus id: 0000:02:00.0)

Der Rest der Ausgabe zeigt, welche TensorFlow-Kernel sonst noch verfügbar sind, wenn sess.run( helloworld ) ausführt.

E c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\core\framework\op_kernel.cc:943] OpKernel ('op: "BestSplits" device_type: "CPU"') for unknown op: BestSplits
E c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\core\framework\op_kernel.cc:943] OpKernel ('op: "CountExtremelyRandomStats" device_type: "CPU"') for unknown op: CountExtremelyRandomStats
E c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\core\framework\op_kernel.cc:943] OpKernel ('op: "FinishedNodes" device_type: "CPU"') for unknown op: FinishedNodes
E c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\core\framework\op_kernel.cc:943] OpKernel ('op: "GrowTree" device_type: "CPU"') for unknown op: GrowTree
E c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\core\framework\op_kernel.cc:943] OpKernel ('op: "ReinterpretStringToFloat" device_type: "CPU"') for unknown op: ReinterpretStringToFloat
E c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\core\framework\op_kernel.cc:943] OpKernel ('op: "SampleInputs" device_type: "CPU"') for unknown op: SampleInputs
E c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\core\framework\op_kernel.cc:943] OpKernel ('op: "ScatterAddNdim" device_type: "CPU"') for unknown op: ScatterAddNdim
E c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\core\framework\op_kernel.cc:943] OpKernel ('op: "TopNInsert" device_type: "CPU"') for unknown op: TopNInsert
E c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\core\framework\op_kernel.cc:943] OpKernel ('op: "TopNRemove" device_type: "CPU"') for unknown op: TopNRemove
E c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\core\framework\op_kernel.cc:943] OpKernel ('op: "TreePredictions" device_type: "CPU"') for unknown op: TreePredictions
E c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\core\framework\op_kernel.cc:943] OpKernel ('op: "UpdateFertileSlots" device_type: "CPU"') for unknown op: UpdateFertileSlots