What does AI code look like?
Es sieht nicht allzu aufregend aus! Aber wie sieht es aus, wenn man es ausführt?
Man muss sich daran erinnern, dass KI meist nur ein Haufen Mathematik ist (besonders wenn man von maschinellem Lernen und Deep Learning spricht). Die Kodierung macht es dem Computer einfach möglich, sie auszuführen und aus den Daten zu lernen. Ich denke, es geht nicht so sehr darum, wie es aussieht und wie man den Code schreibt, sondern um mehr Verständnis dafür, was tatsächlich im Code vor sich geht!
Wie können wir etwas schaffen, das diese handschriftlichen Ziffern aus der MNIST-Datenbank erkennt?
Sieh dir das an. Nur ein wenig Python-Code, aber mit vielen mathematischen Definitionen.[1]
Aufgeregt?
Ich habe sogar Schwierigkeiten, es selbst zu verstehen.
Also, was macht es? Eine Menge Mathe!
Jede handschriftliche Ziffer besteht aus 28x28 Pixel, was insgesamt 784 Pixel für jede Ziffer ergibt. Jedes Pixel wird als Eingang in einem sogenannten neuronalen Netzwerk verwendet, mit dem wir das Netzwerk trainieren. Jedes Pixel gilt als Eingabe und durchläuft eine versteckte Schicht, die im unteren Bild auf 15 Neuronen eingestellt ist. Von dort aus erhalten wir die Schätzung, welche Ziffer es am ehesten sein wird. D.h. wir untersuchen, welche Ziffer in der Ausgabeschicht die höchste Aktivierung hat. Um es zu visualisieren, sehen Sie so aus:[2].
Was passiert also, wenn wir den Code ausführen? Die Art des von uns eingerichteten Netzwerks wird als rückgekoppeltes neuronales Netzwerk bezeichnet, was bedeutet, dass alle Daten in eine Richtung gehen. Wir verwenden einen Rückpropagationsalgorithmus, um den Fehler zu berechnen, den wir bei den aktuellen Daten haben, wir ändern die Einstellungen und laufen wieder durch das neuronale Netzwerk.
Wir erhalten diese Ausgabe
Wir sehen, dass unser neuronales Netzwerk in der ersten Runde in der Lage war, 51% aller Ziffern korrekt zu klassifizieren, und wir haben es trainiert, 81% aller handschriftlichen Ziffern korrekt zu klassifizieren. Eine ziemlich gute Verbesserung, oder? Wenn Sie die Ziffern zufällig erraten, erhalten Sie eine Genauigkeit von 10%! Die Genauigkeit kann noch weiter verbessert werden, sie erfordert nur eine Menge Rechenleistung. Darüber hinaus können Änderungen am Code auch die Lerngeschwindigkeit optimieren. Mit einem normalen Computer werden Sie wahrscheinlich eine Fehlerquote von weniger als 4% erreichen können, während die besten Ergebnisse mit einer Fehlerquote von weniger als 1% erzielt werden[3].
Also, was haben wir hier gemacht?
In dieser Codezeile teilen wir dem Netzwerk mit, dass es das gibt::
784 Eingangsneuronen
30 ausgeblendete Ebenen
10 Ausgangsneuronen
In dieser Codezeile verwenden wir eine Methode namens stochastischer Gradientenabstieg, um unser Netzwerk zu trainieren und unsere Kosten zu senken":
Wir gehen durch 10 Epochen, d.h. wie oft wir durch das Netzwerk laufen und es verbessern.
Wir wollen eine Mini-Batchgröße von 10 haben.
Unsere Lernrate ist 0,1 %.
Hier wird es wahrscheinlich etwas schwieriger zu greifen. Aber stellen Sie sich die Mini-Batchgröße als die Stichprobengröße vor, die wir in unserem Netzwerk verwenden, während die Lernrate angibt, wie schnell wir mit unserem Lernen vorankommen. Warum setzen wir also unsere Lernrate nicht auf sehr hoch? Es ist wahrscheinlich, dass unser Netzwerk nie besser wird, da wir zu große Schritte unternehmen. Stellen Sie sich vor, wir wollen Schritte unternehmen, um die Position dieser Kugel zu minimieren:
Wenn wir jedes Mal einen zu großen Schritt machen, enden wir einfach auf der anderen Seite des Bereichs und gehen nie auf das Minimum zurück (What is the meaning of the learning rate in neural networks?).
Wie kann man also selbst mit KI-Code herumspielen?
Gehen Sie zu GitHub und laden Sie den obigen Code herunter: mnielsen/neural-networks-and-deep-learning
Lesen Sie mehr über KI in diesem kostenlosen Online-Buch: Neural networks and deep learning
Öffnen Sie Ihr Terminal und geben Sie den Code von oben ein, und Sie werden sehen, dass Ihr Netzwerk zu lernen beginnt! Probieren Sie verschiedene Einstellungen der Epochen, der Größe der Mini-Batch und der Lernrate aus.
Diese Antwort basiert zu einem großen Teil auf diesen beiden Quellen, und ich empfehle dringend, daraus zu lernen. Beide Links können kostenlos gelesen und heruntergeladen werden. Er akzeptiert Spenden in beliebiger Höhe, aber Sie können selbst entscheiden (ich kenne den Autor nicht, aber ich schätze sein Material sehr, und hoffe, Sie werden es tun).
Denken Sie daran, dass dies nur ein Bereich des riesigen Bereichs der KI ist. Es gibt viele Ansätze, um diese Ziffern zu erkennen. Ich habe gerade einen benutzt! Außerdem geht es bei der KI, wie Sie wahrscheinlich schon wissen, nicht nur um die Erkennung von handschriftlichen Ziffern, sondern auch um viele andere Bereiche!
Andere Lernressourcen:
Maschinelles Lernen vonAndrew Ng: Machine Learning | Coursera
Es sieht definitiv hart aus, aber mit grundlegenden Mathematik- und Programmierkenntnissen (oder der Bereitschaft, sie zu lernen) werden Sie und Ihr neuronales Netzwerk schnell lernen!
Fußnoten
[1] mnielsen/neural-networks-and-deep-learning
[2] Neural networks and deep learning
[3] MNIST handwritten digit database, Yann LeCun, Corinna Cortes and Chris Burges