Menschen, die maschinelles Lernen und tiefes Lernen studiert haben, aber nicht wissen, wie sie bei der Implementierung zusammenhängen. Jemand, der seine Gedanken organisieren will. Ich werde keine detaillierte mathematische Erklärung geben. Eine mathematische Erklärung finden Sie im Chainer-Tutorial.
Deep Learning wurde durch Nachahmung des Mechanismus der Informationsübertragung in menschlichen Nervenzellen geschaffen. Dies hat die Genauigkeit dramatisch verbessert.
Im neuronalen Netzwerk wird ein mathematisches Modell erstellt, das die Bewegung menschlicher Nervenzellen auf einem Computer reproduziert. Obwohl einzelne Nervenzellen nur über eine einfache Rechenleistung verfügen, können sie durch Verbinden und Ineinandergreifen eine erweiterte Erkennung und Beurteilung vornehmen. Der Mechanismus der Informationsübertragung wird durch mathematische Formeln bei der Berechnung von Matrizen und Sonderfunktionen reproduziert.
Das Neuron hat mehrere Eingänge und einen Ausgang. Eine Schicht des neuronalen Netzwerks besteht aus mehreren Neuronen. ** Gewicht **: Koeffizient zum Multiplizieren jeder Eingabe. Sie entspricht der Übertragungseffizienz an der Synapse. Je größer der Wert, desto mehr Informationen werden übertragen. Da es beim Lernen automatisch aktualisiert wird, ist nur der Anfangswert erforderlich. ** Bias **: Eine Konstante, die zur Summe der Eingabe multipliziert mit dem Gewicht addiert wird. Es dient zur Anpassung der Erregung von Neuronen. Da es beim Lernen automatisch aktualisiert wird, ist nur der Anfangswert erforderlich. ** Aktivierungsfunktion **: Eine Funktion, die den angeregten Zustand von Neuronen darstellt. Ohne die Aktivierungsfunktion wäre der Betrieb des Neurons nur die Summe der Produkte, und die Fähigkeit, komplizierte Ausdrücke auszudrücken, würde aus dem neuronalen Netzwerk verloren gehen. Es gibt verschiedene Funktionen wie Sigmoidfunktion und ReLU, und die optimale Funktion wird in gewissem Maße abhängig von dem zu behandelnden Problem bestimmt. Sie müssen für jede Ebene auswählen. Eine Beschreibung der Funktionen finden Sie unter Aktivierungsfunktionstypen. Übrigens wird ** w ** als Gewicht und ** b ** als Bias dargestellt.
(Jabashi) yolo, eine Bilderkennungsbibliothek, kann unmittelbar nach dem Importieren einer trainierten Gewichtsdatei (automatisch angepasstes Gewicht, Abweichung, Anzahl der Schichten usw.) erkannt werden. Wenn die gelernte Umgebung jedoch nicht berücksichtigt wird, kann sie missverstanden werden, oder selbst wenn zusätzliches Lernen durchgeführt wird, kann sie möglicherweise nicht gut konvergieren. Wie in diesem Artikel gezeigt, wird "Sushi" in dem in den USA erlernten Lernmodell als "Hot Dog" erkannt. Mit anderen Worten kann gesagt werden, dass sich die Persönlichkeit (Berechnungsergebnis) in Abhängigkeit von der Umgebung (Datensatz) ändert, in der sie aufgewachsen ist.
Ein neuronales Netzwerk wird aufgebaut, indem mehrere Neuronen zu einem Netzwerk verbunden werden. (x, v, y sind Neuronen) Ordnen Sie sie wie in der Abbildung gezeigt in Schichten an. Abbildung Neuronales Netzwerkmodell (zitiert aus maschinellem Lernen beginnend mit Python)
Die Schichten im neuronalen Netzwerk werden in eine Eingangsschicht, eine Zwischenschicht und eine Ausgangsschicht klassifiziert. Es gibt nur eine Eingangsschicht und eine Ausgangsschicht, aber die mittlere Schicht kann vergrößert werden. Eine Anpassung ist erforderlich, da sich das Berechnungsverhalten durch Erhöhen der Anzahl der Zwischenschichten ändert. In einem normalen neuronalen Netzwerk ist die Ausgabe eines Neurons mit der Eingabe aller Neuronen in der nächsten Schicht verbunden. ** Weiterleitung ** Diese Informationen werden von Eingabe zu Ausgabe übertragen. Die Tatsache, dass Informationen von der Ausgabe zur Eingabe zurückgehen, wird als ** Backpropagation ** bezeichnet. Die Rückausbreitung wird durchgeführt, wenn das Gewicht und die Vorspannung aktualisiert werden, indem zum Ausgabeergebnis zurückgekehrt wird. Normalerweise erfolgt dies automatisch. Wenn Sie also die Einstellparameter und den Mechanismus kennen, können Sie sie verwenden. Der Ausgabewert wird mit der korrekten Bezeichnung des Datensatzes verglichen, der Fehler wird berechnet und das Gewicht und die Vorspannung werden automatisch so angepasst, dass sie sich der richtigen Bezeichnung nähern.
Die vom neuronalen Netzwerk behandelten Probleme sind in Klassifizierungsprobleme und Regressionsprobleme unterteilt.
** Vollständig verbunden **: Ein Modell, bei dem alle Neuronen zwischen den Schichten wie im "Figure Neural Network Model" verbunden sind. ** Faltbar **: Wird häufig im Bereich der Bildverarbeitung verwendet. Durch Falten des Bildes ist es möglich, die Merkmale im Bild zu verstärken oder zu schwächen. ** Rekursiv **: Eine Art neuronales Netzwerk, das den Kontext verarbeiten kann. Wird häufig für die Verarbeitung natürlicher Sprache und für Seriendaten verwendet.
Das Regressionsproblem besteht darin, kontinuierliche numerische Werte aus der Tendenz von Daten vorherzusagen. Die grundlegende Verwendung besteht darin, diskrete Daten zu sammeln, aus diesen Daten eine Näherungsfunktion zu erstellen und den vorhergesagten Wert unbekannter Daten zu berechnen. Als Hauptbeispiel ・ Gewicht aus Höhe vorhersagen ・ Sagen Sie anhand der Einkaufstendenz des Benutzers voraus, was als Nächstes zu kaufen ist ・ Prognostizieren Sie den Aktienkurs von morgen anhand vergangener Aktienkurstrends ・ Vorhersage der Miete anhand der Immobilieninformationen
Vorhersage eines Ergebnisses aus einer Eingabe. Es wird verwendet, um zwei Beziehungen wie Größe zu Gewicht auszudrücken.
Eine, die ein Ergebnis aus mehreren Eingaben vorhersagt, z. B. die Vorhersage der Miete anhand verschiedener Informationen der Immobilie. Dies wird häufiger verwendet.
Ein Klassifizierungsproblem ist ein Problem der Klassifizierung von Daten in mehrere feste Rahmen. Im Gegensatz zum Regressionsproblem gibt es mehrere Ausgaben. Die Ausgabe zeigt die Wahrscheinlichkeit, so wie sie ist klassifiziert zu werden. Als Hauptbeispiel ・ Klassifizieren Sie Pflanzen anhand von Blattbildern ・ Klassifizieren Sie handschriftliche Zeichen ・ Bestimmen Sie, welches Fahrzeug auf dem Bild angezeigt wird
Dies ist eine Datengruppe, in der die Trainingsdaten x und das richtige Antwortetikett y ein Satz sind. Der Datensatz ist weiter unterteilt in ** Trainingsdaten ** und ** Testdaten **. Trainingsdaten werden für das Netzwerktraining verwendet, während Testdaten verwendet werden, um die Leistung von Modellen zu bewerten, die aus Trainingsdaten erstellt wurden. Trainingsdaten sind normalerweise größer als Testdaten. Wenn das aus den Trainingsdaten gelernte Netzwerk auch mit Testdaten gute Ergebnisse liefert, bedeutet dies, dass das Netzwerk unbekannte Daten verarbeiten kann. Wenn die Testdaten keine guten Ergebnisse liefern, stimmt etwas mit dem Netzwerk selbst oder der Lernmethode nicht. Die Fähigkeit des Netzwerks, unbekannte Daten zu verarbeiten, wird als ** Generalisierungsleistung ** bezeichnet.
Trainingsdaten werden manuell oder automatisch durch Scraping erfasst. Es kann automatisch erfasst werden, ist jedoch die schwierigste Aufgabe, da manuell ermittelt wird, ob die Daten geeignet sind. Informationen zum Sammeln von Daten finden Sie in diesem Artikel.
Datensätze werden manuell erstellt oder verwenden Bibliotheken. Sie finden es, indem Sie nach "Erstellen eines Datensatzes" suchen. Erstellen Sie ein Bild mit dem Anmerkungswerkzeug **. Ein Großteil der Zeit des Benutzers wird für die Erstellung dieses Datensatzes aufgewendet. Bilder erfordern normalerweise Tausende von Blättern, um die richtigen Ergebnisse zu erzielen, aber sie sind schwer zu sammeln und normalerweise gepolstert.
Die Trainingsdaten und das richtige Antwortetikett des Datensatzes sind jeweils ein Vektor. Beispielsweise wird das richtige Antwortetikett für die Höhe durch einen Vektor dargestellt, in dem die folgenden numerischen Werte angeordnet sind. [146.2 170.4 169.3 154.5 179.2] In diesem Fall befinden sich 5 Neuronen in der Ausgabeschicht, und die Vorspannungs- und Gewichtsgradienten werden so eingestellt, dass sich jeder Ausgabewert dem korrekten Wert nähert. Im Fall eines Klassifizierungsproblems ist das richtige Antwortetikett ein Vektor, in dem die richtige Antwort 1 ist und alle außer der richtigen Antwort 0 sind, wie unten gezeigt. [0 0 1 0 0] Eine Folge von Zahlen mit einer verbleibenden 1 und 0 wird als ** One-Hot-Ausdruck ** bezeichnet.
Formatieren Sie Daten in ein benutzerfreundliches Format wie Normalisierung und Standardisierung. Standardisierung hat beispielsweise den Effekt, das Lernen zu stabilisieren und zu beschleunigen.
Im Falle eines Klassifizierungsproblems wird der richtige Antwortwert in einem onoe-hot-Ausdruck ausgedrückt. Fügen Sie daher bei der Implementierung ein Konvertierungsprogramm in einen One-Hot-Ausdruck ein. Wenn die Anzahl der Neuronen in der Ausgabeschicht 3 beträgt, wird dies wie folgt. [1 0 0] [0 1 0] [0 0 1]
Schließlich wird es in Trainingsdaten und Testdaten unterteilt. Die Trainingsdaten werden für das Training verwendet, während die Testdaten verwendet werden, um die Generalisierungsleistung der aus den Trainingsdaten erhaltenen Trainingsergebnisse zu bewerten. Es gibt keinen Unterschied beim Training beider, aber die Ergebnisse nach dem Lernen werden grafisch verglichen. Es scheint, dass 20% bis 30% der Trainingsdaten für die Testdaten gut sind.
Arbeiten Sie daran, Formen für die Zwischenschicht und die Ausgabeschicht herzustellen, die zum Lernen verwendet werden. Stellen Sie die ** Aktivierungsfunktion ** und ** Verlustfunktion ** der Zwischenschicht bzw. der Ausgangsschicht ein. Es ist eine gute Idee, es mit class zu schreiben, damit Sie es wiederverwenden können. Parameter sollten als Variablen deklariert werden, damit sie von außen geändert werden können. Wenn Sie nicht verstehen, sondern nur schnell lernen möchten, reicht es aus, andere Personen zu kopieren und einzufügen.
** Stellen Sie das Anfangsgewicht und die Vorspannung ein **. In Bezug auf die Art der Aktivierungsfunktion [Was ist die Aktivierungsfunktion, die ich nicht gut verstehe](https://newtechnologylifestyle.net/%E3%82%84%E3%81%A3%E3%81%B1%E3%82%8A % E3% 82% 88% E3% 81% 8F% E5% 88% 86% E3% 81% 8B% E3% 82% 89% E3% 81% AA% E3% 81% 84% E6% B4% BB% E6 % 80% A7% E5% 8C% 96% E9% 96% A2% E6% 95% B0% E3% 81% A8% E3% 81% AF /) ist hilfreich.
Stellen Sie es zum ersten Mal mit einer Dose ein und ändern Sie die folgenden vier Werte entsprechend dem Lernergebnis. Diese werden vom Benutzer entsprechend der von den Testdaten ausgewerteten Ausgabe mehrfach angepasst. Jede Erklärung ist [hier](# hyper parameter) ·Epoche ・ Chargengröße ・ Lernkoeffizient ・ Optimierungsalgorithmus
Lernen ist der Prozess der Anpassung der Verbindungen zwischen Neuronen. Das Lernen durchläuft die folgenden drei Prozesse.
Verwenden Sie die ** Verlustfunktion **, um den Fehler abzuleiten.
Die ** Gradientenabstiegsmethode ** wird verwendet, um den Gradienten zu bestimmen. Die resultierende Verlustfunktion $ L $ wird teilweise durch $ w $ differenziert, um den Gradienten $ \ frac {∂L} {∂w} $ zu erhalten. (Zitat: Chaier Tutorial)
Der Fehler zwischen der durch Vorwärtsausbreitung erhaltenen Ausgabe und der im Voraus vorbereiteten richtigen Antwort wird Schicht für Schicht in die entgegengesetzte Richtung weitergegeben. Basierend auf dem propagierten Fehler wird der Betrag der Gewichts- und Vorspannungsaktualisierung für jede Schicht berechnet. Das Gewicht nach dem Update wird wie folgt berechnet.
w←w−η\frac{∂L}{∂w}
Überprüfen Sie als Ergebnis des Lernens, wie viel Prozent der Trainingsdaten richtig beurteilt werden können. Wie viel Prozent der Testdaten richtig beurteilt werden können, ist ein wichtiger Index für die Beurteilung des Erfolgs oder Misserfolgs des Lernens. Geben Sie Diagramme von Epochen (Anzahl der Lernvorgänge) und Verlust (Anzahl der falschen Antworten) aus, und der Benutzer kann sie visuell überprüfen. Schätzen Sie, was durch die Bewegung des Diagramms schief geht, passen Sie die Hyperparameter an und lernen Sie erneut.
Ein Problem, bei dem die optimale Lösung nicht als Ganzes erreicht werden kann, weil die lokale optimale Lösung beim Auffinden des Gradienten eingefangen wird. In einigen Fällen wird der Gradient extrem reduziert, und es besteht das Problem, dass das Lernen nicht fortgesetzt wird. Um die optimale Lösung als Ganzes zu finden, ist es notwendig, den besten Zustand einmal vor Ort zu belassen. (Zitat: Chainer Tutorial)
Es gibt ein neuronales Netzwerk ** Es wird nur für einen bestimmten Datenbereich optimiert und gelernt, und es wird unmöglich, mit unbekannten Daten umzugehen. ** Beim maschinellen Lernen ist es auch unmöglich, Eingabedaten zu schätzen, die zu unbekannt sind, um zu den Trainingsdaten zu passen. Man kann sagen, dass nur ein bestimmtes Muster in eine optimierte lokale optimale Lösung gefallen ist. Das generierte Netzwerk sollte etwas schlampig sein, damit es eine Vielzahl von Daten verarbeiten kann. Um dieses Überlernen zu unterdrücken, passt der Benutzer verschiedene später beschriebene Parameter an. ** Wenn zu viele mittlere Schichten oder Neuronen vorhanden sind, tritt aufgrund übermäßiger Ausdruckskraft ein Überlernen auf. ** Es kann auch aufgrund ** unzureichender Stichprobengröße der Trainingsdaten ** auftreten.
Probleme, die hauptsächlich durch die Verwendung der Sigmoid-Funktion als Aktivierungsfunktion verursacht werden. Der Gradient der Sigmoidfunktion hat einen Maximalwert von 0,25 und nähert sich 0, wenn der Abstand von 0 zunimmt. Beim Zurückpropagieren wird die Differenzierung der Aktivierungsfunktion jedes Mal auf jeden Gradienten angewendet, wenn die Schicht zurückverfolgt wird. Im Fall der Sigmoidfunktion wird jeder Gradient jedes Mal kleiner, wenn die Schicht verfolgt wird, und der Gradient verschwindet. Daher wird beim Deep Learning häufig ReLU als Aktivierungsfunktion verwendet.
Beim mehrschichtigen Deep Learning ist die Anzahl der Gewichte und Vorurteile enorm. Daher kann das Lernen Tage oder Wochen dauern. Um dieses Problem zu beheben, verwenden Sie eine GPU, verwenden Sie einen Computer mit hohen Spezifikationen, komplizieren Sie das Netzwerk nicht mehr als nötig und passen Sie die Parameter an.
Das Problem mit der Mehrschichtigkeit kann von der Maschine nicht automatisch angepasst werden, daher muss der Benutzer es entsprechend dem Ergebnis anpassen. Daher müssen Anpassungen und Lernen viele Male wiederholt werden, um bessere Ergebnisse zu erzielen. Die folgenden sieben Elemente müssen angepasst werden. Es bedarf einiger Erfahrung, um zu entscheiden, welche angepasst werden soll. Häufige Anpassungen sind Hyperparameter, Datenerweiterung und Datenvorverarbeitung.
Das einmalige Lernen aller Trainingsdaten wird als eine Epoche gezählt. Selbst wenn die Anzahl der Epochen zu groß ist, kommt es zu einer Überanpassung an die Trainingsdaten. Halten Sie daher bei einer angemessenen Anzahl von Malen an.
Es bezieht sich auf die Anzahl der Daten, die in jeder von mehreren Teilmengen des Datensatzes enthalten sind. Parameter, die sich auf Lernzeit und Leistung auswirken. Weitere Informationen finden Sie unter hier.
Der Koeffizient, der auf den Gradienten der Gradientenabstiegsmethode angewendet werden soll. Auf diese Weise können Sie den Gradienten einstellen. Wenn der Lernkoeffizient zu groß ist, schwankt oder divergiert der Wert der Verlustfunktion, wenn die Parameter wiederholt aktualisiert werden. Wenn es dagegen zu klein ist, dauert es einige Zeit, bis es konvergiert. Da der optimale Wert für diesen Wert nicht ermittelt wurde, muss empirisch gesucht werden.
Bei der Gradientenabstiegsmethode werden das Gewicht und die Vorspannung nach und nach basierend auf dem Gradienten angepasst, und das Netzwerk wird optimiert, um den Fehler zu minimieren. Für diese Optimierung gibt es verschiedene Algorithmen. [Klicken Sie hier] für eine Beschreibung der einzelnen Algorithmen (#Liste der Optimierungsalgorithmen)
Ein wichtiger Hyperparameter in Bezug auf den Erfolg oder Misserfolg des Lernens. Es ist wünschenswert, eine zufällige Variation mit einem kleinen Wert zu haben.
Eine Methode, um das Lernen in der Mitte zu beenden. Mit fortschreitendem Lernen nimmt der Fehler der Testdaten von der Mitte aus zu, und es kann zu einem Überlernen kommen. Daher wird das Lernen vorher beendet. Selbst wenn der Fehler stagniert und das Lernen nicht fortgesetzt wird, wird er beendet, um Zeit zu sparen.
Wenn die Anzahl der Trainingsdatenproben gering ist, tritt wahrscheinlich ein Übertraining auf. In diesem Fall ist es üblich, die Probe aufzublasen, um damit umzugehen. Durch das Training verschiedener Arten von Beispielen wird die Leistung der Netzwerkverallgemeinerung verbessert. In diesem Artikel wird geschrieben, dass Sie beim tatsächlichen Trainieren des Bildes aufgrund fehlender Beispiele überlernt werden.
Verarbeiten Sie die Eingabedaten im Voraus, um die Handhabung zu vereinfachen. Es ist zu erwarten, dass die Vorverarbeitung die Netzwerkleistung verbessert und das Lernen beschleunigt. Ein Großteil der Zeit des maschinellen Lernens wird dafür aufgewendet. Wenn Sie Python verwenden, können Sie diese mithilfe einer Bibliothek namens "pandas" problemlos vorverarbeiten. Es gibt verschiedene Arten der Vorverarbeitung, wie z. B. Normalisierung und Standardisierung. Informationen zur Methode finden Sie in diesem Artikel.
Unterdrückungstechnik überlernen. Eine Technik, die andere Neuronen als die Ausgabeschicht mit einer bestimmten Wahrscheinlichkeit zufällig löscht. Größere Netzwerke sind anfälliger für Überlernen, sodass Aussetzer verwendet werden können, um die Größe des Netzwerks zu verringern.
Begrenzen Sie das Gewicht. Durch die Begrenzung der Gewichte nehmen die Gewichte Extremwerte an und ** verhindern, dass sie in der lokal optimalen Lösung eingeschlossen werden. ** ** **
ReLU Der Ausgang ist 0 für Eingänge unter 0. Eine Funktion, die den gleichen Ausgang wie der Eingang für Eingänge über 0 erzeugt. ** Wird häufig bei Klassifizierungsproblemen verwendet **. Da die Eingabe von 0 oder weniger im Klassifizierungsproblem nicht berücksichtigt werden kann, wird sie häufig zur Rauschentfernung verwendet. Bei der programmgesteuerten Implementierung kann die Implementierung durch Abschneiden von 0 oder weniger in der if-Anweisung erfolgen.
Wenn der Eingabewert groß wird, konvergiert er gegen einen konstanten Wert, sodass er nicht für große Eingabewerte verwendet wird. (wikipedia)
** Eine Funktion, die zur Behandlung von Klassifizierungsproblemen geeignet ist. ** Wird häufig für die Ausgabeschicht von Klassifizierungsproblemen verwendet. Die Summe aller Ausgänge dieser Funktion von K = 1 bis n ergibt 1. Daher hat die Softmax-Funktion die Eigenschaft, zu normalisieren, so dass die Summe aller Ausgaben ** ist, unabhängig davon, welchen Wert der aus mehreren Eingabewerten bestehende Vektor X annimmt. ** Daher ist es mit dem Klassifizierungsproblem kompatibel, bei dem der Gesamtausgabewert der Neuronen in der Ausgabeschicht als 1 behandelt wird.
y=\frac{e^{x}}{\sum_{k=1}^{N}e^{x_k}}
Eine Funktion, die die Eingabe so zurückgibt, wie sie ist. ** Wird häufig als Aktivierungsfunktion für die Ausgabeebene von Regressionsproblemen verwendet. ** ** **
Verlustfunktion, die häufig verwendet wird, wenn Sie das ** Regressionsproblem ** lösen möchten.
L= \frac{1}{N}\sum_{n=1}^{N}(t_n-y_n)^2
Verlustfunktion, die häufig bei der Lösung von ** Klassifizierungsproblemen ** verwendet wird. Der Vorteil ist, dass die Lerngeschwindigkeit schnell ist, wenn der Abstand zwischen der Ausgabe und dem richtigen Antwortwert groß ist.
L=\sum_{k=1}^{K}t_k(-\log(y_k))
Das Folgende ist eine Anmerkung von typischen. Weitere Optimierungsalgorithmen finden Sie hier [https://qiita.com/ZoneTsuyoshi/items/8ef6fa1e154d176e25b8#%E7%A2%BA%E7%8E%87%E7%9A%84%E5%8B%BE% E9% 85% 8D% E9% 99% 8D% E4% B8% 8B% E6% B3% 95sgd-stochastischer Gradientenabstieg).
Ein Algorithmus, der für jedes Update zufällig ein Beispiel aufruft. Es hat die Eigenschaft, dass es schwierig ist, sich in der lokalen optimalen Lösung zu verfangen. Obwohl es mit einfachem Code implementiert werden kann, dauert das Lernen oft einige Zeit, da die Anzahl der Aktualisierungen nicht an den Lernfortschritt angepasst werden kann. AdaGard Der Aktualisierungsbetrag wird automatisch angepasst. Mit fortschreitendem Lernen nimmt die Lernrate allmählich ab. Da die einzige Konstante, die eingestellt werden muss, der Lernkoeffizient ist, dauert die Anpassung nicht lange. RMSProp AdaGrad überwindet die Schwäche der Lernstagnation aufgrund einer geringeren Anzahl von Updates. Adam Eine verbesserte Version von RMSprop. Es scheint das am häufigsten verwendete zu sein.
Chainer Tutorial Einführung in maschinelles Lernen ab Python Erstes tiefes Lernen: Mit Python erlerntes neuronales Netzwerk und Rückausbreitung Grundlagen des Kikagaku Deep Learning https://www.sbbit.jp/article/cont1/33345 https://qiita.com/nishiy-k/items/1e795f92a99422d4ba7b https://qiita.com/Lickey/items/b97c3450d7def207bfbf