¿Se puede utilizar Machine Learning en PHP?
Ahora entran en escena los verdaderos expertos de ML... que si la velocidad del proceso, que si procesos en paralelo, que si multiprocesador, que si multihilo, que si la GPU con Tensorcores, que si CUDA, que si NVIDIA, que si Tensorflow, que si mejor en python o C, que PHP es un lenguaje interpretado, que ya verás cuando haga el backpropagation, que ni loco utilices una Raspberry para hacer Machine Learning (vaya... esto yo lo he hecho. Mirad la foto de arriba 😁), que si chistes del tipo: que te van a dar las uvas esperando a que acabe, o que cuando acabe de aprender tu primer modelo, tu hijo ya irá a la universidad, ......
Pues sí.... también tienen razón y hay que entender la posición de cada una de las partes.
Cuando se crea el primer programa en PHP destinado al Machine learning con los ejemplos más habituales para solucionar el problema XOR, veréis que funciona bien, rápido incluso en una Raspberry Pi dando valores de ejecución de 0 segundos para 1.000 épocas, por ejemplo. Entonces.... ¿donde está ese gran problema de la velocidad del que todo el mundo habla?
Pues bien. Cuando nos disponemos a utilizar datasets reales existen muchas casuísticas: hay que utilizar decenas o centenas (incluso miles) de datos en los nodos de entrada, número de nodos de salida, de capas ocultas y número de neuronas (perceptrones). No existe una norma concreta para saber cuantos nodos o capas necesitaré. Actualmente la ciencia cierta será la de prueba y error. La gran cantidad de cálculos es exponencial al tamaño, por no hablar de la ingente cantidad de datos que hay que entrar en cada época y de las innumerables pruebas con diferentes configuraciones para hallar el modelo más eficiente, evitar el overfitting, ajustes del parámetro de la tasa de aprendizaje, y en el peor de los casos, tener que revisar las entradas que damos a los Inputs para detectar datos erróneos que nos hace bailar el modelo o que no llegue al mínimo del resultado esperado, modificar el número de nodos de entrada o salida.... y vuelta a empezar con los test de entrenamiento, y piensas.... vaya.... esto está tardando un poco más de lo que yo creía..... y ves que el proceso tarda, y tarda, y tarda cada vez que realizas una nueva prueba. Entonces es cuando os dais cuenta de que realmente los expertos tenían muchísima razón. En serio... os acordaréis de ellos y veréis que sólo intentaban ayudaros, que no tenían nada en contra del PHP. El uso de maquinaria específica y software especializado agiliza los procesos cientos de veces. Tengo intención de publicar algunos benchmarks para que os podáis hacer una idea de los tiempos que estamos hablando cuando hablamos del deep learning y de la necesidad imperativa de agilizar la velocidad de estos cálculos.
En serio. Si no fuese tan necesaria la velocidad.... ¿Se habrían inventado los Tensorcores de las GPU'S NVIDIA casi dedicadas exclusivamente al mundo de la IA?, ¿Google tendría una granja de servidores para ofrecer servicios exclusivos de Deep Learning en máquinas gigantes de exagerado consumo de procesos, ofreciendo alquiler por uso de CPU o GPU?
Vaya.... pues me has tirado por tierra todos mis planes. Yo necesitaba hacerlo en PHP y me había hecho ilusiones. ¿Y ahora qué?
Espera.... Tranquil@..... No tires la toalla aún. en serio, no todo está perdido. Te voy a dar aliento para poder hacer realidad tu sueño de realizar DEEP LEARNING en PHP con MULTIPROCESOS ejecutándose todos ellos a la vez en MULTI CPU'S. No es mi intención discutir entre si hay que dedicar software y hardware exclusivo para el Deep learning o que si es una salvajada hacerlo con PHP, únicamente trato de dar soluciones alternativas a unas necesidades específicas. Para mí la decisión es clara y PHP se queda corto, pero no es un inútil.
Las personas que buscan desesperadamente un sistema como el aquí expuesto responde a las siguientes necesidades:
- Programadores demasiado habituados o dependientes de PHP. Algo así como tener Overfitting de PHP.
- Imposibilidad o limitación de paquetes que se pueden instalar en los servidores de producción. Muchas veces en hosting compartidos.
- Pocos recursos para empezar en el campo de la Inteligencia Artificial pero con muchas ganas de aprender. PHP es accesible, fácil de entender, implementar y de instalar. Para aprender Inteligencia Artificial desde 0 es muy buena opción.
- Poco tiempo para estudiar o adaptarse a los diferentes y nuevos lenguajes de programación porque muchas veces la solución requieren de una actuación inmediata.
- Existen programadores que han desarrollado sistemas enteramente en PHP y necesitan implementar nuevas y actuales soluciones basadas en IA. Hacerlo íntegramente en PHP solucionaría muchísimos problemas de implementación.
- Código escrito en Puro PHP. No hay que instalar absolutamente nada. Se puede utilizar tanto en servidores de pruebas como en los de producción o hosting compartido.
- Puede importar/exportar en formato JSON la configuración de la red neuronal aprendida.
- No hay límite (a excepción de la memoria) en el número de capas ni nodos.
- Cada capa puede tener una función de activación diferente.
- Funciones de activación implementadas: sigm, tanh, relu.
- Incluye parámetro de tasa de aprendizaje.
- Funciona tanto en entornos windows como GNU/Linux.
Aún no, pero muy pronto.
- Código de la librería Machine learning en Puro PHP:
https://github.com/vivesweb/rn-Neural-Network-in-pure-PHP-ML-AI
- Código de la librería para gestionar los datos Train, Validation & Test, tanto para los inputs como los outputs deseados, directamente gestionando los datos .CSV en paralelo. Utilidades como por ejemplo ordenar aleatoriamente los datos de entrada y de salida manteniendo la correspondencia entre ellos o bien dividir los datasets en varias partes para obtener datos de entrenamiento, datos de validación y datos de test:
https://github.com/vivesweb/csv_pair_file
- Código para el control de los recursos del sistema (Temperatura de la CPU/GPU, memoria, almacenamiento, sistema operativo, .....):
https://github.com/vivesweb/system-resources
Comentarios