Dieser Artikel ist eine Fortsetzung von Maschinelles Lernen ② Perceptron-Aktivierungsfunktion. Diesmal handelt es sich um einen Artikel über die Aktivierungsfunktion, die Schrittfunktion und die Sigmoidfunktion.
Referenzen: O'REILLY JAPAN Deep Learning von Grund auf neu Letztes Mal: Maschinelles Lernen ② Perceptron-Aktivierungsfunktion
Eine Funktion, die den Ausgang auf einen bestimmten Schwellenwert schaltet, wird als Sprungfunktion bezeichnet. Es könnte durch die folgende Formel ausgedrückt werden.
aa
y=h(b+w1x1 + w2x2)\\
h(x) = \left\{
\begin{array}{ll}
1 & (x \, > \, 0) \\
0 & (x \, \leqq \, 0)
\end{array}
\right.
Dieses Mal werde ich eine Schrittfunktion mit Python implementieren und sie mithilfe eines Diagramms anzeigen. Wir würden uns freuen, wenn Sie die Installationsmethode usw. selbst überprüfen könnten. Erstellen Sie zunächst eine Schrittfunktion in Python. Verwenden Sie Gleichung 3-1.
3-1step_func.py
def step_function(x):
#Nur reelle Zahlen können als Argumente unterstützt werden(Akzeptieren Sie keine numpy Arrays)
if x > 0:
return 1
else:
return 0
Die obige Implementierung ist unkompliziert, hat jedoch das Problem, dass nur reelle Zahlen in das Argument x eingegeben werden können. Sie können es wie step_function (2.0) verwenden, aber Sie können das NumPy-Array usw. nicht als Argument verwenden. Es ist sehr praktisch, mehrere Daten gleichzeitig verarbeiten zu können, wenn NumPy-Arrays verarbeitet werden können. Daher, wie man diese erstellte Funktion ersetzt.
3-1step_func.py
import numpy as np
def step_function(x):
#Als Argumente können nur reelle Zahlen unterstützt werden(Akzeptieren Sie keine numpy Arrays)
#Für jedes Element wird ein Bourian-Typ generiert, indem Ungleichungsoperationen für das NumPy-Array verwendet werden.
y = x > 0
#astype()Beliebiger Typ in der Methode (diesmal np.kann in int-Typ geändert werden)
return y.astype(np.int)
input_data = np.array([1.0, 2.0, 3, 0])
output_data = step_function(input_data)
print(output_data)
3-1step_func.py Ausführungsergebnis
[1 1 1 0]
Ich werde die Erklärung der Methoden und der grundlegenden Syntax im Programm weglassen, aber ich habe eine vorläufige Erklärung in den Kommentaren geschrieben. Um das Ausführungsergebnis zu überprüfen, können Sie sehen, dass bei Eingabe eines Werts größer als 0 1 zurückgegeben wird.
Die diesmal definierte Schrittfunktion wird in einem Diagramm angezeigt.
3-1step_func.py
import numpy as np
import matplotlib.pylab as plt
def step_function(x):
#Nur reelle Zahlen können als Argumente unterstützt werden(Akzeptieren Sie keine numpy Arrays)
#Für jedes Element wird ein Bourian-Typ generiert, indem Ungleichungsoperationen für das NumPy-Array verwendet werden.
y = x > 0
#astype()Beliebiger Typ in der Methode (diesmal np.kann in int-Typ geändert werden)
return y.astype(np.int)
# -5 ~ 5 0.Generieren Sie ein 1-Schritt-Array
input_data = np.arange(-5.0, 5.0, 0.1)
output_data = step_function(input_data)
#Graphdatengenerierung
plt.plot(input_data, output_data)
#Stellen Sie den Bereich der y-Achse ein
plt.ylim(-0.1, 1.1)
plt.show()
Anhand der obigen Ergebnisse können Sie bestätigen, dass sich das Ergebnis bei 0 ändert.
Eine der in neuronalen Netzen häufig verwendeten Aktivierungsfunktionen ist die Sigmoidfunktion, die durch die folgende Formel ausgedrückt wird.
aa
h(x) = \frac{1}{1+e^{-x}}\\
e=Anzahl der Napiers ≒ 2.718
Es klingt kompliziert, ist aber nur eine Funktion. Wie andere Funktionen wird die Sigmoidfunktion in der konvertierten Form ausgegeben, indem ein Wert ersetzt wird.
Der einzige Unterschied zwischen Perceptron und Neural Network ist die Aktivierungsfunktion. Die Struktur der Neuronen und die Methode der Signalübertragung sind für Perceptron und Neural Network gleich.
Schreiben Sie zuerst Gleichung 3-2.
3-2sigmoid_func.py
import numpy as np
import matplotlib.pylab as plt
def sigmoid_function(x):
#np.exp(-x)Ist e^-Repräsentiert x
#Die Berechnung des Skalarwerts und des NumPy-Arrays wird zwischen jedem Element des Arrays berechnet.
return 1 / (1 + np.exp(-x))
input_data = np.arange(-5.0, 5.0, 0.1)
output_data = sigmoid_function(input_data)
plt.plot(input_data, output_data)
plt.ylim(-0.1, 1.1)
plt.show()
Der Punkt hier ist, dass es immer in den Bereich von 0 bis 1 fällt.
Wenn man den Unterschied zwischen den beiden eingeführten Aktivierungsfunktionen betrachtet, sieht es wie folgt aus.
sample.py
import numpy as np
import matplotlib.pylab as plt
def step_function(x):
#Nur reelle Zahlen können als Argumente unterstützt werden(Akzeptieren Sie keine numpy Arrays)
#Für jedes Element wird ein Bourian-Typ generiert, indem Ungleichungsoperationen für das NumPy-Array verwendet werden.
y = x > 0
#astype()Beliebiger Typ in der Methode (diesmal np.kann in int-Typ geändert werden)
return y.astype(np.int)
def sigmoid_function(x):
#np.exp(-x)Ist e^-Repräsentiert x
#Die Berechnung des Skalarwerts und des NumPy-Arrays wird zwischen jedem Element des Arrays berechnet.
return 1 / (1 + np.exp(-x))
input_data1 = np.arange(-5.0, 5.0, 0.1)
output_data1 = step_function(input_data1)
input_data2 = np.arange(-5.0, 5.0, 0.1)
output_data2 = sigmoid_function(input_data2)
#Graphdatengenerierung
plt.plot(input_data1, output_data1)
plt.plot(input_data2, output_data2)
#Stellen Sie den Bereich der y-Achse ein
plt.ylim(-0.1, 1.1)
plt.show()
Recommended Posts