[Python] Deep Learning: Ich habe versucht, Deep Learning (DBN, SDA) ohne Verwendung einer Bibliothek zu implementieren.

Zweck dieses Eintrags

Dieses Mal möchte ich *** Deep Learning vorstellen, das implementiert wurde, ohne die *** Bibliothek zum Lernen zu verwenden. Die Sprache ist Python.

Es gibt jedoch Bücher, auf die ich mich bezog. In diesem Eintrag werde ich das Buch vorstellen und den in Python neu implementierten Code basierend auf dem im Buch beschriebenen Java-Code erläutern.

Hintergrund

Ich denke nicht, dass die Tatsache, dass tiefes Lernen als Funke für den jüngsten KI-Boom Aufmerksamkeit erregt, nicht so viel ist, wie ich hier erwähnen werde. Angesichts der Tatsache, dass in letzter Zeit eine große Anzahl solcher Bücher veröffentlicht wurde, ist leicht zu erkennen, wie viel Aufmerksamkeit sie erhalten haben.

Allerdings ist nicht jeder auf der Welt auf KI spezialisiert, und vielmehr sind solche Leute wirklich auf einige Gruppen beschränkt. Viele Leute

Ich arbeite momentan nicht direkt am Deep Learning, aber ich kann es nicht ignorieren, wenn man bedenkt, dass AI in naher Zukunft als Infrastruktur eingeführt wird.

Ich denke du hast das Gefühl. Deshalb denken viele Leute, dass sie vorerst lernen sollten, und ich bin einer von ihnen.

Als ich das Buch aufnahm, hatte ich das Gefühl, dass es tendenziell in die folgenden Typen polarisiert ist (es ist eine Tendenz und es ist mehr als genug, dass ich ein gutes Buch vermisse). ..

Ich zögerte unnötig, die Bibliothek zu benutzen, ohne den Inhalt überhaupt zu kennen, und fragte mich, ob es ein Buch geben würde, das etwas weiter ging - ich schaute es mir eine Weile an (um es nicht selbst zu implementieren). Vernachlässige orz Nein, ich bin nicht auf tiefes Lernen für mich selbst spezialisiert ^^;).

Begegnung mit guten Büchern

Dann kam ein Buch mit genau dem richtigen Gefühl heraus, also sprang ich hinein und las alles auf einmal. Dies war ein großer Erfolg.

[Nest, Deep Learning Java-Programmiertheorie und Implementierung von Deep Learning, Impress, 2016. ](https://px.a8.net/svt/ejp?a8mat=2NZCQW+6MQUCY+249K+ BWGDT & a8ejpredirect = https% 3A% 2F% 2Fwww.amazon.co.jp% 2Fdp% 2F4844381288% 2F% 3Ftag% 3Da8-affi-271202-22)

Das Konzept, es mit einem einfachen, aber supereinfachen Modell zu implementieren, passt zu meiner Vorstellung, dass dies für das Verständnis am nützlichsten ist! Beweisen Sie analytisch und beenden Sie hoch! Stattdessen halte ich es für erwähnenswert, dass die Erklärung so ist, dass die Unterschiede in den Eigenschaften zwischen den Methoden sinnlich erfasst werden können.

Nachdem ich dies gelesen hatte, wollte ich wissen, wo es einen Sprung in der mathematischen Erweiterung und einen etwas tieferen Teil gibt. Als ich die folgenden Standardbücher las, bekam ich einen erfrischenden Kopf.

[Okaya, Deep Learning, Kodansha, 2015. ](https://px.a8.net/svt/ejp?a8mat=2NZCQW+6MQUCY+249K+ BWGDT & a8ejpredirect = https% 3A% 2F% 2Fwww.amazon.co.jp% 2Fdp% 2F4061529021% 2F% 3Ftag% 3Da8-affi-271202-22)

[Aso et al., Deep Learning, Modern Science, betreut von der Society of Artificial Intelligence, Kamishima ed., 2015. ](https://px.a8.net/svt/ejp?a8mat=2NZCQW+6MQUCY+249K+ BWGDT & a8ejpredirect = https% 3A% 2F% 2Fwww.amazon.co.jp% 2Fdp% 2F476490487X% 2F% 3Ftag% 3Da8-affi-271202-22)

Also, [Nest, Deep Learning Java-Programmiertheorie und Implementierung von Deep Learning, Impress, 2016. ](Https://px.a8.net/svt/ejp?a8mat=2NZCQW+6MQUCY+249K+BWGDT&a8ejpredirect=https%3A%2F%2Fwww.amazon.co.jp%2Fdp%2F484438128F2% affi-271202-22) reicht nicht aus, um nur die Bibliothek zu benutzen, aber ich denke, dass es ein Buch ist, das für Anfänger geeignet ist, um es für diejenigen zu lesen, die eine hohe Hürde haben, plötzlich in ein Fachbuch einzusteigen.

Wenn Sie sich auf Convolutional Neural Networks (CNN) spezialisiert haben, sind die folgenden Bücher bei weitem die besten. Obwohl es auf CNN spezialisiert ist, trägt es definitiv zum Verständnis dieser Implementierung bei.

[Saito, Deep Learning aus der Scratch-Theorie und Implementierung von Deep Learning aus Python, O'Reilly Japan, 2016. ](https://px.a8.net/svt/ejp?a8mat=2NZCQW + 6MQUCY + 249K + BWGDT & a8ejpredirect = https% 3A% 2F% 2Fwww.amazon.co.jp% 2Fdp% 2F4873117585% 2F% 3Ftag% 3Da8-affi-271202-22)

[Deep Learning Java-Programmiertheorie und Implementierung von Deep Learning](https://px.a8.net/svt/ejp?a8mat=2NZCQW+6MQUCY+249K+BWGDT&a8ejpredirect=https%3A%2F%2Fwww.amazon.co.jp % 2Fdp% 2F4844381288% 2F% 3Ftag% 3Da8-affi-271202-22) befasst sich auch mit CNN, so dass Sie es natürlich auch hier erheblich verstehen können. Ich denke, dieses Buch ist insofern ausgezeichnet, als es typische Methoden aus der Vogelperspektive in kurzer Zeit vergleicht.

Deep Learning von Grund auf neu erklärte genau die Grundlagen der Grundlagen neuronaler Netze und war in der Zwischenzeit mit CNN verbunden! Der Eindruck ist, dass es wie eine Geschichte aufgebaut ist.

Migration zu Python

[Java-Programmiertheorie für tiefes Lernen und Implementierung von tiefem Lernen](https://px.a8.net/svt/ejp?a8mat=2NZCQW+6MQUCY+249K+BWGDT&a8ejpredirect=https%3A%2F%2Fwww.amazon.co.jp Ich konnte den in% 2Fdp% 2F4844381288% 2F% 3Ftag% 3Da8-affi-271202-22) beschriebenen Java-Beispielcode ausführen, aber ich dachte, es wäre langweilig, ihn nur auszuführen. Also habe ich mich dieses Mal entschlossen, selbst zu Python zu wechseln.

Ziele sind *** Deep Belief Nets (DBN) *** und *** Stacked Denoising Autoencoder (SDA) ***,

Das Tolle ist der Autor, Mr. Negago, und ich fahre nur kostenlos. Ich dachte jedoch, dass es eine ziemlich verrückte Handlung wäre, sich nur ohne nachzudenken zu bewegen, also machte ich die folgenden Regeln.

Ich habe nur gesagt, dass es eine etwas strenge Kopie des Sutra ist.

Einführung in Python-Code

Code-Speicherort

Der Code wird unten veröffentlicht.

Ausführungsmethode

Die Ausführungsmethode für jeden Algorithmus ist wie folgt.

cd <cloned path>/DeepLearningWithPython/DeepNeuralNetworks
python DeepBeliefNets.py
cd <cloned path>/DeepLearningWithPython/DeepNeuralNetworks
python StackedDenoisingAutoencoders.py

Für die Softwarekonfiguration [Deep Learning Java-Programmiertheorie und Implementierung von Deep Learning](https://px.a8.net/svt/ejp?a8mat=2NZCQW+6MQUCY+249K+BWGDT&a8ejpredirect=https%3A%2F%2Fwww. Amazon.co.jp% 2Fdp% 2F4844381288% 2F% 3Ftag% 3Da8-affi-271202-22), beziehen Sie sich daher bitte darauf.

Ergebnis

Die folgenden drei Arten von Ergebnissen werden ausgegeben.

-------------------------------
DBN(or SDA) Regression model evaluation
-------------------------------
Accuracy:  100.0 %
Precision:
class 1: 100.0 %
class 2: 100.0 %
class 3: 100.0 %
Recall:
class 1: 100.0 %
class 2: 100.0 %
class 3: 100.0 %

Die Bedeutung jedes Ergebnisses ist wie folgt.

Es wird durch eine mathematische Formel wie folgt ausgedrückt.

Accuracy = \frac{TP + TN}{TP + TN + FP + FN} \\
Precision = \frac{TP}{TP + FP} \\
Recall = \frac{TP}{TP + FN}

Die Aufteilung von TP, TN, FP und FN ist in der folgenden Tabelle dargestellt.

Positiv und vorhergesagt Negativ und vorhergesagt
Richtig ist richtig True Positive (TP) False Negative (FN)
Negativ ist richtig False Positive (FP) True Negative (TN)

Überblick über die Verarbeitung

Netzwerkmodell

Das verwendete Netzwerkmodell ist für beide DBN / SDA gleich.

Lernfluss

Für beide DBN / SDA lernen Sie Folgendes.

--Vortraining

pre_training.png

--Feintuning

fine_tuning.png

Grober Unterschied zwischen DBN / SDA

Beide Methoden verwenden genau das gleiche Modell, und die auf die gleiche Weise erstellten Testdaten können ordnungsgemäß gelernt werden. Was ist der Unterschied, wenn Sie mit verschiedenen Methoden fast die gleichen Ergebnisse erzielen? Ich mache mir darüber Sorgen.

Gemeinsamer Punkt

Es kann gesagt werden, dass der gemeinsame Punkt beider Verfahren darin besteht, Parameter zu erhalten, die mit den Eingabe- / Ausgabedaten des zweischichtigen Netzwerks übereinstimmen. Im Fall von DBN werden aufgrund der Eigenschaften des Boltzmann-Maschinennetzwerks *** Eingabedaten *** und *** Zustand *** verglichen, aber wenn Sie Ihre Augen vor den Details schließen, sind sie im Wesentlichen gleich. Ich mache das.

Durch die Verwendung von Daten mit verschiedenen Geräuschen, die in der Lernphase hinzugefügt wurden, ist es außerdem üblich, dass sie bei der Identifizierung in der Produktion gegen Rauschen beständig sind. Es kann interpretiert werden, dass es einen Unterschied in der Art und Weise gibt, wie das Rauschen gegeben wird.

Unterschied

Im Fall von DBN wird wahrscheinlich bestimmt, ob das Neuron aktiviert ist oder nicht. Obwohl sie sich im selben Zustand befinden, können sie aktiviert sein oder nicht. Diese Eigenschaft entspricht dem automatischen Hinzufügen von Rauschen zu den trainierten Parametern. Der Algorithmus fügt ohne Erlaubnis Rauschen hinzu.

Andererseits wird im Fall von SDA etwas Rauschen zu den Trainingsdaten hinzugefügt und dann in das Lerngerät eingegeben. Dies liegt daran, dass der Algorithmus nicht die Eigenschaft hat, sich selbst Rauschen hinzuzufügen, da er deterministisch abläuft.

Unter diesen Gesichtspunkten kann verstanden werden, dass es die folgenden Unterschiede in den Merkmalen gibt.

Es scheint immer noch verschiedene Ansichten zu der Frage zu geben, wie sich diese Merkmale auf das Lernen auswirken und warum die Initialisierung auf diese Weise für tiefes Netzwerklernen funktioniert. Mein Verstand ist noch nicht organisiert, also werde ich es hier nicht sagen lol ^^;

Selbst wenn es ein Beispielprogramm gab, das als Referenz verwendet werden konnte, indem ich meine eigenen Hände bewegte und es implementierte, bekam ich ein wenig Verständnis für Deep Learning. Wenn die hier veröffentlichten Informationen für irgendjemanden von Nutzen sind, würde ich mich sehr freuen. Ich habe noch keine Aussetzer oder CNN-Implementierung durchgeführt, aber ich plane, sie erneut zu implementieren, wenn ich Lust dazu habe ^^ Referenzen- [Verschachtelung, Deep Learning Java-Programmiertheorie und Implementierung von Deep Learning, Impress, 2016. ](Https://px.a8.net/svt/ejp?a8mat=2NZCQW+6MQUCY+249K+BWGDT&a8ejpredirect=https%3A%2F%2Fwww.amazon.co.jp%2Fdp%2F484438128F2% affi-271202-22) - [Okaya, Deep Learning, Kodansha, 2015. ](Https://px.a8.net/svt/ejp?a8mat=2NZCQW+6MQUCY+249K+BWGDT&a8ejpredirect=https%3A%2F%2Fwww.amazon.co.jp%2Fdp%2F406152902%2%F affi-271202-22)

Recommended Posts

[Python] Deep Learning: Ich habe versucht, Deep Learning (DBN, SDA) ohne Verwendung einer Bibliothek zu implementieren.
Ich habe versucht, einen Pseudo-Pachislot in Python zu implementieren
Ich habe versucht, Cifar10 mit der SONY Deep Learning Library NNabla [Nippon Hurra] zu implementieren.
Ich habe versucht, Deep VQE zu implementieren
Ich habe versucht, mit Theano tief zu lernen
Ich habe versucht, einen eindimensionalen Zellautomaten in Python zu implementieren
Ich habe versucht, ein Deep-Learning-Modell von TensorFlow mit TensorFlow Serving zu hosten
Ich habe eine Stoppuhr mit tkinter mit Python gemacht
Ich habe versucht, Perceptron Teil 1 [Deep Learning von Grund auf neu] zu implementieren.
Ich habe versucht, in einem tief erlernten Sprachmodell zu schreiben
Ich habe versucht, die Lernfunktion im neuronalen Netzwerk sorgfältig zu verstehen, ohne die Bibliothek für maschinelles Lernen zu verwenden (erste Hälfte).
Ich habe versucht, Permutation in Python zu implementieren
Ich habe versucht, mit Python einen regulären Ausdruck für "Betrag" zu erstellen
[Python] Ich habe versucht, eine stabile Sortierung zu implementieren
Ich habe versucht, mit Python einen regulären Ausdruck von "Zeit" zu erstellen
Ich habe versucht, PLSA in Python 2 zu implementieren
Ich habe versucht, mit Python einen regulären Ausdruck von "Datum" zu erstellen
Ich habe versucht, ein missverstandenes Gefangenendilemma in Python zu implementieren
Ich habe versucht, ADALINE in Python zu implementieren
Ich habe versucht, PPO in Python zu implementieren
Ich habe versucht, eine ToDo-App mit einer Flasche mit Python zu erstellen
Ich habe versucht, Deep Learning zu implementieren, das nicht nur mit NumPy tiefgreifend ist
Mayungos Python Learning Episode 6: Ich habe versucht, eine Zeichenkette in eine Zahl umzuwandeln
[Deep Learning von Grund auf neu] Ich habe versucht, Sigmoid Layer und Relu Layer zu implementieren
Ich habe die übliche Geschichte ausprobiert, Deep Learning zu verwenden, um den Nikkei-Durchschnitt vorherzusagen
Ich habe ein Beispiel für den Zugriff auf Salesforce mit Python und Bottle erstellt
Ich habe versucht, Trumps Kartenspiel in Python zu implementieren
Ich habe versucht, TOPIC MODEL in Python zu implementieren
Ich habe versucht, eine CSV-Datei mit Python zu lesen
Ich habe versucht, eine selektive Sortierung in Python zu implementieren
Ich habe ein ○ ✕ Spiel mit TensorFlow gemacht
Ich habe versucht, tief zu lernen
Ich habe versucht, die Lernfunktion im neuronalen Netzwerk sorgfältig zu verstehen, ohne die Bibliothek für maschinelles Lernen zu verwenden (zweite Hälfte).
Ich habe versucht, die Python-Bibliothek "pykakasi" zu verwenden, die Kanji in Romaji konvertieren kann.
[Patentanalyse] Ich habe versucht, mit Python eine Patentkarte zu erstellen, ohne Geld auszugeben
Ich habe versucht, die Strichzeichnung mit Deep Learning aus dem Bild zu extrahieren
Ich habe versucht, verschiedene Methoden für maschinelles Lernen (Vorhersagemodell) mithilfe von Scicit-Learn zu implementieren
Ich habe versucht, ein scheinbar Windows-Snipper-Tool mit Python zu implementieren
Ich möchte Timeout einfach in Python implementieren
Ich habe versucht, Mine Sweeper auf dem Terminal mit Python zu implementieren
Ich habe versucht, Drakues Poker in Python zu implementieren
Ich habe versucht, künstliches Perzeptron mit Python zu implementieren
Ich habe versucht, GA (genetischer Algorithmus) in Python zu implementieren
[Python] Ich habe versucht, einen lokalen Server mit flask auszuführen
Ich habe versucht, mit Python eine Pseudofraktalfigur zu zeichnen
Ich habe eine Python-Bibliothek erstellt, die einen rollierenden Rang hat
Ich habe versucht, Dropout zu erklären
Ich habe versucht, Python (3) anstelle eines Funktionsrechners zu verwenden
Ich habe versucht, mit Python auf Google Spread Sheets zuzugreifen
Ich habe versucht, ein Konfigurationsdiagramm mit Diagrammen zu zeichnen
Ich habe versucht, das Bild mithilfe von maschinellem Lernen zu komprimieren
Ich habe versucht, mit Python Machine Learning ein Echtzeit-Modell zur Trennung von Tonquellen zu erstellen
Ich habe versucht, PCANet zu implementieren
Ich habe versucht, StarGAN (1) zu implementieren.