Übungen: Computer Vision

Übungen zu EKI06: künstliches Neuron und Sigmoid, Kostenfunktion, Backpropagation-Deltas, 2D-Faltung und Max-Pooling, CNN-Pipeline und Keras-Modell sowie die MNIST-Bildrepräsentation.

Beginner

Aufgabe 1 (Beginner) - CV-Anwendungen und KI-Landkarte (Multiple-Choice)

Zu welchem Bereich der KI-Landkarte (nach B. Humm) gehoert Computer Vision, und welche Ausgabe liefert die Gesichtserkennung laut Folie?

a) Reasoning; Ausgabe: Textdokument b) Perceiving (Wahrnehmung); Ausgabe: ob Gesichter vorhanden sind, Gesichts-Position, Identifikation c) Acquiring intelligence; Ausgabe: Anomalien in CT-Bildern d) Symbolic AI; Ausgabe: Kollisionswarnung

Lösung anzeigen

Richtig ist b).

Computer Vision gehoert zum Bereich Perceiving (Wahrnehmung) und damit zur nicht-symbolischen KI / Machine Learning. Die Gesichtserkennung nimmt ein Bild als Eingabe und liefert als Ausgabe: ob Gesichter vorhanden sind, die Gesichts-Position und die Identifikation.

  • a) Textdokument ist die Ausgabe von OCR, nicht der Gesichtserkennung; Reasoning ist der CEP-Bereich (EKI05).
  • c) Anomalien in CT/PET/MRI/Ultraschall gehoeren zur Medizin-Anwendung.
  • d) Kollisionswarnung gehoert zur Automobil-Anwendung; CV ist nicht-symbolisch.

Tipp: Weitere CV-Anwendungen: OCR, Medizin, Industrie/Landwirtschaft, Militaer/Luftfahrt, Automobil, Film - jeweils als Eingabe -> Ausgabe.

Kapitel: EKI06

Aufgabe 2 (Beginner) - MNIST-Bildrepräsentation

Wie wird ein einzelnes MNIST-Bild repräsentiert, wie sieht die Trainingsmatrix aus, und wie viele Spalten hat die Kaggle-CSV-Datei? Was bedeutet die Form (28, 28, 1)?

Lösung anzeigen
  • Ein Einzelbild (28x28 Graustufen) wird als Vektor der Laenge 28 x 28 = 784 dargestellt.
  • Jeder Pixel ist ein Grauwert (Beispielwerte 0 bis 255). Der Hintergrund ist 0, die Ziffer besteht aus positiven Werten.
  • Der Trainingsdatensatz ist eine Matrix der Form [55000, 784]: 55000 Bilder, je 784 Pixel.
  • Die Kaggle-CSV hat 785 Spalten: eine label-Spalte plus pixel0 bis pixel783.
  • Fuer ein CNN wird der Vektor in die raeumliche Form (28, 28, 1) gebracht: Hoehe = 28 px, Breite = 28 px, Kanal = 1 (Graustufen).

Falle: 784 (= 28 x 28) ist die Anzahl Pixel pro Bild; 785 ist die Anzahl CSV-Spalten (784 Pixel + 1 Label). Nicht verwechseln.

Tipp: Der eine Kanal (in der Folie als canal = 1 geschrieben) ist der einzelne Graustufen-Kanal. Bei Farbbildern waeren es 3 Kanaele (RGB).

Kapitel: EKI06

Aufgabe 3 (Beginner) - ANN: feed-forward vs. recurrent (Multiple-Choice)

Welche Aussage beschreibt ein feed-forward Netzwerk korrekt?

a) Ausgaben werden zu Eingaengen einer frueheren Schicht zurueckgeleitet. b) Ausgaben der einen Schicht sind die Eingaben der naechsten Schicht. c) Alle Neuronen einer Schicht sind untereinander verbunden. d) Es gibt keine Zwischenschichten, nur Eingabe und Ausgabe.

Lösung anzeigen

Richtig ist b).

Ein feed-forward network: Ausgaben der einen Schicht sind die Eingaben der naechsten Schicht. Die Information fliesst nur vorwaerts.

  • a) beschreibt ein recurrent network (Rueckkopplung zu frueheren Schichten).
  • c) beschreibt das Prinzip eines Fully Connected Layers, nicht den Netzwerktyp.
  • d) Ein ANN besteht aus Eingabeschicht, einer oder mehreren Zwischenschichten (hidden layers) und einer Ausgabeschicht.

Tipp: Grundtypen merken: feed-forward (nur vorwaerts) vs. recurrent (mit Rueckleitung).

Kapitel: EKI06

Fortgeschritten

Aufgabe 4 (Fortgeschritten) - Künstliches Neuron rechnen

Ein künstliches Neuron hat den Bias-Eingang in0=1in_0 = 1 mit w0=0,1w_0 = 0{,}1 sowie zwei weitere Eingaenge in1=2in_1 = 2 mit w1=0,5w_1 = 0{,}5 und in2=1in_2 = 1 mit w2=0,3w_2 = -0{,}3. Berechnen Sie die gewichtete Summe und die Ausgabe mit der Sigmoid-Aktivierung.

Lösung anzeigen

Schritt 1 - gewichtete Summe sum=iiniwisum = \sum_i in_i \cdot w_i:

sum=(10,1)+(20,5)+(1(0,3))=0,1+1,00,3=0,8sum = (1 \cdot 0{,}1) + (2 \cdot 0{,}5) + (1 \cdot (-0{,}3)) = 0{,}1 + 1{,}0 - 0{,}3 = 0{,}8

Schritt 2 - Sigmoid-Aktivierung out=11+esumout = \frac{1}{1 + e^{-sum}}:

out=11+e0,8=11+0,4493=11,44930,690out = \frac{1}{1 + e^{-0{,}8}} = \frac{1}{1 + 0{,}4493} = \frac{1}{1{,}4493} \approx 0{,}690

Die Ausgabe des Neurons betraegt also rund 0,69.

Tipp: Der Bias wird ueber in0=1in_0 = 1 und w0=biasw_0 = bias realisiert - er zaehlt einfach als konstanter Summand in sumsum.

Falle: Im Exponenten steht sum-sum. Bei positivem sumsum ist out>0,5out > 0{,}5, bei negativem sumsum ist out<0,5out < 0{,}5. Vorzeichen nicht vergessen.

Kapitel: EKI06

Aufgabe 5 (Fortgeschritten) - Kostenfunktion berechnen

Ein Netz mit 3 Ausgabeneuronen liefert die Ausgaben 0.92, 0.17 und 0.35 bei den Zielwerten 1.0, 0 und 0. Berechnen Sie die Kosten mit Cost=i(targetout)2Cost = \sum_i (target - out)^2.

Lösung anzeigen
Neuronouttarget(targetout)2(target - out)^2
10.921.0(1,00,92)2=0,082=0,0064(1{,}0 - 0{,}92)^2 = 0{,}08^2 = 0{,}0064
20.170(00,17)2=0,0289(0 - 0{,}17)^2 = 0{,}0289
30.350(00,35)2=0,1225(0 - 0{,}35)^2 = 0{,}1225
Cost=0,0064+0,0289+0,1225=0,1578Cost = 0{,}0064 + 0{,}0289 + 0{,}1225 = 0{,}1578

Die Kosten betragen 0,1578.

Tipp: Die Kostenfunktion ist die Summe der quadrierten Abweichungen. Quadrieren macht das Vorzeichen irrelevant und gewichtet grosse Fehler staerker (hier dominiert Neuron 3).

Falle: Immer (targetout)(target - out) quadrieren, nicht targetout|target - out|. Und ueber alle Ausgabeneuronen summieren.

Kapitel: EKI06

Aufgabe 6 (Fortgeschritten) - Die 5 Schritte der Backpropagation

Nennen Sie die 5 Schritte der Backpropagation in der richtigen Reihenfolge. Wer hat das Verfahren geprägt?

Lösung anzeigen
  1. Schritt 1: Leite die Trainingsdaten vorwaerts durch das Netzwerk.
  2. Schritt 2: Berechne den Unterschied (Fehler) zwischen tatsaechlichen und gewuenschten Ausgaben in der letzten Schicht.
  3. Schritt 3: Berechne fuer jedes Neuron in der letzten Schicht seinen Korrekturwert (Δ\Delta).
  4. Schritt 4: Iteriere rueckwaerts von der vorletzten Schicht bis zur Eingabeschicht und berechne fuer jedes Neuron seinen Korrekturwert unter Beruecksichtigung der bereits berechneten Korrekturwerte der naechsten Schicht.
  5. Schritt 5: Korrigiere jedes Gewicht mit Hilfe des Korrekturwerts des zugehoerigen Neurons.

Geprägt von D. E. Rumelhart, G. E. Hinton und R. J. Williams.

Tipp: Merkstruktur: erst vorwaerts (Schritt 1), dann Fehler und Deltas hinten (Schritte 2-3), dann rueckwaerts durchpropagieren (Schritt 4), zuletzt Gewichte anpassen (Schritt 5).

Kapitel: EKI06

Aufgabe 7 (Fortgeschritten) - CNN-Pipeline interpretieren

Interpretieren Sie das folgende Diagramm. Welche Phase erledigt welche Aufgabe, und welchem Level (low/medium/high) entspricht jede Stufe?

flowchart LR
  A["Input Layer (Low level, Pixel)"] --> B["Convolutional Layer"]
  B --> C["Pooling Layer"]
  C --> D["Fully Connected Layer"]
  D --> E["Output Layer (High level, Klassen)"]
Lösung anzeigen

Zuordnung der Phasen laut Folie:

  • Eingabe (Input Layer): Low level - die rohen Pixel.
  • Features erlernen (Convolutional + Pooling Layer): Medium level - hier werden Merkmale extrahiert. Die Convolutional-Schicht filtert das Bild mit einem Kernel; die Pooling-Schicht reduziert die Komplexitaet.
  • Klassifikation (Fully Connected Layer): wandelt die gelernten Merkmale in eine Klassenzuordnung um.
  • Ausgabe (Output Layer): High level - die Klassen.

Convolutional- und Pooling-Schichten koennen sich wiederholen (im MNIST-Beispiel: 2 Convolutional + 2 Pooling), bevor die vollverbundenen Schichten klassifizieren.

Tipp: Roter Faden des Deep Learning: von low level (Pixel) ueber medium level (Formen) zu high level (Klassen).

Kapitel: EKI06

Anspruchsvoll

Aufgabe 8 (Anspruchsvoll) - 2D-Faltung Schritt fuer Schritt

Falten Sie den zentralen 3x3-Ausschnitt des Eingabebildes mit dem Kernel und berechnen Sie den mittleren Wert der Feature Map (Position Zeile 1, Spalte 1, 0-indiziert). Schrittweite = 1.

Eingabebild (5x5):

1 0 0 1 0
0 1 1 0 1
1 0 1 0 1
1 0 0 1 0
0 1 1 0 1

Kernel (3x3):

1 0 0
0 1 1
1 0 1
Lösung anzeigen

Fuer die zentrale Position legt man den Kernel auf den 3x3-Ausschnitt der Bildzeilen 1 bis 3 und Spalten 1 bis 3 (0-indiziert):

Ausschnitt:

1 1 0
0 1 0
0 0 1

Elementweise Multiplikation mit dem Kernel und Aufsummierung:

(11)+(10)+(00)+  (00)+(11)+(01)+  (01)+(00)+(11)=1+1+1=3\begin{aligned} &(1\cdot1)+(1\cdot0)+(0\cdot0) \\ +\;&(0\cdot0)+(1\cdot1)+(0\cdot1) \\ +\;&(0\cdot1)+(0\cdot0)+(1\cdot1) = 1 + 1 + 1 = 3 \end{aligned}

Der mittlere Wert der Feature Map ist 3. Das passt zur vollstaendigen Feature Map aus der Folie:

5 1 3
2 3 2
2 2 4

Groessenreduktion: Aus 5x5 wird 3x3. Ergaenzend gilt (nicht auf den Folien): O=NF+1=53+1=3O = N - F + 1 = 5 - 3 + 1 = 3 bei Schrittweite S=1S = 1 ohne Randauffuellung.

Falle: Elementweise multiplizieren und dann summieren - nicht Matrixmultiplikation. Der Filter "wandert" mit Schrittweite 1; jede Position ergibt genau einen Wert.

Tipp: Convolution erhaelt die raeumlichen Beziehungen zwischen benachbarten Pixeln und verkleinert gleichzeitig das Bild.

Kapitel: EKI06

Aufgabe 9 (Anspruchsvoll) - Max-Pooling rechnen

Wenden Sie 2x2-Max-Pooling auf die folgende 4x4-Eingabe an (nicht ueberlappende 2x2-Bloecke, je das Maximum). Geben Sie die 2x2-Ausgabe an.

1 3 | 2 4
5 6 | 1 0
----+----
7 2 | 8 3
0 9 | 4 6
Lösung anzeigen

Fuer jeden 2x2-Block das Maximum bilden:

  • Oben links: max(1,3,5,6)=6\max(1, 3, 5, 6) = 6
  • Oben rechts: max(2,4,1,0)=4\max(2, 4, 1, 0) = 4
  • Unten links: max(7,2,0,9)=9\max(7, 2, 0, 9) = 9
  • Unten rechts: max(8,3,4,6)=8\max(8, 3, 4, 6) = 8

Ausgabe (2x2):

6 4
9 8

Tipp: Pooling selektiert einen Pixelbereich und berechnet daraus Maximum, Durchschnitt oder Summe. Beim Max-Pooling ist es das Maximum. Das Einfuegen eines Pooling-Layers nach jedem Convolution-Layer reduziert die Komplexitaet.

Falle: 2x2-Pooling halbiert jede Dimension (4x4 -> 2x2), es reduziert die Aufloesung, nicht die Anzahl der Kanaele.

Kapitel: EKI06

Aufgabe 10 (Anspruchsvoll) - Backpropagation-Delta der letzten Schicht

Ein Ausgabeneuron hat out=0,92out = 0{,}92 bei target=1,0target = 1{,}0. Berechnen Sie seinen Korrekturwert Δ\Delta mit Δi=f(sumi)(targetiouti)\Delta_i = f'(sum_i)\cdot(target_i - out_i), wobei fuer die Sigmoid gilt f(sumi)=outi(1outi)f'(sum_i) = out_i\,(1 - out_i).

Lösung anzeigen

Schritt 1 - Ableitung der Aktivierung (der Code verwendet out * (1.0 - out)):

f(sum)=out(1out)=0,92(10,92)=0,920,08=0,0736f'(sum) = out\,(1 - out) = 0{,}92 \cdot (1 - 0{,}92) = 0{,}92 \cdot 0{,}08 = 0{,}0736

Schritt 2 - Fehlerterm:

targetout=1,00,92=0,08target - out = 1{,}0 - 0{,}92 = 0{,}08

Schritt 3 - Delta:

Δ=f(sum)(targetout)=0,07360,08=0,005888\Delta = f'(sum)\cdot(target - out) = 0{,}0736 \cdot 0{,}08 = 0{,}005888

Der Korrekturwert betraegt also rund 0,00589.

Tipp: Fuer die Sigmoid gilt praktisch f(sum)=f(sum)(1f(sum))=out(1out)f'(sum) = f(sum)(1 - f(sum)) = out(1 - out) - man braucht sumsum nicht erneut, sondern nutzt direkt die Ausgabe outout.

Falle: Das ist die Delta-Formel der letzten Schicht. Fuer innere Schichten wird (targetout)(target - out) durch jwi,jΔj\sum_j w_{i,j}\,\Delta_j ersetzt.

Kapitel: EKI06

Klausur-Niveau

Aufgabe 11 (Klausur-Niveau) - Keras-Modell interpretieren

Interpretieren Sie das folgende Keras-Modell. Was macht jede Schicht, wie viele Filter nutzen die Convolution-Schichten, und warum hat die letzte Schicht genau 10 Neuronen mit softmax?

model = Sequential([
    Conv2D(32, (3,3), activation='relu', input_shape=(28,28,1)),
    MaxPooling2D(2, 2),
    Conv2D(64, (3,3), activation='relu'),
    MaxPooling2D(2,2),
    Flatten(),
    Dense(512, activation='relu'),
    Dense(10, activation='softmax')
])
Lösung anzeigen
  • Sequential([...]) = ANN-Topologie als Sequenz von Schichten.
  • Conv2D(32, (3,3)) = erste Convolutional-Schicht mit 32 Filtern der Groesse 3x3; input_shape=(28,28,1) ist das MNIST-Bild (28x28, 1 Kanal). activation='relu' ist die Aktivierungsfunktion.
  • MaxPooling2D(2, 2) = 2x2-Max-Pooling, reduziert die Komplexitaet.
  • Conv2D(64, (3,3)) = zweite Convolutional-Schicht mit 64 Filtern der Groesse 3x3.
  • MaxPooling2D(2,2) = zweites Pooling.
  • Flatten() = macht aus der 2D-Merkmalskarte einen einzigen Feature-Vektor.
  • Dense(512, relu) = erste vollverbundene Schicht (Klassifikationsteil).
  • Dense(10, softmax) = Ausgabeschicht mit 10 Neuronen (= Anzahl Klassen, Ziffern 0-9) und softmax fuer Wahrscheinlichkeiten.

Insgesamt: 2 Convolutional + 2 Pooling Schichten extrahieren die Merkmale (medium level), 2 Fully Connected Schichten klassifizieren. In einem Fully Connected Layer entspricht die Anzahl der Ausgabeneuronen der Anzahl der Klassen - deshalb 10.

Tipp: softmax in der letzten Schicht macht aus den 10 Ausgaben eine Wahrscheinlichkeitsverteilung; spaeter waehlt np.argmax die wahrscheinlichste Ziffer.

Kapitel: EKI06

Aufgabe 12 (Klausur-Niveau) - Keras-Workflow und One-Hot (angewandtes Szenario)

Beschreiben Sie die Vorverarbeitung der MNIST-Daten und erklaeren Sie One-Hot-Kodierung sowie One-Hot-Decoding. Warum muessen die Testdaten genauso vorverarbeitet werden wie die Trainingsdaten?

Lösung anzeigen

Vorverarbeitung (Reihenfolge laut Folie):

  1. Merkmale (Pixel) vom Label trennen: X = train.drop(['label'], axis=1), y = train['label'].
  2. Label One-Hot-kodieren (10 Klassen): Y = to_categorical(y, num_classes=10).
  3. Pixel normalisieren auf [0,1] durch Division durch 255: X = X/255.0.
  4. Vektor in die raeumliche Form reshapen: X = X.values.reshape(-1, 28, 28, 1) (Hoehe 28, Breite 28, Kanal 1).

One-Hot-Kodierung: Aus einer Ziffer wird ein 10-stelliger Vektor mit genau einer 1 an der Position der Ziffer. Beispiel: Label 3 -> [0,0,0,1,0,0,0,0,0,0], Label 5 -> [0,0,0,0,0,1,0,0,0,0].

One-Hot-Decoding: np.argmax(results, axis=1) waehlt den Index der hoechsten Wahrscheinlichkeit - das ist die vorhergesagte Ziffer.

Warum gleiche Vorverarbeitung fuer Testdaten? Die Testdaten muessen genauso vorverarbeitet worden sein wie die Trainingsdaten (gleiche Normalisierung /255 und gleiches Reshape auf (28,28,1)). Sonst passen die Eingaben nicht zu dem, was das Modell gelernt hat, und die Vorhersagen werden unbrauchbar.

Tipp: Statt aufwaendiger Kreuzvalidierung nutzt die Folie train_test_split() fuer ein einmaliges Aufteilen in Trainings- und Testdaten - Begruendung: Training und Kreuzvalidierung eines ANN dauern lange.

Falle: Normalisieren (/255.0) nicht vergessen - die Grauwerte 0..255 muessen auf [0,1] gebracht werden.

Kapitel: EKI06

Aufgabe 13 (Klausur-Niveau) - Innere Delta und Gewichtsupdate

Ein Neuron ii in einer Zwischenschicht hat outi=0,6out_i = 0{,}6. Die nachfolgende Schicht hat zwei Neuronen mit den Deltas Δ1=0,2\Delta_1 = 0{,}2 und Δ2=0,1\Delta_2 = -0{,}1, verbunden ueber die Gewichte wi,1=0,5w_{i,1} = 0{,}5 und wi,2=0,3w_{i,2} = 0{,}3. Berechnen Sie (a) den Korrekturwert Δi\Delta_i und (b) das aktualisierte Gewicht einer eingehenden Verbindung mit outj=0,4out_j = 0{,}4 und Lernrate η=0,1\eta = 0{,}1 (Startwert wj,i=0,2w_{j,i} = 0{,}2).

Lösung anzeigen

Teil a - inneres Delta Δi=f(sumi)jwi,jΔj\Delta_i = f'(sum_i)\cdot \sum_j w_{i,j}\,\Delta_j mit f(sumi)=outi(1outi)f'(sum_i) = out_i(1 - out_i):

Schritt 1 - gewichtete Summe der nachgelagerten Deltas:

jwi,jΔj=(0,50,2)+(0,3(0,1))=0,100,03=0,07\sum_j w_{i,j}\,\Delta_j = (0{,}5 \cdot 0{,}2) + (0{,}3 \cdot (-0{,}1)) = 0{,}10 - 0{,}03 = 0{,}07

Schritt 2 - Ableitung der Aktivierung:

f(sumi)=outi(1outi)=0,60,4=0,24f'(sum_i) = out_i(1 - out_i) = 0{,}6 \cdot 0{,}4 = 0{,}24

Schritt 3 - Delta:

Δi=0,240,07=0,0168\Delta_i = 0{,}24 \cdot 0{,}07 = 0{,}0168

Teil b - Gewichtsupdate wj,i=wj,i+ηΔioutjw_{j,i} = w_{j,i} + \eta \cdot \Delta_i \cdot out_j:

wj,i=0,2+0,10,01680,4=0,2+0,000672=0,200672w_{j,i} = 0{,}2 + 0{,}1 \cdot 0{,}0168 \cdot 0{,}4 = 0{,}2 + 0{,}000672 = 0{,}200672

Das aktualisierte Gewicht betraegt rund 0,20067.

Tipp: Das innere Delta unterscheidet sich vom Delta der letzten Schicht nur im zweiten Faktor: statt (targetout)(target - out) steht hier jwi,jΔj\sum_j w_{i,j}\,\Delta_j (die "durchpropagierten" Deltas der Folgeschicht).

Falle: Das Vorzeichen von Δ2=0,1\Delta_2 = -0{,}1 beachten - es reduziert die Summe. Und beim Update wird mit outjout_j des vorgelagerten Neurons multipliziert, nicht mit outiout_i.

Kapitel: EKI06