proyecto fin de carrera - Tienda de ultramarinos
logo Tienda de Ultramarinos
Etiquetas: proyecto fin de carrera

RELAX

No pasa otra palabra por mi mente desde que el viernes entregué por fin mi Proyecto Fin de Carrera.

He de reconocer que no es relax absoluto puesto que aún debo ir a defender, pero se agradece poder volver a despertarse cuando te sale de los cojones sin nada que hacer, y sin molestas alarmas que te arruinan la mejor parte del sueño.

Si aún no había escrito nada es porque, como es evidente, necesitaba unos días lejos del pc, o perdiendo el tiempo con  jueguetes. Ahora, a ver si aprendo cómo utilizar Beamer para hacer una buena presentación (para la que aún no sé la fecha, pero debo estar preparado).

Mi Proyecto Fin de Carrera: Asistente para Redes MLP


ACTUALIZACIÓN POSTERIOR: Cuelgo la presentación que hice para la defensa del PFC. Igual queda más claro en qué consiste.


Bueno, como cada vez queda menos tiempo (el 12 de noviembre es la última fecha para entregar) y no sé si me dará tiempo de escribir el post sobre el Perceptrón Multicapa, me lo salto y voy a intentar explicar en qué consiste mi Proyecto Fin de Carrera; así los que me preguntan qué estoy haciendo, tienen aquí una clara (espero) explicación.

Esta semana he empezado con la documentación, y esto que pego más adelante es un primer intento de lo que será la Descripción (y Justificación) del Proyecto en la Memoria. No creo que cambie mucho la cosa.

Un posible nombre descriptivo del PFC en sí, podría ser:

Asistente para modelado de redes neuronales MLP mediante computación distribuída.

Las actividades esenciales en las que va a consistir el programa son:

  • Interfaz gráfica para facilitar el desarrollo de las redes MLP;
  • Generación automática de modelos distintos en base a los parámetros;
  • Computación distribuida de los diferentes modelos;
  • Selección automática de la red más eficiente;
  • Muestra por pantalla de los parámetros significativos de la mejor red.

Las redes neuronales (como expliqué en un anterior post) se definen por una amplia cantidad de caracteres que implican un enorme y complejo número de cálculos con ellos, lo cual significa que es muy difícil predecir exactamente el comportamiento que tomará la red con diferentes parámetros. Además, puesto que la elección de algunos es dejada al azar —como los pesos entre cada neurona— también es necesario entrenar varias veces un mismo modelo de red (con todos los parámetros igual salvo aquellos que se dejan al azar) para tratar de obtener mejores resultados.

Otro factor importante es que el cálculo del entrenamiento no se realiza inmediatamente sino que conlleva un tiempo de procesamiento nada despreciable, la elaboración de una buena red neuronal con una salida eficiente requiere unas elevadas dosis de ensayo/error; resultando una tarea harto tediosa, y que consume mucho tiempo.

Además la herramienta utilizada para el entrenamiento y ejecución de las redes —entorno/lenguaje estadístico R— funciona como lenguaje de scripting, y dado el creciente pánico y temor de la mayoría de usuarios ante la introducción de comandos en consola, y lo pesado de definir múltiples redes distintas mediante este sistema, se creará una interfaz gráfica que lo facilite.

Por todo ello, surge la necesidad de automatizar esta tarea, permitiendo la preselección de varios modelos —mediante una GUI/IGU (Graphical User Interface/Interfaz Gráfica de Usuario)— que se entrenen secuencialmente sin la constante intervención del usuario. Se permitirá la preselección de los diversos parámetros para formar las distintas redes que se desee testear, dejando que las máquinas lo calculen por sí mismas.

Dado que el total de redes puede ser bastante alto, lo que implicaría un altísimo tiempo de procesamiento, es necesario buscar una solución basada en la computación distribuida, en la que todos los modelos escogidos por el usuario se evaluen en varios servidores de cálculo repartidos en distintos ordenadores.

La solución presentada en este proyecto, va un paso más, y no sólo entrena todas las redes, sino que automatiza la selección de la red que obtiene un rendimiento más cercano al óptimo. El lenguaje R sólo realiza el entrenamiento y ejecución de las redes, devolviendo únicamente la información relevante de las mismas, sin aplicar ningún criterio de calidad. Puesto que se pretenden entrenar un elevado número de ellas, sería incómodo para el usuario compararlas una a una, de modo que se automatiza también este proceso: tanto en los servidores de cálculo para devolver su mejor red entre las diversas entrenadas, como en la máquina que solicita todos los modelos y que recibe los mejores entre ellos.

El criterio de calidad está basado en la curva ROCReceiver Operating Characteristic curve— y es el valor del área bajo la curva —Area Under Curve (AUC)—. Este criterio será explicado detalladamente más adelante.

Mente clara

Tras toda la mañana programando, y desde la hora de comer hasta media tarde me he bloquedado pensando cómo implementar una cosa. Para el Proyecto, del que aún debo alguna entrada aquí, necesito distribuir unas instrucciones entre diversos servidores de cálculo, que pueden estar ocupados computando anteriores, así que tenía que buscar una forma eficiente de comunicarse mediante mensajes para saber cuales están libres para enviarles su parte del procesamiento.

Y no se me ocurría nada decente, he pensado tumbado en la cama (muchas veces me tumbo unos instantes a pensarlo todo detenidamente y me vienen las ideas), le he dado vueltas mientras cagaba, conducía, comía… Y nada.

Así que a eso de las seis y media me he ido a escalar con un amigo, que el deporte viene bien para despejarse. Y al volver tres horas después, en la ducha, al acordarme del duro trabajo que me esperaba ahora y darle vueltas de nuevo al problema, en seguida me ha venido la solución a la cabeza.

Lo enfocaba mal, porque quería hacerlo todo con el método desde el que se solicita enviar todas las tareas a los servidores de cálculo. En la solución que he tomado, lo único que hace es enviar a todos ellos un mensaje preguntando por su estado. Lo que voy a hacer es que el método que procesa la respuesta con el estado de cada servidor, sea el que les envíe las órdenes si están libres.

Una solución sencilla en la que no había caído hasta que no he tenido la mente clara, durante la ducha después del ejercicio.