CODECENTRIC.AI BOOTCAMP

Neuronale Netze und
Deep Learning

created by @moseroli

Neuronales Netz findet Augen in KATZENBILDERN!

eigenes Modell

Training from Scratch

Webapp setzt Katze eine Brille auf ...

ZIEL:

Überblick

  • Praxis: Image Classifier trainieren (BYOD)
  • Theorie:
    • Neuronale Netze
    • Deep Learning
    • Wie lernt ein Neuronales Netz?
    • Architekturen, Anwendungsfälle
    • Transfer Learning
  • Praxis:
    • Training in der Cloud / mit GPUs
    • eigenes "Thug Cat"-Modell trainieren
    • Modell in WebApp benutzen

Also, erstmal etwas                          Theorie Praxis!

Einen 

                 Classifier trainieren

(Jupyter Notebook in der kommenden Übung)

Mureșan, Horea & Oltean, Mihai. (2018). Fruit recognition from images using deep learning.

World-Class?!

Zusammenfassung

import fastai
data = ImageDataBunch.from_folder(DATA_PATH)
learn = cnn_learner(data, pretrained_model)
learn.fit()

(am Beispiel fastai)

  • Bilder in Ordner legen (=Labeln)
  • Code ausführen -> eigener Classifier
  • Gute Ergebnisse durch Transfer Learning und "Best Practices"
  • Das Problem Image Classification ist "gelöst".

B.Y.O.D.
(Bring Your Own Data)

Erstelle ein eigenes Dataset!

  • Überlege dir welche Bilder du klassifizieren willst
  • z.B. Blumenkohl vs. Brokkoli vs. Turnschuh
  • oder Traumwagen vs. Schrottkarre
  • oder Gesicht-mit-Brille vs. Gesicht-ohne-Brille
  • ... Leberwurst vs. Erdbeer-Käse - sei kreativ!

Wo bekomme ich die Daten her?!

  • selber Fotos machen
  • google / bing / * Bilder Suche                                     
  • flicker.com
  • pixabay.com
  • ... lass dir was einfallen - vllt. auch automatisch?

Wieviele Bilder braucht man?!

  • Wir verwenden Transfer Learning ... daher "nicht so viele" (Erklärung folgt)
  • Probieren geht über Studieren
  • Fang mal mit ein paar Bildern pro Kategorie an

Traumwagen                 Schrott

Was sind

neuronale Netze?

Neuronale Netze

                sind NICHT:

010001101
010010101
110101011
010001101
010010101
110101011
010001101
010010101
110101011

Data

Computer

... denke wie ein Mensch ...

no brain inside

Input

Hidden

...

Output  / Vorhersage

Gewichte

  • Alles ist abhängig vom Problem (den Daten)
  • Beispiel: Bilder
    28 x 28 x 3 Pixel = 2.352
  • diverse "Standard- Modelle"
  • n-Schichten mit
    n-Neuronen
  • Vision? NLP? 
  • Regression? Klassifikation?
  • Beispiel "cat vs. dog": 2 Ausgabe- Wahrscheinlichkeiten

(einfaches) neuronales Netz

logische Sicht

Neuronen und Aktivierungen

Theorie ist angelehnt an menschliches Gehirn

(aber nur angelehnt).

biologisch inspiriert

Ein bisschen Mathe

0 4 -3 2

@

1 2 1
3 4 2
5 6 3
7 8 4
11 14 7
0*1 + 4*3 + (-3*5) + 2*7
0*2 + 4*4 + (-3*6) + 2*8
0*1 + 4*2 + (-3*3) + 2*4

t1

   (1x4)
   (4x3)
(1x3)

=

t2

muss gleich sein

t1 @ t2
matrix multiplication

(bzw. dot product)

0
4
-3
2

ReLU(

) =

0
4
0
2

häufig benutzte Activation Function

Das sind die Building Blocks.

ist hilfreich

Wofür Activation Functions?

f(x) = ax+b

g(x) = cx+d

g(f(x))

Um komplexe Probleme lernen zu können, brauchen wir: Non Linearity

Anmerkung

@

1 Dimension

Das geht nicht

(ist mathematisch nicht korrekt).

Wird aber oft so dargestellt
(aus Platzgründen).

@

1 Dimension

(so ist es gemeint)

(einfaches) neuronales Netz

34 ... 23
... ... ...
5 ... 112

28 x 28 Pixel

34 -> 0.13
...
23 -> 0.09
...
...
5 -> 0.01
...
...
...
112 -> 0.44

Input

(784)
(-> Normalisierung)

@

w1 w2 ...
... ... wn

(random) weights

(784 x 3)

auch Parameter genannt

diese werden "gelernt"

physische Sicht

(3)

ReLU

0.5

0

0.2

0.5

-1

0.2

Activation Function

(3)

Activations

(Ergebnisse)

@

(3 x 10)

weights

Output

(10)

0.1

0

0

0

0

0.9

0

0

0

0

classify

(vereinfacht)

Was ist

         Deep Learning?

Kurz gesagt:

Neuronale Netze mit vielen Layern und vielen Parametern.

Bis vor wenigen Jahren gab es kein Deep Learning - warum?

Training von solchen tiefen NN war nicht möglich.

Kapitel Ende.

      GPU

pay per use

mehr Daten

* ...

Was hat sich geändert?

(* siehe Bildernachweis)

Probleme beim Training ...

1000

1000

1000

x

x

... viele Layer ... x

1000

-> ∞ (exploding Gradients)

0.01

0

100

x

x

... viele Layer ... x

0.001

-> 0 (vanishing Gradients)

Netze mit vielen Parametern neigen zu Overfitting.

  • Initialisierung (bessere Zufallszahlen für weights)
  • Regularisierung (loss + something)
  • Normalisierung (-1 bis 1)
  • Dropout (zufällig Parameter auf 0 setzen)
  • Skip Connections (Layer überspringen)
  • ... (Lösungen teilweise implementiert!)

Lösungen (very high level view)

(Warum lernt das Netz nicht?)

Vor allem Computer Vision und Natural Language Processing sind Probleme mit extrem vielen Parametern.

Diese werden jetzt lösbar.

Rechner beginnen zu sehen und Sprache zu verstehen.

Durch Deep Learning entsteht der Eindruck von AI bzw. Künstlicher Intelligenz.

 

Überblick über

    Frameworks und Tools

Entwickelt von Google. Große Community.

API für div. Backends (z.B. TensorFlow)

Entwickelt von Facebook. Wachsende Community.

fast.ai

API für PyTorch (Best Practices)

Rechte an Logos siehe Bildernachweis

Weitere: theano, torch, caffe, caffe2, MXNet, CNTK, DL4J

                h2o.ai, rapids.ai und viele mehr ...

Das mit ABSTAND

beste Framework:

gibt es nicht.

Die Konzepte sind ähnlich. Alle haben Vor- und Nachteile. Dinge ändern sich schnell. (Manche sind veraltet).

source: https://twitter.com/karpathy/status/972295865187512320/photo/1

Frameworks in

        wissenschaftlichen Papers

TensorFlow

PyTorch

Keras

caffe

source: https://trends.google.com

TensorFlow

PyTorch

Suchen bei google Trends

Ableitungen, Optimizer, Architekturen,
Best Practices implementiert 

Wofür braucht man

                eigentlich die Frameworks?

Computational Graph

Parallelisierung / Verteilung auf GPU

Tensor

[ 
 [0.1, 0.02],
 [0.4, -0.2],
 [0.13, 0.2],
 [0.53, 1.2],
 [5.1, -0.2],
 [23.0,0.53],
 [0.11, 3.8],
]

x

@

"Backend"

"API"

neuronales Netz =

Machine Learning as a Service

(nicht Teil von diesem Kapitel)

      Wie lernt ein

                 neuronales Netz?

[[1, 2],
 [3, 4],
 [5, 6]]

Tensor
 = multidimensionaler Array

Parameter

oder Weights

sigmoid
[[3, 4],
 [5, 2]]
@
[[13, 8],
[29, 20],
[45, 32]]
pred

activation function
(Beispiel)

forward pass

loss = loss_func(pred, labels)
[[1.0, 0.1],
[-0.7, 0.5],
[0.9, -0.9]]

Gradients

loss.backpropagate()
[[b, c],
[d, e]]
[[w, e],
[z, b],
[a, c]]

backpropagation

Computational Graph

# Ableitung mit Chain Rule, (Framework Magic)
loss

(static or dynamic)

Vorhersage

Fehler

Ein (Deep Learning) Tensor:

  • enthält Parameter/Weights (das was gelernt wird)
    oder (Zwischen-)Ergebnisse (Activations)
  • enthält evtl. Gradients (nicht immer)
  • ist Teil eines Computational Graph
  • "kann backpropagation" = Bestimmung der Ableitung
    bzw. Gradienten durch "Framework Magic"

In manchen Frameworks ist der Graph
dynamisch. Jede Rechenoperation
ändert den Graph!

!

Was sind nochmal diese Gradients ?!

loss function

global minimum

x

Gradient =
Steigung in Punkt x

x

Learning Rate

zu große Learning Rate

learning rate zu klein: dauert lange, gefangen in lokalem minimum

Schrittweise Optimierung

Gradients zeigen die Richtung: Gradient Descent

Optimizer

Ein paar kurze Worte über

  • SGD (Stochastic Gradient Descent) ist das einfachst mögliche Beispiel
  • Momentum (vorstellen wie Trägheit, Ball rollt schneller ins Tal; überspringt kleine Hindernisse)
  • modernere Optimizer z.B. Adam
    (lernen oft schneller und besser)
for epoch in epochs:
data = load_data()
for batch in batches:
train, valid = split(data)
model = NeuronalesNetz()
prediction = model(train[batch])
loss = loss_function(prediction,
                     label[batch])
loss.backpropagate()
# loss ist ein Tensor.  
# Das Ende eines Computational-Graph.
# backprop berechnet Gradienten mit Chain Rule.
for param in model.parameters:
param = param - (param.gradient * 
                 learning_rate)

Training eines neuronalen Netzes

# eine math. Funktion

(es ist einfacher, als man denkt)

forward pass

SGD

for epoch in epochs:
data = load_data()
for batch in batches:
train, valid = split(data)
model = NeuronalesNetz()
prediction = model(valid[batch])
validation_loss = 
         loss_function(prediction,
                     label[batch])

Validierung beim Training

(um Overfitting zu bemerken)

... Training wie vorhin
... keine Updates - nur "messen" 

Welches neuronale Netz

                      ist das Richtige?

Arten von neuronalen Netzen

Feed Forward Netze

  • Die Anfänge von NN
  • Perzeptron
  • Multi Layer Perzeptron
  • "fully connected" Layer
  • oft Teil von komplexeren Architekturen
  • viele Parameter
  • jeder Input gleichwertig/unabhängig
  • meist gibt es konkrete Architekturen, die für ein bestimmtes Problem entwickelt wurden ...
     

(kein spezieller Use Case)

Convolutional Neural Network (CNN oder FCN)

  • Verkleinerung der Daten von links nach rechts
  • örtlicher Zusammenhang von Pixeln
  • automatisches Lernen von Filtern (Feature Extractors)

lernt Formen und Texturen

(hauptsächlich Computer Vision)

n-Filter

Feature Maps

Fully Connected

...

Convolutions
(und Pooling zum Verkleinern)

Convolutions

Was sind 

activate!

Bilder verändern

Feature extraction

Filter / Kernel

  • Verwischen
  • Schärfe
  • Drehen
  • ... 

(bzw. wofür benutzt man sie?)

 0 -1  0
-1  5 -1
 0 -1  0

(sharpening)
Kernel oder Filter

10 35 50 10 35 20 11 15  1
22 15 23 17 35 20 11 15 31
36 99 80 20 87 65 45 87 21
10 35 50 10 35 20 11 15  1
22 15 23 17 35 20 11 15 31
36 99 80 20 87 65 45 87 21
10 35 50 10 35 20 11 15  1
22 15 23 17 35 20 11 15 31
36 99 80 20 87 65 45 87 21

Convolutions

15 23 17
99 80 20
35 50 10

@

 0 -1  0
-1  5 -1
 0 -1  0
-23  83 -23
-80 281 -80
-50 205 -50

=

.sum() -> 263

setosa.io

3 x 3 Kernel Size

Stride (Schrittweite)

Padding

Recurrent Neural Network (RNN)

Bei Sprache die Reihenfolge wichtig ist!

(... some Jedi Master)

Rückkopplung

  • sequentielle Daten
  • Sprache (Audio, Text)
  • Handlungen
  • Time-Series-Daten
  • GRU (Gated Recurrent Unit)
  • LSTM (Long Short Term Memory)

(Lernen mit Reihenfolge)

Generative Adversarial Networks (GAN)

Generator

Diskriminator

echte Daten

Noise

generierte
 Daten

sehen Daten echt aus?

konkurrieren

Neuronale Netze werden "kreativ" bzw. können neue Inhalte generieren.

(Neue Daten generieren)

Autoencoder

Bottleneck

in ~ out

(keine Labels, bzw. generiert aus Input)

repräsentiert

encode

decode

  • Komprimierung
  • Anomalie Detection
  • Schwarz/Weiss -> Farbe
  • Style Transfer
  • uvm.

(Encode/Decode ohne manuelle Labels)

Computer Vision - ganz konkret.

Sollte ich eine eigene Architektur entwickeln?

... vermutlich nicht.

AlexNet

LeNet

VGG

Inception

ResNet

U-Net

GoogLeNet

Architekturen historisch "gewachsen".

Unterschiede in:

  • Anzahl Parameter (Speicher)
  • Anzahl Operations (Laufzeit)
  • Trainierbarkeit ...

Probieren geht über Studieren, 

aber ResNet ist meist eine gute erste Wahl.

(welches CNN soll ich nehmen)

Inception-v4

MobileNet

DenseNet

SqueezeNet

Skip Connections - and go deeper!

(warum ResNet / DenseNet / U-Net / Inception-v4 ...)

ältere Architekturen:
mehr Layer != besseres Ergebnis

Block 1

Block 2 

Block N

  • man kann mehr Layer stapeln
    (weniger Probleme mit vanishing Gradients)
  • Block n optimiert den Fehler von Block n-1 (residual)
  • Input beeinflusst auch tiefere Layer direkter (schnelleres Training auf unteren Ebenen möglich)

(NN mit Skip Connections)

Input

Out-B1

Out-B2

     Was ist
           Transfer Learning?

  • die Filter sind vor-trainiert (vereinfachte Darstellung)
  • welche Filter relevant sind, lernt das NN (kein manuelles Feature Engineering!)

Beispiel CNN

"pretrained on ImageNet"
ImageNet = riesiges Bild Dataset (regelmäßiger Wettbewerb)
> 1 Mio. Training-Bilder aus 1000 Kategorien

(angenommen ein ResNet)

Katze!

Klassifikation (ImageNet)

...

}

  • Training neuer letzter Layer, dann unfreeze

Fine Tuning 

zunächst "eingefroren"

Klassifikation (Brokkoli vs. Ananas)

Neue Daten!

Vorteile

          Transfer Learning

  • bessere Ergebnisse mit weniger Daten
  • genereller Classifier from Scratch braucht u.U. Millionen von Bildern
  • Classifier mit Pretrained Network reichen u.U. ein paar 100 Bilder pro Klasse
  • man muss nicht immer bei 0 beginnen  -> weniger Zeit und Geld
  • Training dauert u.U. nur wenige Minuten (anstatt Stunden/Tage)
  • schnellere Experimente möglich
  • die Idee gilt auch für andere Bereiche (nicht nur Bilder)

Eine der wichtigsten Entwicklungen für zugängliches Deep Learning.

thug cat - ein Deep Learning "Projekt"

Training mit GPUs

Du hast keine geeignete GPU in deinem Rechner?

(Zur Zeit kostenfrei - mit GPU/TPU und fast.ai vorinstalliert)

Oder Azure oder google cloud oder oder oder...

Training in Cloud / GPU

  • Überblick Cloud / Services
  • Welches DS ? (cat hipster?!)
  • AWS Instance aufsetzen
  • Unterschied / Benchmarks
  • Multi GPU Systeme
  • ... todo

Cat Dataset

  • melde dich bei kaggle.com an
  • suche nach "cat dataset"
  • lade die Daten herunter (cats.zip)
  • packe die zip Datei aus

Weiwei Zhang, Jian Sun, and Xiaoou Tang, Cat Head Detection - How to Effectively Exploit Shape and Texture Features, Proc. of European Conf. Computer Vision, vol. 4, pp.802-816, 2008.

00000001_000.jpg - 00000001_000.jpg.cat      00000081_001.jpg - 00000081_001.jpg.cat

Bild                                                     Label

9 96 96 153 127 103 146 48 20 78 -37 127 5 210 52 260 63 229 121

Bildpunkte

Anzahl Bildpunkte

{

{

{

p1

p2

p3

{

p9

p1 = linkes Auge
p2 = rechtes Auge

Eine WebApp -

         Model to production

TODO

Referenzen / Bildernachweis

Tensorflow Logo:
"TensorFlow, the TensorFlow logo and any related marks are trademarks of Google Inc.”


PyTorch Logo:
https://commons.wikimedia.org/wiki/File:Pytorch_logo.png
https://github.com/soumith [CC BY-SA 4.0 (https://creativecommons.org/licenses/by-sa/4.0)]

 

Kurs-Inhalte teilweise inspieriert von https://www.fast.ai/

weitere Bilder von pixabay.com

 

Neuronale Netze und Deep Learning

By Oliver Moser

Neuronale Netze und Deep Learning

  • 76
Loading comments...

More from Oliver Moser