En el artículo anterior vimos la función sigmoide y cómo convierte números en probabilidades.
Ahora vamos a construir la pieza que viene antes: la neurona artificial.
Este artículo responde a una pregunta clave:
¿De dónde sale el número que entra en la sigmoide?
¿Qué es una neurona artificial?
Una neurona artificial es una operación matemática muy simple:
- Toma varios valores de entrada
- Los multiplica por pesos
- Suma todo
- Añade un sesgo (bias)
El resultado de esa operación se llama normalmente z.
La fórmula de la neurona
Matemáticamente, una neurona se escribe así:z=x1w1+x2w2+⋯+xnwn+b
Donde:
- xi son las entradas
- wi son los pesos
- b es el bias
En forma vectorial (la que usaremos en Python):z=XW+b
Intuición (sin matemáticas pesadas)
Piensa en la neurona como una balanza:
- Cada entrada tiene un peso (importancia)
- Algunas entradas pesan más que otras
- El bias ajusta el punto de equilibrio
El modelo aprende ajustando los pesos y el bias, no las entradas.
Visualizando una neurona
Observa:
- Varias entradas → una sola salida
- Los pesos controlan la influencia de cada entrada
- El bias desplaza el resultado final
Implementar una neurona simple en Python (1 muestra)
Empecemos con el caso más simple: una sola entrada.
import numpy as npx = np.array([2.0, 3.0]) # entradasw = np.array([0.5, -1.0]) # pesosb = 1.0 # biasz = np.dot(x, w) + bprint(z)
Cálculo manual:
- 2.0⋅0.5=1.0
- 3.0⋅−1.0=−3.0
- Suma = −2.0
- Bias = +1.0
➡️ z = −1.0
Ese z es exactamente lo que luego pasará a la sigmoide.
Varias muestras a la vez (forma correcta)
En redes neuronales nunca procesamos un dato aislado, sino muchos a la vez.
Supongamos:
- 3 muestras
- 2 características por muestra
X = np.array([ [2.0, 3.0], [1.0, -1.0], [0.5, 2.0]])W = np.array([ [0.5], [-1.0]])b = 1.0Z = X @ W + bprint(Z)
Dimensiones:
X→ (3, 2)W→ (2, 1)Z→ (3, 1)
Cada fila de Z es el resultado de una neurona aplicada a una muestra.
¿Por qué el bias es tan importante?
Sin bias, la neurona estaría obligada a pasar siempre por el origen (0,0).
El bias permite:
- Desplazar la decisión
- Ajustar umbrales
- Aprender patrones más flexibles
En la práctica:
Una red sin bias aprende mucho peor.
Uniendo con la sigmoide (primera neurona completa)
Ahora juntamos este artículo con el anterior.
def sigmoid(x): return 1 / (1 + np.exp(-x))Z = X @ W + bA = sigmoid(Z)print(A)
Aquí:
Z→ salida lineal de la neuronaA→ salida activada (probabilidad)
Esto ya es una neurona funcional.
Pieza reutilizable (guárdala)
Esta función se usará en todas las capas de la red:
def linear_forward(X, W, b): return X @ W + b
Más adelante haremos:
Z1 = linear_forward(X, W1, b1)A1 = tanh(Z1)
Qué viene después
En el Artículo #3 añadiremos el siguiente bloque esencial:
Funciones de activación: por qué una red sin ellas no puede aprender
Compararemos sigmoide vs tanh y veremos por qué se usan en capas distintas.