EnglishPortuguêsEspañolFrançaisItalianoDeutsch
Matemáticas · redes neuronales · Python

NeuralMath

Una introducción centrada en código, diseñada para hacer visible cada operación matemática de una red neuronal.

NeuralMath es un proyecto educativo para estudiantes, docentes y lectores de perfil cuantitativo que desean comprender qué calcula realmente una red neuronal. El sitio sigue un único ejemplo completo en Python/NumPy, desde los datos hasta la frontera de decisión aprendida. Las explicaciones matemáticas más extensas se mantienen en el texto pedagógico asociado, de modo que esta página pueda ser lineal, ejecutable y fácil de consultar.

Cómo citar el texto pedagógico

Americo Cunha Jr. “A anatomia matemática de uma rede neural.” Manuscrito enviado a Professor de Matemática Online (PMO), 2026.

La referencia se actualizará con volumen, páginas y DOI tras la publicación. En trabajos académicos, cite el texto pedagógico y no este sitio web.

@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

Funciones de activación

La implementación comienza con las dos no linealidades utilizadas por la red. ReLU actúa en la capa oculta y la sigmoide transforma la puntuación final en un valor entre 0 y 1.

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

Construcción de un conjunto sintético amplio

Usamos masa y diámetro como dos características físicas. Los datos son sintéticos, pero permanecen en rangos plausibles para el ejemplo didáctico. Una curva suave de referencia se utiliza únicamente para generar una geometría no trivial; la red nunca recibe esa curva.

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

Estandarización de las entradas

Masa y diámetro tienen escalas numéricas diferentes. La media y la desviación estándar se calculan únicamente con el conjunto de entrenamiento y se reutilizan de forma coherente en todo el experimento.

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

Inicialización de una red 2–12–1

El modelo tiene dos entradas, doce neuronas ReLU ocultas y una salida sigmoide. Son 49 parámetros entrenables, pero la red sigue siendo lo bastante pequeña como para inspeccionarla línea por línea.

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

Propagación hacia adelante

Una predicción es una secuencia de transformaciones afines y funciones de activación. Estas cuatro líneas constituyen el núcleo computacional de la inferencia.

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

Retropropagación

Las derivadas se escriben explícitamente. No se utiliza diferenciación automática: la regla de la cadena aparece directamente en el código, que es el objetivo pedagógico central del ejemplo.

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

Descenso de gradiente estocástico

En cada época se barajan los ejemplos y los parámetros se actualizan después de cada observación. El procedimiento reutiliza los gradientes anteriores para reducir la pérdida.

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

Qué produce el entrenamiento

Con la semilla aleatoria fija y los hiperparámetros utilizados aquí, la pequeña red clasifica los 64 ejemplos de entrenamiento y los 8 ejemplos de prueba ilustrativos de acuerdo con las etiquetas definidas para el experimento sintético.

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

Dibujar la frontera de decisión aprendida

Tras el entrenamiento, la red se evalúa en una malla densa. El nivel y-hat = 0,5 se convierte en la frontera de decisión aprendida y muestra la geometría no lineal construida por la capa oculta.

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
Regiones de decisión aprendidas por el ejemplo canónico en NumPy. Todos los puntos de entrenamiento permanecen visibles; la curva destacada corresponde al nivel y-hat = 0,5.
10

Recursos completos

Los scripts completos, notebooks y resultados reproducibles están disponibles a continuación. El código mostrado en todas las versiones lingüísticas utiliza los mismos identificadores canónicos en inglés para evitar divergencias entre traducciones.

Python sourceGitHub repositoryGoogle ColabFigure (PDF)

Extensiones futuras

NeuralMath está concebido para crecer como una secuencia de ejemplos computacionales. Se prevén extensiones sobre dinámica del entrenamiento, contribución de neuronas ocultas, verificación de gradientes, clasificación multiclase con softmax, redes más profundas y pequeños experimentos interactivos en el navegador.

Sobre el autor

Americo Cunha Jr es científico computacional, investigador del Laboratorio Nacional de Computação Científica (LNCC) y profesor asociado de la Universidade do Estado do Rio de Janeiro (UERJ). Su investigación se sitúa en la intersección de dinámica no lineal, modelización matemática y computacional, cuantificación de incertidumbres, problemas inversos e inteligencia artificial/aprendizaje automático científico. Recibió el Premio ABMEC para Jóvenes Científicos en 2023 y participa activamente en colaboraciones científicas y editoriales internacionales.

americocunha.orgORCIDGoogle Scholar

Licencia

Creative Commons Attribution 4.0 International

Salvo indicación contraria, el texto explicativo y las figuras originales del sitio se ofrecen bajo Creative Commons Atribución 4.0 Internacional (CC BY 4.0). El PDF pedagógico puede estar sujeto a la licencia de la versión publicada por la revista. El código fuente se distribuye por separado y debe utilizar una licencia específica de software.