EnglishPortuguêsEspañolFrançaisItalianoDeutsch
Mathematik · neuronale Netze · Python

NeuralMath

Eine codezentrierte Einführung, die jede mathematische Operation eines neuronalen Netzes sichtbar macht.

NeuralMath ist ein Bildungsprojekt für Studierende, Lehrende und quantitativ orientierte Leserinnen und Leser, die verstehen möchten, was ein neuronales Netz tatsächlich berechnet. Die Website verfolgt ein einziges vollständiges Python/NumPy-Beispiel von den Daten bis zur gelernten Entscheidungsgrenze. Ausführlichere mathematische Erklärungen bleiben dem begleitenden didaktischen Text vorbehalten, damit diese Seite linear, ausführbar und leicht wiederzuverwenden bleibt.

So zitieren Sie den didaktischen Text

Americo Cunha Jr. „A anatomia matemática de uma rede neural.“ Manuskript eingereicht bei Professor de Matemática Online (PMO), 2026.

Nach der Veröffentlichung wird der Eintrag um Band, Seiten und DOI ergänzt. Bitte zitieren Sie in wissenschaftlichen Arbeiten den didaktischen Text und nicht diese Website.

@unpublished{cunha2026anatomia,
  author = {Cunha Jr, Americo},
  title  = {A anatomia matemática de uma rede neural},
  note   = {Manuscript submitted to Professor de Matemática Online (PMO)},
  year   = {2026}
}
1

Aktivierungsfunktionen

Die Implementierung beginnt mit den beiden Nichtlinearitäten des Netzes. ReLU wirkt in der verborgenen Schicht, die Sigmoidfunktion bildet den letzten Score auf einen Wert zwischen 0 und 1 ab.

def relu(s):
    return np.maximum(0, s)

def relu_derivative(s):
    return (s > 0).astype(float)

def sigmoid(s):
    return 1 / (1 + np.exp(-s))
2

Einen breit verteilten synthetischen Datensatz erzeugen

Wir verwenden Masse und Durchmesser als zwei physikalische Merkmale. Die Daten sind synthetisch, bleiben aber in plausiblen Bereichen für das Lehrbeispiel. Eine glatte Referenzkurve dient nur zur Erzeugung einer nichttrivialen Geometrie; das Netz erhält diese Kurve niemals.

def base_boundary(m):
    return (
        6.68
        + 0.74 * np.exp(-((m - 155) / 20) ** 2)
        + 1.50 / (1 + np.exp(-(m - 202) / 5))
    )

X_train = np.vstack([apple_1, apple_2, orange_1, orange_2])
y_train = np.array([1.0] * 32 + [0.0] * 32)
3

Eingaben standardisieren

Masse und Durchmesser liegen auf unterschiedlichen numerischen Skalen. Mittelwert und Standardabweichung werden ausschließlich aus den Trainingsdaten berechnet und anschließend konsistent wiederverwendet.

mean = X_train.mean(axis=0)
std = X_train.std(axis=0)
Xn = (X_train - mean) / std
4

Ein 2–12–1-Netz initialisieren

Das Modell besitzt zwei Eingaben, zwölf verborgene ReLU-Neuronen und einen Sigmoid-Ausgang. Damit ergeben sich 49 trainierbare Parameter, während das Netz klein genug bleibt, um Zeile für Zeile nachvollzogen zu werden.

rng = np.random.default_rng(42)
W1 = 0.1 * rng.standard_normal((12, 2))
b1 = np.zeros(12)
W2 = 0.1 * rng.standard_normal(12)
b2 = 0.0
5

Vorwärtspropagation

Eine Vorhersage ist eine Folge affiner Transformationen und Aktivierungsfunktionen. Diese vier Zeilen bilden den rechnerischen Kern der Inferenz.

z1 = W1 @ x + b1
h = relu(z1)
z2 = W2 @ h + b2
y_hat = sigmoid(z2)
6

Backpropagation

Die Ableitungen werden explizit geschrieben. Es gibt keine automatische Differentiation: Die Kettenregel erscheint direkt im Code, und genau darin liegt der zentrale didaktische Wert des Beispiels.

delta2 = (y_hat - target) * y_hat * (1 - y_hat)
dW2 = delta2 * h
db2 = delta2

delta1 = (delta2 * W2) * relu_derivative(z1)
dW1 = np.outer(delta1, x)
db1 = delta1
7

Stochastischer Gradientenabstieg

In jeder Epoche werden die Beispiele gemischt und die Parameter nach jeder Beobachtung aktualisiert. Das Verfahren verwendet die oben berechneten Gradienten wiederholt, um den Verlust zu reduzieren.

for epoch in range(n_epochs):
    for i in rng.permutation(len(Xn)):
        # forward pass and backpropagation
        W1 -= learning_rate * dW1
        b1 -= learning_rate * db1
        W2 -= learning_rate * dW2
        b2 -= learning_rate * db2
8

Was das Training liefert

Mit dem festen Zufallsstartwert und den hier verwendeten Hyperparametern klassifiziert das kleine Netz alle 64 Trainingsbeispiele und alle 8 illustrativen Testbeispiele gemäß den für das synthetische Experiment festgelegten Labels.

Final mean loss: 0.0001785644
Training accuracy: 1.0000
Illustrative test accuracy: 1.0000

Test outputs:
[121.0, 7.20] -> 0.999927 -> apple
[135.0, 7.45] -> 0.999900 -> apple
[152.0, 7.75] -> 0.999780 -> apple
[171.0, 7.32] -> 0.986972 -> apple
[121.0, 6.28] -> 0.000019 -> orange
[152.0, 6.86] -> 0.000009 -> orange
[189.0, 6.48] -> 0.000028 -> orange
[208.0, 7.55] -> 0.014957 -> orange
9

Die gelernte Entscheidungsgrenze zeichnen

Nach dem Training wird das Netz auf einem dichten Gitter ausgewertet. Das Niveau y-hat = 0,5 wird zur gelernten Entscheidungsgrenze und macht die von der verborgenen Schicht erzeugte nichtlineare Geometrie sichtbar.

masses = np.linspace(116, 214, 500)
diameters = np.linspace(6.0, 8.85, 500)
M, D = np.meshgrid(masses, diameters)
grid = np.column_stack([M.ravel(), D.ravel()])
P = predict(grid, mean, std, W1, b1, W2, b2).reshape(M.shape)

ax.contour(M, D, P, levels=[0.5], linewidths=2.2)
NeuralMath decision boundary
Vom kanonischen NumPy-Beispiel gelernte Entscheidungsregionen. Alle Trainingspunkte bleiben sichtbar; die hervorgehobene Kurve entspricht dem Niveau y-hat = 0,5.
10

Vollständige Ressourcen

Die vollständigen Skripte, Notebooks und reproduzierbaren Ausgaben sind unten verfügbar. Der Code verwendet in allen Sprachversionen dieselben kanonischen englischen Bezeichner, damit die ausführbare Quelle nicht zwischen Übersetzungen auseinanderläuft.

Python sourceGitHub repositoryGoogle ColabFigure (PDF)

Künftige Erweiterungen

NeuralMath soll als Folge rechnerischer Beispiele wachsen. Geplante Erweiterungen umfassen Trainingsdynamik, die Beiträge verborgener Neuronen, Gradientenprüfung, Mehrklassenklassifikation mit Softmax, tiefere Netze und kleine interaktive Experimente im Browser.

Über den Autor

Americo Cunha Jr ist Computational Scientist, Forscher am brasilianischen Laboratório Nacional de Computação Científica (LNCC) und Associate Professor an der Universidade do Estado do Rio de Janeiro (UERJ). Seine Forschung verbindet nichtlineare Dynamik, mathematische und numerische Modellierung, Unsicherheitsquantifizierung, inverse Probleme sowie künstliche Intelligenz und Scientific Machine Learning. 2023 erhielt er den ABMEC Young Scientist Award; außerdem ist er in internationalen wissenschaftlichen und editorischen Kooperationen aktiv.

americocunha.orgORCIDGoogle Scholar

Lizenz

Creative Commons Attribution 4.0 International

Sofern nicht anders angegeben, stehen die erklärenden Webtexte und die originären Abbildungen der Website unter der Creative-Commons-Lizenz Namensnennung 4.0 International (CC BY 4.0). Für das didaktische PDF kann die Lizenz der veröffentlichten Zeitschriftenfassung gelten. Der Quellcode wird separat bereitgestellt und sollte eine eigene Softwarelizenz erhalten.