Un aspecto curioso de una tecnología tan avanzada y de resultados tan espectaculares como es el deep learning, es que en su seno sólo sea medianamente científica. Y digo sólo medianamente científica, sin desprecio ninguno y muy a pesar de su complejo e ingenioso aparato matemático. Y lo digo por el hecho de que no existe un camino recto para el diseño adecuado de una red neuronal de Deep Learning. Cuenta, por el contrario, bastante la experiencia y el ensayo y error.
Sin embargo, existe ya una buena experiencia acumulada y ciertas recetas o buenas prácticas aprendidas. Y con base en ello, hay bastantes aspectos del diseño de la red que están bastante claros, algunas líneas que seguir dependiendo del problema tratado. Unas líneas, además, bien documentadas.
Me he propuesto ir haciendo, en varios artículos que vendrán, una suerte de catálogo de componentes de las redes neuronales. Con ello me refiero a un censado de las opciones disponibles en diferentes aspectos del diseño con indicación básica de características y ámbito de aplicación.
Se trata más bien de un ejercicio de recapitulación y orden y no aportaré con ello nada realmente original, sino que me basaré en lo que he encontrado en dos de mis últimas lecturas: 'Deep Learning con Python' de François Chollet, y 'Python Deep Learning: Introducción práctica con Keras y TensorFlow 2' de Jordi Torres, dos libros con explicaciones muy claras y fundamentadas y que tienen no sólo una cercanía a nivel de título sino también de forma de explicarlo.
Pero antes de iniciar ese censo, quiero recuperar una figura (también presente con aspecto muy parecido en ambas obras), una figura que explica la estructura y elementos fundamentales de las redes neuronales y que me servirá de guía, también, para estructurar ese catálogo de componentes. Se trata de esta figura:
En la figura, se puede ver la estructura de la red, de donde extraemos los siguientes cuatro elementos:
- Capas: Es el elemento fundamental. Hay ciertas variantes, ciertos hiperparámetros como se suele expresar, para definir la red en lo relativo a las capas (número de capas, número de neuronas por capa, etc). Pero de cara al catálogo que mencionaba arriba, me fijaré básicamente en el tipo de capa (o combinaciones de capa). Ya veremos si más adelante, me interesa profundizar más.
- Función de activación: No se observa en el dibujo, pero es la función que rige la salida de las neuronas, especialmente relevante en las capas de salida. Dado que tiene relevancia en relación con el problema a tratar, hablaremos de ella en el catálogo.
- Función de pérdida: La función que calcula cuán lejos está el resultado que produce la red del esperado, y que constituye la entrada fundamental para el aprendizaje.
- Optimizador: Que, en función de lo que obtiene como entrada de la función de pérdida, 'decide' en qué cuantía y dirección modificar los parámetros de las capas, típicamente sus pesos.
Existen bastantes más variantes, bastantes más hiperparámetros a elegir para definir una red neuronal pero creo que, al menos inicialmente, me circunscribiré a esos cuatro elementos a la hora de traer a este blog ese catálogo de componentes de redes neuronales.
Empiezo la semana que viene.