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