Rezension (1/2): deeplearning.ai

deeplearning.ai ist eine Serie von Kursen für Deep Learning. Die Serie besteht aus 5 Kurse und 4 davon stehen im Moment zur Verfügung. Da ich drei Wochen im Urlaub hatte, habe ich die Kursen gemacht. In diesem Eintrag möchte ich dazu äußern.

Bilderkennung

Deep Learning

Deep Learning bezeichnet normalerweise die Theorie eines neuronalen Netz, eines Modells von maschinellem Lernen. Da man mit einem neuronales Netz ein sehr kompliziertes Modell erstellen kann, wird ein neuronales Netz für verschiedene Erkennungssystem verwendet. Bilderkennung und Spracherkennung sind bekannte Beispiele davon.

Es gibt mehrere Online-Kurse für Deep Learning. Ein davon ist Neural Networks for Machine Learning. Der Unterricht ist immerhin für mich sehr gut, aber so akademisch, dass viele Leute den Kurs schlecht finden. Keinen anderen Kurs für Deep Learning kenne ich, obwohl es im Internet verschiedene Angebote gibt. Ich wollte irgendwann intensiv Deep Learning lernen wollte, aber trotzdem habe ich keinen Kurs außer dem Kurse von Prof. Hinton gemacht. Das liegt daran, dass ich die Theorie lernen wollte, so dass ich ein Modell ohne Framework schreiben kann.

Prof. Andrew Ng, der Dozent der Serie deeplearning.ai, ist Forscher von neuronalem Netz und bekannt für den Kurs Machine Learning. Im Kurs wird ein einfaches neuronales Netz (fully connected neural networks without regularisation) erklärt. Der Kurs ist gleichzeitig praktisch und theoretisch. Deshalb habe ich erwartet, dass die Serie auch praktisch und theoretisch ist.

Die Serie

Wie ich geschrieben habe, besteht die Serie aus 5 Kursen und einen davon kann man noch nicht machen. Über die genaue Beschreibung der Kurse kann man sich an dieser Seite informieren. Die Voraussetzung der Serie ist Kenntnisse auf Python. Idealerweise sollte man auch numpy kennen. Natürlich muss man Kenntnisse auf Differentialrechnung und lineare Algebra haben. Kenntnisse auf Data-Mining ist nur gut zu haben.

1. Neural Networks and Deep Learning

Die Einführung zum Deep Learning. Wer den Kurs "Machine Learning" von Prof. Andrew Ng gemacht hat, hat theoretisch das Inhalt schon gelernt. Also Themen sind einfach: Logistische Regression (als das einfachste neuronale Netz), Gradienten Verfahren, neuronales Netz. ReLU und tanh werden für eine "activation function" eingeführt.

Der Dozent erklärt auch die Differentialrechnung. Aber Differentialrechnung ist "high school mathematics". Sie ist gar nicht schwer zu verstehen. Wer ein Modell mit maschinellem Lernen implementieren wollte, soll Differentialrechnung im Voraus lernen.

Was ich im Unterricht nicht mag, ist die Darstellung von "update". Also er schreibt

$$da = \frac{\partial \mathcal L}{\partial a}.$$

Das ist mir gar nicht akzeptabel. Deshalb habe ich immer $\delta a$ statt $da$ geschrieben.

Meiner Meinung nach ist der Kurs ein "touchstone" für andere Kurse: Wer diesen Kurs nicht leicht findet, kann anderen Kursen nicht folgen.

Das erste Bild in diesem Eintrag ist die Vorhersage des Modells, das ich für eine Aufgabe des Kurses gemacht habe. Die Anzahl der Units der hidden layers ist: 20, 7, 5, 2 und das Netz ist fully connected. (Also kein convolution.)

Die Katze des Fotos war in meinem Elternhaus. (Sie war irgendwohin weg.) Das Modell kann erfolgreich die Katze erkennen.

Kurs-Zertifikat

2. Improving Deep Neural Networks

Im Kurs geht es um die Optimierung (Gradienten Verfahren, Momentum, RMSprop, Adam) und regularization (weight decay, Dropout). In der letzten Woche wird Tensorflow als "deep learning framework" eingeführt. Die letzte Aufgabe ist die Erstellung eines neuronalen Netzes mit Tensorflow.

Die Erklärung der Optimierung und der regularization ist richtig ausführlich, während die Erklärung von Tensorflow nur oberflächlich ist. Aber sie ist genug für den Grund, warum man Tensorflow lernen soll.

Meiner Meinung nach ist ein Kriterium eines guten Kurses, dass man nach dem Kurs alles Gelerntes implementieren kann. Dieser Kurs erfüllt sicherlich das Kriterium.

Kurs-Zertifikat

3. Structured Machine Learning Projects

Dieser Kurs ist richtig Besonderes. Im Kurs geht es darum, wie man ein Projekt für deep learning durchführen kann/soll. Man lernt

  1. wie man "training/dev/test" sets verwalten soll,
  2. was man machen soll, wenn die Genauigkeit seines Modells schlecht ist, und
  3. transfer learning.

Vor allem ist der erste Punkt ganz neu für mich und die Ära von Big-Data fällt mir ein. Normalerweise verteilt man eine Datenmenge in 3 Mengen: training set, validation set und test set. Wir nehmen an, dass die Verteilung der Daten gleich ist. Das liegt daran, dass das Ziel von statistischem Lernen ist, die Verteilung der Daten als ein mathematisches Modell darzustellen. Wir benutzen die Validation-Set, um ein gutes Modell auszuwählen und mit der Test-Set wird die Genauigkeit des trainierten Modell geschätzt. (Vergessen Sie CV hier.)

--------------------------------------------------------
|        training set        | validation |    test    |
--------------------------------------------------------
             60%                   20%          20%

In einem Big-Data Projekt verteilt man die riesige Datenmenge wie das folgende Diagramm.

--------------------------------------------------------
|              training set               | dev | test |
--------------------------------------------------------
                   94%                       3%    3%

Weil die Große der Daten wirklich riesig ist, sind 3% der Datenmenge noch groß genug. Beispielsweise entspricht 1% 10k Zeilen. Die Dev-Set entspricht der Velidation-Set in einem normalen Projekt.

Auffallend ist, dass man NICHT annimmt, dass die Training-Set und Dev-Set (Validation-Set) die gleiche Verteilung haben. Wichtig ist, dass die dev-Set und die test-Set die gleiche Verteilung haben, so dass man die Genauigkeit eines trainierten Modells mit dev-Set schätzen kann.

Die Hauptsache, wir können das Muster der Daten mit neuronalem Netz herausfinden, wenn wir riesige Datenmenge haben. Angenommen, dass wir sehr viele (gute) Fotos von Tieren haben, die schon richtig klassifiziert wurden. (Foto von welchem Tier.) Dann können wir glauben, dass man das Muster von Katzen mit neuronalem Netz herausfinden kann. Also die Units können die Eigenschaften von Katze lernen. Das ist nur eine Annahme, aber wenn das trainierte neuronale Netz richtig Fotos in der Dev-Set klassifizieren kann, geht hervor, dass das Modell das Muster von Katzen gut erkennen kann und wir das Modell verallgemeinern können.

Das erste Bild in diesem Beitrag ist natürlich nicht in der Training-Set, aber trotzdem kann das Modell die Katze erkennen. (Eigentlich ist die Training-Set sehr klein.)

Der dritte Punkt, transfer learning, ist eine verallgemeinerte Version der Nutzung eines trainierten Modells. Diese Idee ist nicht neu (e.g autoencoder). Aber die Idee von transfer learning schlägt vor, proaktiv ein trainierte Modell in einem anderen Modell zu benutzen.

Man unterscheidet manchmal Deep Learning von maschinellem/statistischem Lernen. Vielleicht liegt das daran, was man in diesem Kurs lernen kann.

Kurs-Zertifikat

4. Convolutional Neural Networks

Convolutional Neural Network (CNN) ist ein typisches neuronales Netz, das oft für Bilderkennung verwendet wird. Meiner Meinung nach gibt es relativ viel praktische Themen im Kurs: Data Augmentation, transfer learning, konkrete Beispiele von CNN, usw. Vor allem finde ich, dass Face Recognition ein interessantes Thema ist, weil die Frage anders als eine normale Frage in maschinellem Lernen ist.

Übrigens, "Adversarial examples" werden nicht im Kurs erwähnt. (Kurze Erklärung von adversarial examples.) Ich finde dieses Thema sehr wichtig, weil solche Beispiele hervorgehen, dass ein neuronales Netz eigentlich das Muster (oder die Gestalt) einer Objekt nicht gut erkennen kann. Also ein neuronales Netz kann anfällig sein.

Neben einem CNN wird endlich Keras eingeführt. Keras ist ein "wapper class" von einem Deep Learning Framework, wie TensorFlor und Theano. Also mithilfe von Keras kann man ein neuronales Netz einfach erstellen. Es gibt drei Optionen für das Backend von Keras. Aber gerade unterstützt Google offiziell Keras. (cf. tf.keras)

In den Aufgaben erstellt man mehrere neuronale Netze und benutze trainierte Modelle auch. Das finde ich gut, aber die Qualität des Python-Codes ist eigentlich nicht gut. (Es geht um die Definition einer Funktion.)

Kurs-Zertifikat

5. Sequence Models (coming soon)

Diesen Teil erzähle ich, nachdem ich dem Kurs gemacht habe. Da er am 29.01. veröffentlicht wird, schreibe ich Februar darüber.

Share this page on        
Categories: #rezension  #data-mining