Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprende Implementación de una Sola Neurona | Red Neuronal Desde Cero
Introducción a las Redes Neuronales

bookImplementación de una Sola Neurona

Note
Definición

Una neurona es la unidad computacional básica de una red neuronal. Procesa múltiples entradas y genera una única salida, lo que permite que la red aprenda y realice predicciones.

Por ahora, se busca construir una red neuronal con una sola neurona. Como ejemplo, se utilizará para una tarea de clasificación binaria, como la detección de spam, donde 0 representa un correo legítimo (no spam) y 1 representa un correo spam.

La neurona tomará características numéricas relacionadas con los correos electrónicos como entradas y producirá una salida entre 0 y 1, que representa la probabilidad de que un correo sea spam.

El proceso paso a paso es el siguiente:

  1. Cada entrada se multiplica por un peso correspondiente. Los pesos son parámetros ajustables que determinan la importancia de cada entrada;
  2. Todas las entradas ponderadas se suman;
  3. Se añade un parámetro adicional llamado sesgo (bias) a la suma de entradas. El sesgo permite que la neurona desplace su salida hacia arriba o hacia abajo, proporcionando flexibilidad al modelo;
  4. La suma de entradas se pasa a través de una función de activación. Como solo se tiene una neurona, que produce directamente la salida final (una probabilidad), se utilizará la función sigmoide, que comprime los valores en el rango (0,1)(0, 1).
Note
Nota

El sesgo de la neurona también es un parámetro entrenable.

Clase Neurona

Una neurona necesita almacenar sus pesos y sesgo, por lo que una clase es una forma natural de agrupar estas propiedades relacionadas.

Note
Nota

Aunque esta clase no formará parte de la implementación final de la red neuronal, ilustra de manera efectiva los principios clave.

class Neuron:
    def __init__(self, n_inputs):  
        self.weights = ...
        self.bias = ...
  • weights: una lista de valores inicializados aleatoriamente que determinan la importancia de cada entrada (n_inputs es el número de entradas) para la neurona;
  • bias: un valor inicializado aleatoriamente que ayuda a la neurona a tomar decisiones flexibles.

Los pesos y el sesgo deben ser inicializados aleatoriamente con valores pequeños entre -1 y 1, extraídos de una distribución uniforme, para romper la simetría y asegurar que diferentes neuronas aprendan diferentes características.

En resumen, NumPy proporciona la función random.uniform() para generar un número aleatorio o un arreglo (especificando el argumento size) de números aleatorios de una distribución uniforme dentro del rango [low, high).

import numpy as np

np.random.uniform(low, high, size=...)

Propagación hacia adelante

Adicionalmente, la clase Neuron debe incluir un método activate(), que calcula la suma ponderada de las entradas y aplica la función de activación (sigmoide en nuestro caso).

De hecho, si tenemos dos vectores de igual longitud (weights y inputs), la suma ponderada puede calcularse usando el producto punto de estos vectores:

Esto nos permite calcular la suma ponderada en una sola línea de código usando la función numpy.dot(), eliminando la necesidad de un bucle. El sesgo puede añadirse directamente al resultado para obtener input_sum_with_bias. La salida se calcula aplicando la función de activación sigmoide:

def activate(self, inputs):
    input_sum_with_bias = ...
    output = ...

    return output

Funciones de activación

La fórmula para la función sigmoide es la siguiente, dado que zz representa la suma ponderada de las entradas con el sesgo añadido (valor de salida en bruto) para esta neurona en particular:

σ(z)=11+ez\sigma(z) = \frac1{1 + e^{-z}}

Utilizando esta fórmula, la función sigmoide puede implementarse como una función simple en Python:

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

La fórmula para la función ReLU es la siguiente, que básicamente establece la salida igual a zz si es positiva y 0 en caso contrario:

ReLU(z)=max(0,z)ReLU(z) = max(0, z)
def relu(z):
    return np.maximum(0, z)

1. ¿Cuál es el papel del término de sesgo en una sola neurona?

2. ¿Por qué inicializamos los pesos con valores aleatorios pequeños en lugar de ceros?

question mark

¿Cuál es el papel del término de sesgo en una sola neurona?

Select the correct answer

question mark

¿Por qué inicializamos los pesos con valores aleatorios pequeños en lugar de ceros?

Select the correct answer

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 2. Capítulo 1

Pregunte a AI

expand

Pregunte a AI

ChatGPT

Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla

Suggested prompts:

Can you show me how to complete the Neuron class with random initialization?

How does the activate method work in practice?

Can you explain why we use the sigmoid function for binary classification?

Awesome!

Completion rate improved to 4

bookImplementación de una Sola Neurona

Desliza para mostrar el menú

Note
Definición

Una neurona es la unidad computacional básica de una red neuronal. Procesa múltiples entradas y genera una única salida, lo que permite que la red aprenda y realice predicciones.

Por ahora, se busca construir una red neuronal con una sola neurona. Como ejemplo, se utilizará para una tarea de clasificación binaria, como la detección de spam, donde 0 representa un correo legítimo (no spam) y 1 representa un correo spam.

La neurona tomará características numéricas relacionadas con los correos electrónicos como entradas y producirá una salida entre 0 y 1, que representa la probabilidad de que un correo sea spam.

El proceso paso a paso es el siguiente:

  1. Cada entrada se multiplica por un peso correspondiente. Los pesos son parámetros ajustables que determinan la importancia de cada entrada;
  2. Todas las entradas ponderadas se suman;
  3. Se añade un parámetro adicional llamado sesgo (bias) a la suma de entradas. El sesgo permite que la neurona desplace su salida hacia arriba o hacia abajo, proporcionando flexibilidad al modelo;
  4. La suma de entradas se pasa a través de una función de activación. Como solo se tiene una neurona, que produce directamente la salida final (una probabilidad), se utilizará la función sigmoide, que comprime los valores en el rango (0,1)(0, 1).
Note
Nota

El sesgo de la neurona también es un parámetro entrenable.

Clase Neurona

Una neurona necesita almacenar sus pesos y sesgo, por lo que una clase es una forma natural de agrupar estas propiedades relacionadas.

Note
Nota

Aunque esta clase no formará parte de la implementación final de la red neuronal, ilustra de manera efectiva los principios clave.

class Neuron:
    def __init__(self, n_inputs):  
        self.weights = ...
        self.bias = ...
  • weights: una lista de valores inicializados aleatoriamente que determinan la importancia de cada entrada (n_inputs es el número de entradas) para la neurona;
  • bias: un valor inicializado aleatoriamente que ayuda a la neurona a tomar decisiones flexibles.

Los pesos y el sesgo deben ser inicializados aleatoriamente con valores pequeños entre -1 y 1, extraídos de una distribución uniforme, para romper la simetría y asegurar que diferentes neuronas aprendan diferentes características.

En resumen, NumPy proporciona la función random.uniform() para generar un número aleatorio o un arreglo (especificando el argumento size) de números aleatorios de una distribución uniforme dentro del rango [low, high).

import numpy as np

np.random.uniform(low, high, size=...)

Propagación hacia adelante

Adicionalmente, la clase Neuron debe incluir un método activate(), que calcula la suma ponderada de las entradas y aplica la función de activación (sigmoide en nuestro caso).

De hecho, si tenemos dos vectores de igual longitud (weights y inputs), la suma ponderada puede calcularse usando el producto punto de estos vectores:

Esto nos permite calcular la suma ponderada en una sola línea de código usando la función numpy.dot(), eliminando la necesidad de un bucle. El sesgo puede añadirse directamente al resultado para obtener input_sum_with_bias. La salida se calcula aplicando la función de activación sigmoide:

def activate(self, inputs):
    input_sum_with_bias = ...
    output = ...

    return output

Funciones de activación

La fórmula para la función sigmoide es la siguiente, dado que zz representa la suma ponderada de las entradas con el sesgo añadido (valor de salida en bruto) para esta neurona en particular:

σ(z)=11+ez\sigma(z) = \frac1{1 + e^{-z}}

Utilizando esta fórmula, la función sigmoide puede implementarse como una función simple en Python:

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

La fórmula para la función ReLU es la siguiente, que básicamente establece la salida igual a zz si es positiva y 0 en caso contrario:

ReLU(z)=max(0,z)ReLU(z) = max(0, z)
def relu(z):
    return np.maximum(0, z)

1. ¿Cuál es el papel del término de sesgo en una sola neurona?

2. ¿Por qué inicializamos los pesos con valores aleatorios pequeños en lugar de ceros?

question mark

¿Cuál es el papel del término de sesgo en una sola neurona?

Select the correct answer

question mark

¿Por qué inicializamos los pesos con valores aleatorios pequeños en lugar de ceros?

Select the correct answer

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 2. Capítulo 1
some-alt