Entonces, deep learning. ¿Has oído hablar de él? Si trabajas en el sector tecnológico, probablemente sí. Cada semana ves noticias sobre cómo la gente lo está usando para resolver todo tipo de desafíos interesantes.
Debido a todo el interés (y a veces el bombo publicitario puro) alrededor del deep learning, podrías creer que es algún tipo de tecnología revolucionaria nueva. Bueno, sí y no: hasta hace poco, los obstáculos en la eficiencia de la retropropagación y el hardware no nos permitían usarlo al máximo, así que hay muchas aplicaciones prácticas nuevas. Por otro lado, los conceptos e ideas (redes neuronales artificiales) han existido por bastante tiempo.
Las redes neuronales artificiales (RNA) son una familia de modelos computacionales basados en redes neuronales biológicas, como las que podemos encontrar en nuestros cerebros. Estos sistemas pueden ser ‘entrenados’ para realizar ciertas tareas computacionales (como clasificación) proporcionando ejemplos y permitiéndoles inferir reglas de ellos, en lugar de programar explícitamente las reglas como en el desarrollo de software regular.
Las redes neuronales no son un concepto nuevo, y su popularidad ha variado mucho a través del tiempo. Originalmente, estaban destinadas a construir réplicas artificiales de nuestros cerebros y otros sistemas con inteligencia general. Después de fallas iniciales (principalmente debido al poder computacional limitado de las máquinas de la época), fueron abandonadas en favor de alternativas prometedoras.
Con el advenimiento de hardware poderoso, GPUs con miles de núcleos y otros avances en computación, las redes neuronales proporcionan una herramienta poderosa para crear sistemas flexibles que aprenden de la experiencia. El emocionante campo del deep learning se basa fuertemente en redes neuronales. Por lo tanto, entender cómo funcionan las redes neuronales es un prerequisito si quieres ser parte de la revolución del deep learning.
En esta serie, aprenderemos sobre redes neuronales y las construiremos desde cero. Comenzaremos con ejemplos extremadamente simples y avanzaremos a través de los conceptos más importantes del deep learning.
Aprendizaje bio-inspirado
Las redes neuronales artificiales son un ejemplo de computación biológicamente inspirada, en este caso, la inspiración se deriva del cerebro humano y su bloque de construcción principal: la humilde neurona.
El comportamiento de una neurona puede modelarse de la siguiente manera:
Querido biólogo/neurocientífico/persona que entiende la fisiología neuronal, sabemos que esto no es exactamente lo que está pasando en nuestras neuronas. Por favor entiende que esto es solo un modelo simplificado que usamos para facilitar nuestros estudios y no llames a la policía cerebral. Gracias.
Esto es lo que está pasando:
- Las dendritas funcionan como las entradas para la neurona. Estas están conectadas a las terminales de salida de otras neuronas y reciben señales electroquímicas.
- Cuando una neurona recibe señales de entrada, no siempre produce una salida. La suma de todas las señales necesita ser lo suficientemente fuerte para cruzar un umbral para producir una salida.
- Una neurona puede tener múltiples entradas, y la sensibilidad de cada entrada puede ser diferente. Esto significa que las entradas individuales tienen contribuciones mayores o menores hacia cruzar el umbral. En otras palabras, las neuronas tienen entradas ponderadas.
- Si se cruza el umbral, las neuronas producen una salida que viaja hacia sus terminales axonales. Esta salida funciona como la entrada para otras neuronas y el proceso se repite.
Ahora que entendemos esto, podemos modelar una neurona como un bloque que:
- Recibe múltiples entradas.
- Realiza una suma ponderada de las entradas, y si satisfacen una condición (umbral), produce salidas.
Puedes tener diferentes tipos de neuronas alterando el número de entradas, número de salidas o la condición específica que necesita para producir la salida. Dicho esto, construyamos una red muy simple que consiste de solo 1 neurona.
Humildes Comienzos Neuronales: 1-entrada, 1-salida
Echemos un vistazo a la red neuronal más simple posible: una red con una entrada y una salida. Esta red toma la entrada y la multiplica por un valor de peso. Puedes visualizar el peso como el factor por el cual la red neuronal escala la entrada.
Más tarde discutiremos el proceso de aprendizaje de una red neuronal, por ahora solo recuerda esto: los pesos son donde reside el conocimiento de la red, y el proceso de aprendizaje gira en torno a ajustar los pesos hasta que obtengamos buenas predicciones.
Una red neuronal toma las entradas (los datos que pasamos) y las escala usando los valores de los pesos (el ‘conocimiento’ de la red). El proceso de aprendizaje consiste en ajustar esos pesos para que las entradas produzcan las salidas correctas.
Construyamos algo desde cero: una red neuronal extremadamente simple, una de las más pequeñas que podemos imaginar.
Supongamos que estamos tratando de crear una pequeña RNA que nos permita estimar cuántas calorías quemaré (en kcal) después de trotar por una cantidad dada de minutos.
Si resulta que eres un experto en este tema, por favor perdona mis números totalmente inventados.
Esta red tiene 3 partes importantes:
- Entrada: Una sola entrada, el número de minutos que pasé trotando.
- Peso: Un solo peso, en este caso con el valor 7.56
- Salida: Una sola salida, el número de calorías que quemaré después de trotar.
La red neuronal recibirá información en forma de una entrada (en este caso, el número de minutos que corrí) y conocimiento en forma de un solo peso con un valor de 7.56. Estimará la salida combinando estas dos piezas de información a través de una multiplicación.
Entonces, supongamos que hoy corrí 30 minutos. Paso este número a nuestra red, que lo multiplica por el peso de 7.56, y estima que quemé alrededor de 226 kcal.
Nuestra red neuronal es extremadamente simple, puedes modelarla fácilmente en Python como:
def simple_neural_network(input_information, weight):
return input_information * weight
El siguiente código es una pequeña demostración donde mostramos cómo estimar cuántas calorías quemaré después de correr 30 minutos:
def simple_neural_network(input_information, weight):
return input_information * weight
calculated_weight = 7.56
minutes_jogging = 30
calories_burned = simple_neural_network(minutes_jogging, calculated_weight )
print("Según mi red neuronal, después de correr {} minutos, quemé {} calorías".format(minutes_jogging, calories_burned))
Guarda este código en un archivo llamado simple_nn.py y ejecútalo usando el intérprete de Python 3:
python3 simple_nn.py
Según mi red neuronal, después de correr 30 minutos, quemé 226.79999999999998 calorías
Esta es la primera predicción que hicimos usando una red neuronal, ¡increíble, ¿no es así?
Podría parecer demasiado simplista, pero entender cómo las redes neuronales estiman salidas basadas en sus entradas y pesos es el conocimiento fundamental en el que se basa un campo tan grande como el deep learning.
Ok, genial, ¿pero cómo supiste que el valor correcto del peso es 7.56??
No lo sé, me inventé ese número.
Las redes neuronales aprenden pesos de ejemplos. Le proporcionas a la red muchos ejemplos que relacionan las entradas con las salidas, y a través de diferentes métodos, estima pesos que realizan una estimación válida. En nuestro caso, necesitaríamos recopilar muchos pares de datos que relacionen el número de minutos que una persona corrió con el número de calorías que quemó, y la red encontraría los pesos de esos ejemplos.
Cómo encontrar los pesos correctos es el tema de futuros artículos en esta serie, volveremos a esto después de tratar con el proceso de estimación. Por ahora, solo confía en que esos valores de peso son razonablemente correctos.
Para ser honesto, no se me ocurrió ese número completamente al azar. Busqué en Google cuántas calorías quema una persona después de correr por cantidades variables de tiempo, y estimé que la proporción de 7.56 era una aproximación suficientemente buena. Por supuesto, hay muchos otros factores que influyen en el número de calorías quemadas: la velocidad a la que corrió la persona y el peso general de la persona, entre otros.
En el próximo artículo, aprenderemos cómo las redes neuronales pueden tomar en consideración varias entradas para producir mejores estimaciones.
Qué hacer a continuación
- Comparte este artículo con amigos y colegas. Gracias por ayudarme a llegar a personas que podrían encontrar útil esta información.
- Puedes encontrar el código fuente para esta serie aquí
- Este artículo está basado en el libro: Grokking Deep Learning y en Deep Learning (Goodfellow, Bengio, Courville).
- Envíame un email con preguntas, comentarios o sugerencias (está en la página Autor)