Im Grunde ist es ein Memorandum mit Inhalten von Deep Learning, das von Grund auf von O'Reilly erstellt wurde Ich habe ein Python-Tag, aber ich sehe nicht viel Python-Code.
Einfach ausgedrückt, Logikschaltung
Ein Tor, das wie folgt funktioniert
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
Erreichen Sie das obige Tor, indem Sie das Gewicht (w_1, w_2) $ von $ b + w_1x_1 + w_2x_2 ändern Gleiches gilt für andere Tore
Das XOR-Gatter kann mit 1-Schicht-Perceptron nicht reproduziert werden
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
Ich werde nicht ins Detail gehen, aber dies kann nicht mit einem einzigen Perceptron erreicht werden. Dies kann durch Stapeln von Schichten (mehrschichtiges Perzeptron) erreicht werden. Dies ist die Basis des neuronalen Netzwerks
Die Grundidee ist mit Perceptron
Perceptron-Ausgabe 1, wenn die Ausgabe der zuvor genannten Funktion 0 überschreitet, andernfalls 0. Mit anderen Worten wird die Ausgabe einer Schicht unter Verwendung der Schrittfunktion an die nächste Schicht ausgegeben. Die Schrittfunktion wird hier als ** Aktivierungsfunktion ** bezeichnet.
Diese Aktivierungsfunktion wird im neuronalen Netzwerk ersetzt
h(x)=\frac{1}{1+exp(-x)}
Eine Funktion ist eine Funktion, die eine Ausgabe zurückgibt, wenn eine bestimmte Eingabe gegeben wird. Die Sigmoidfunktion ist auch nur eine Funktion
Ganz einfach, die Form der Funktion ist glatt
Ich habe es noch nicht getan
Wenn die Eingabe $ X $ ist, ist das Gewicht der ersten Schicht $ W $ und die Vorspannung der ersten Schicht ist $ B $, Die gewichtete Summe der ersten Schicht kann ausgedrückt werden als $ A = XW + B $ Geben Sie diesen $ A $ -Vektor als Eingabe der Sigmoid-Funktion und geben Sie seine Ausgabe als nächste Eingabe an Die Ausgabe der letzten Ebene verwendet eine andere Funktion anstelle der Sigmoidfunktion
def sigmoid(x):
return 1/(1+np.exp(-x))
def init_network():
network = {}
network['W1'] = np.array([[0.1, 0.3, 0.5],[0.2, 0.4, 0.6]])
network['B1'] = np.array([0.1, 0.2, 0.3])
# ...Initialisieren Sie auch die anderen Ebenen
return network
def forward(network, x):
W1 = network['W1']
B1 = network['B1']
a1 = np.dot(x, W1)
z1 = sigmoid(a1)
# ...Fortsetzen
y = identity_function(a3)
return y
#Ich denke, dass es in Zukunft objektorientiert sein wird
network = init_network()
x = np.array([1.0, 2.0])
y = forward(network, x)
Verwenden Sie die Gleichheitsfunktion oder die Softmax-Funktion Die Gleichheitsfunktion ist eine Funktion, die die Eingabe so ausgibt, wie sie ist Die Softmax-Funktion wird durch die folgende Formel ausgedrückt
y_k = \frac{exp(a_k)}{\sum_{i=1}^{n}exp(a_i)}
Wenn Sie die Softmax-Funktion programmgesteuert implementieren, müssen Sie jedoch auf Überlauf achten Subtrahieren Sie den Maximalwert des Vektors vom Wert von a.
Es wandelt die Ausgabe des neuronalen Netzwerks in die Wahrscheinlichkeit um, es in eine bestimmte Klasse zu klassifizieren. Da sich die Größenbeziehung des Ausgangs jedoch nicht ändert, wird sie in der Inferenzphase im Allgemeinen weggelassen. Die Softmax-Funktion wird in der Lernphase verwendet
Recommended Posts