Skip to main content

Bericht Mini-Challenge 1

In diesem Bericht werden die Ergebnisse der ersten Mini-Challenge dargestellt und interpretiert.
Created on April 9|Last edited on April 26


Overfit test

Depth of MLP

Analyze Filtergrösse

Analyze Kernelgrösse

In diesem Test habe ich die Kernelgrösse in einem CNN mit zwei CNN-Layer und fünf fully-connected Layern analysiert.

Modelle

Das Basismodell besteht aus zwei CNN-Layern (Conv2d, ReLU, MaxPool2d) (Features: 3->32->256), einem AdaptiveAvgPool2d Layer und fünf MLP-Layern (256->128->64->32->16->10). Die Modelle unterscheiden sich jeweils durch die Kernelgrösse der beiden CNN-Layern. Und zwar wie folgt:
  • kernel-1: kernel_size=1
  • kernel-1: kernel_size=2
  • kernel-1: kernel_size=3
  • kernel-1: kernel_size=5
  • kernel-1: kernel_size=7
Alle Modelle habe ich mit folgenden Hyper-Parametern trainiert: batch size: 128, epochs: 50, lr: 0.1, weights_init: "He".

Ergebnisse


Run set
5


Beobachtungen

  • Grössere Kernelsize führt zu geringerem train_loss.
  • Grössere Kernelsize führt nicht zwingen zu geringerem test_loss. Einen Unterschied ist nur zwischen den Kernelsizes 2, 3, 5, 7 und der Kernelsize 1 festzustellen, wobei die Kernelsize 1 einen grösseren test_loss hat. Eine grössere Kernelsize lässt das Modell lediglich schneller konvergieren.
  • Eine grössere Kernelsize führt zu einer besseren train_accuracy und test_accuracy.
  • Ab einer Kernelgrösse von 3 ist der Verlauf des test_loss und der test_accuracy ein bisschen wiggly.

Interpretation

  • Eine grössere Kernelsize wirkt sich positiv auf die Performance der Bilderklassifikation aus. Des Weiteren konvergiert das Modell schneller.
  • Allerdings brauchen grössere Kernels viel mehr Rechenleistung.
  • Der grosse Unterschied zwischen der Kernelsize 1 und den restlichen Kernelsizes erkläre ich mir wie folgt: Ein Convolutionlayer mit Kernelgrösse 1 hat einen 1x1 Filter, welcher keine besseren Informationen extrahieren kann, ausser die Daten in mehr Featurevolumes zu skalieren. Das Ergebnis sind sozusagen mehr Ansichten auf die Daten, die jeweils anders skaliert sind.

Analyze Stride

In diesem Test habe ich die Grösse der Stride in einem CNN mit zwei CNN-Layer und drei fully-connected Layern analysiert.

Modelle

Das Basismodell besteht aus zwei CNN-Layern (Conv2d, ReLU, MaxPool2d) (Features: 3->32->256), einem AdaptiveAvgPool2d Layer und drei MLP-Layern (256->64->10). Die Modelle unterscheiden sich jeweils durch die Stridegrösse der beiden CNN-Layern. Und zwar wie folgt:
  • stride-1: conv_stride=1
  • stride-2: conv_stride=2
Alle Modelle habe ich mit folgenden Hyper-Parametern trainiert: batch size: 128, epochs: 50, lr: 0.1, weights_init: "He".

Ergebnisse


Run set
2


Beobachtungen

  • Der train_loss wird durch einen grösseren Stride schneller minimiert. Der test_loss steigt mit stride=2 deutlich schneller an als der test_loss des Modells mit stride=1.
  • stride=2 erzeugt eine höhere train_accuracy als stride=1
  • Die test_accuracy des Modells mit stride=2 konvergiert schon nach ca. 10 Epochen bei 50% während das Modell mit stride=1 eine Genauigkeit von 70% nach ca. 20 Epochen erreicht.

Interpretation

  • Das Modell mit stride=1 ist besser als das Modell mit stride=2, weil es nicht overfitted.
  • Das Modell mit stride=2 erzeugt eine ungefähr halb so grosses Bild nach jedem Layer. Da die Bilder schon jetzt sehr klein sind, vermute ich, dass so zu viele Informationen verloren gehen. Ich denke, dass bei grösseren Bildern ein grösserer Stride dem Modell helfen würde Overfitting zu verhindern. Hier erzeugt es aber das Gegenteil.

Analyze Padding

Gridsearch: Lernrate / batchsize

Schätzfehler berechnen

Analyze L2/Dropout

Analyze Batchnorm Regularisierung

In diesem Test habe ich mein bestes Modell genommen und den Einfluss von Batchnorm Regularisierung analysiert.

Modell

Die Modelle besteht aus drei CNN-Layern (Conv2d, ReLU, MaxPool2d) (Features: 3->16->64->256), einem AdaptiveAvgPool2d Layer und zwei MLP-Layern (256->64->10). Jeweils vor der ReLU-Aktivierungsfunktion (in den Convolution-Layers sowie im hidden fully connected Layer) ist ein BatchNorm-Layer eingefügt.
Ein Modell hat keine BatchNorm-Layers aber sonst der gleiche Aufbau ("batch-norm-base"). Die restlichen Modelle unterscheiden sich durch den Hyperparameter "momentum":
  • batch-norm-momentum-0.0
  • batch-norm-momentum-0.1
  • batch-norm-momentum-0.5
  • batch-norm-momentum-0.9

Ergebnisse


batch norm
5


Beobachtungen

  • Der Verlauf der Trainingsgenauigkeit und train_loss ist für alle Momentum identisch.
  • Der Verlauf der Trainingsgenauigkeit und train_loss des Basismodells ist aber anders:
    • Der train_loss ist höher und wird bei Epoche 34 NaN
    • Die train_accuracy ist tiefer und wird bei Epoch 35 0.1 (was so gut wie der Zufall ist)
  • Das Basismodell erreicht etwa gleiche Genauigkeit wie die BatchNorm modelle mit (ausser batch-norm-momentum-0.0) befor es bei Epoche 34 auf 0.1 fällt.
  • Das Modell batch-norm-momentum-0.0 erreicht eine tiefere Testgenauigkeit (30-35%).
    • Die restlichen Modelle konvergieren zu einer Trainingsgenauigkeit von 1 und einer Testgenauigkeit von 72%.
  • In den ersten Epochen der BatchNorm Modelle sind sehr starke wacklige Verläufe zu sehen.
  • Der test_loss steigt an und sinkt dann wieder.

Interpretationen

  • Der Parameter momentum im Batchnorm-Layer hat keinen Einfluss auf die Accuracy sofern er nicht 0 ist.
  • Batchnormalisierung führt zu einem starken overfitting auf den Trainingsdaten (train_accuracy von 100%) und nach einer gewissen Zeit zu stabilen
  • Dass der train_loss 0 wird, der test_loss plötzlich wieder abnimmt und stabil wird deutet beides auf einen double descent hin (epoch-wise).
  • Das plötzliche Auftreten von NaN-Werten im train_loss könnte einer Instabilität zugrunde liegen.

Analyze Adam

In diesem Test habe ich mein bestes Modell genommen und den Einfluss von Adam statt SGD analysiert.

Modell

Die Modelle sind die gleichen wie in der Aufgabe in der es um Gridsearch ging. Ein Modell wird mit SGD trainiert, die anderen Stellen eine Gridsearch mit Lernrate [0.01, 0.1] und weight_decay (L2-Regularisierung) [0.0, 0.001, 0.01, 0.1] von Modellen dar, die mit Adam trainiert wurden.

Ergebnisse


Run set
9


Beobachtungen

  • Eine Lernrate von 0.005 ist für Adam (ohne Dropout) zu gross, beide loss und accuracy sind konstant.
  • Adam braucht eine wesentlich tiefere Lernrate.
  • Adam konvergiert schneller:
    • adam-dropout-lr-0.001 schon bei Epoche 15 eine test_accuracy
      • sgd ist 8 Prozentpunkte tiefer bei Epoche 15
  • Ergebnisse mit Adam sind auf der test_accuracy 0.8% schlechter (für adam-dropout-lr-0.0005)

Interpretation

  • Die Ergebnisse die durch Adam erzielt werden sind etwa ähnlich gut (wenn man die richtige Lernrate und Dropout verwendet).
  • Modelle mit Adam konvergieren schneller.
  • Ich vermute, dass Adam so eine tiefe Lernrate braucht kommt vom Overshootingproblem.