Dies ist ein Memo für mich, während ich Einführung in Anwendungen zur Verarbeitung natürlicher Sprache in 15 Schritten lese. Dieses Mal werde ich in Kapitel 3, Schritt 08, meine eigenen Punkte aufschreiben.
Kapitel 3 enthält eine grundlegende Erklärung der Grundlagen des tiefen Lernens und seiner Anwendung auf die Verarbeitung natürlicher Sprache. In Schritt 08 als Einführung in neuronale Netze eine Übersicht über mehrschichtige Perzeptrone und eine einfache Implementierung unter Verwendung der Deep-Learning-Bibliothek Keras.
Das Modell, das die Neuronen, aus denen die Gehirnzellen eines Organismus bestehen, in ein mathematisches Modell umwandelte, ist ** Perceptron **, und das Modell, das ein Neuron imitiert, heißt ** Simple Perceptron **.
--n Eingänge: x1, x2, ..., xn --n Gewichte: w1, w2, ..., wn
z = f(x1w1 + x2w2 + ... + xnwn + b)
Die obige Formel kann genau so codiert werden, wie sie ist, aber sie kann präzise geschrieben werden und die Verarbeitungsgeschwindigkeit ist schnell, wenn die Operation Vector Inner Product (NumPy) verwendet wird. Wenn das einfache Perzeptron als Diskriminator betrachtet wird, ist das Finden eines geeigneten Wertes der Gewichte (w und b) ** Lernen **.
import numpy as np
x = np.array([...])
w = np.array([...])
b = ..
z = b + np.dot(x, w)
Ähnlich wie bei den Nervenzellen im Gehirn ist es möglich, durch Verwendung der Ausgabe eines einfachen Perzeptrons als Eingabe eines anderen einfachen Perzeptrons eine Struktur zu schaffen, in der eine große Anzahl von Perzeptronen verbunden ist, ** mehrschichtiges Perzeptron (MLP) ** Namens.
test_mlp.py
import numpy as np
W_1 = np.array([
[1, 2, 3],
[4, 5, 6],
])
x = np.array([10, 20, 30])
print(np.dot(W_1, x))
print(np.dot(x, W_1))
[140 320]
Traceback (most recent call last):
File "test_mlp.py", line 11, in <module>
print(np.dot(x, W_1))
ValueError: shapes (3,) and (2,3) not aligned: 3 (dim 0) != 2 (dim 0)
Oben sind die Gewichte für die beiden Perzeptrone in der ersten Schicht von MLP in W_1 (Array mit 2 Zeilen und 3 Spalten) gespeichert. Durch Berechnung des inneren Produkts davon und des Eingabevektors von 3 Zeilen und 1 Spalte wird die Ausgabe von 2 Zeilen und 1 Spalte erhalten (2 Zeilen und 3 Spalten * 3 Zeilen und 1 Spalte = 2 Zeilen und 1 Spalte).
Wenn Sie versuchen, das innere Produkt durch Vertauschen von W_1 und x zu berechnen, tritt natürlich ein Fehler auf.
Während einfache Perzeptrone nur auf linear trennbare Probleme angewendet werden können, ** können mehrschichtige Perzeptrone auch linear untrennbare Probleme ansprechen **.
In 08.2 wurde jede Schicht als Funktion implementiert, sie kann jedoch mithilfe einer Bibliothek präzise beschrieben werden.
import keras.layers import Dense
import keras.models import Sequential
model = Sequential()
#Implementierung der ersten Schicht
model.add(Dense(units = 2, activation = 'relu', input_dim = 3))
#Implementierung der zweiten Schicht
model.add(Dense(units = 1, activation = 'sigmoid'))
Beim Diskriminatorlernen wird ein Paar aus Merkmalsvektor X und korrekter Bezeichnung y als Lehrerdaten angegeben. Die Klassifikatorparameter (Gewichte) werden so angepasst, dass die Ausgabe bei Eingabe von X nahe bei y liegt.
model.compile(loss = 'binary_crossentropy', optimizer = Adam(lr = 0.001))
--verlust: Verlustfunktion. Bewerten Sie die Identifikationsgenauigkeit eines Modells mit einer Funktion, die die Größe der Abweichung zwischen X und y ausdrückt. --binary_crossentropy: Verlustfunktionsübereinstimmung für 2-Klassen-Klassifikator --optimer: Optimierungsmethode. Das Anpassen der Parameter wird als Optimierung bezeichnet, und es gibt verschiedene Methoden. --lr: Lernrate. Ein Parameter, der bestimmt, um wie viel der Gewichtswert in einer Aktualisierung erhöht oder verringert wird
Wenn Sie eine Ebene mit Keras instanziieren, werden die Gewichte implizit ** mit einer Zufallszahl ** initialisiert **.
Wenn Sie auf die Gewichte zugreifen möchten, verwenden Sie die Methoden .get_weights ()
und .set_weights ()
.
Wie ich in 10.3 geschrieben habe, können Sie die Initialisierung des Gewichts mit model.add (Dense (.., kernel_initializer =))
angeben.
model.fit(X, y, batch_size = 32, epochs = 100)
--batch_size: Wert, wie viele der Trainingsdaten gleichzeitig für alle trainiert werden sollen --epochs: Wert, wie oft eine Trainingsdaten für das Training verwendet werden --fit: Lernprozess. Die Fehlerrückverteilungsmethode wird intern verwendet
Die Besessenheit, Gehirnzellen zu imitieren, wurde aufgegeben und entwickelt, um Computern eine intelligente Verarbeitung zu ermöglichen.
Keras ist eine Wrapper-Bibliothek für TensorFlow. TensorFlow ist eine berühmte Deep-Learning-Bibliothek, die von Google entwickelt wurde und über viele Low-Level-APIs verfügt. Daher ist die Implementierung mithilfe von Keras, das High-Level-APIs bereitstellt, einfach. Da der größte Teil der Berechnung des neuronalen Netzwerks eine Vektor / Matrix-Operation ist, ist es denkbar, eine GPU zu verwenden, um ein größeres neuronales Netzwerk mit hoher Geschwindigkeit zu lernen.
Recommended Posts