Skip to content

aayes89/JavaRNN-LLM

Repository files navigation

JavaRNN-LLM

Una RNN escrita en Java puro para competir con Transformers.
Este proyecto surge por la curiosidad de constatar si es posible crear un modelo de inteligencia en Java puro funcional que pueda competir con los modelos actuales que utilizan Transformer. El primer paso está centrado en generar texto coherente y gramaticalmente correcto en Español, una vez alcansado este propósito, el modelo base resultante podría ser "entrenado" para "enseñarle" nuevo conocimiento.

Especificaciones del equipo con el que fue entrenado la RNN

  • Intel(R) Xeon (R) CPU E5-2650 v4 @2.20GHz, 12 núcleos 24 hilos.
  • NVIDIA GeForce GTX 1060 6GB VRAM
  • 32GB de RAM 2133MHz
  • Java SE Development Kit 23 (JDK 23)
  • Windows 10 Pro Nota: puede ser ejecutado también en MacOS o Linux

Funcionamiento

Tamaño de vocabulario establecido por defecto: 10000 tokens
Cantidad de épocas de entrenamiento inicial: 10
Tiempo de entrenamiento actual del modelo: 10h 52 min


Recibe un corpus en texto plano con el que se realiza el entrenamiento, para el contexto de esta implementación, se utilizó el texto extraido del Proyecto Gutenberg pg-logo-129x80 El ingenioso hidalgo don Quijote de la Mancha
La implementación actual permite operar con el máximo de recursos de su computadora personal o dispositivo móvil (con ajustes previos).
Actualmente debe modificar los parámetros para ajustar el comportamiento y aprovechar los recursos de su equipo.
Esta implementación está en fase de optimización por lo que se encuentra en desarrollo activo en este momento.

Diseño general actual

  • Arquitectura con 2 capas recurrentes (h1, h2) tipo Elman con atención pseudo-self-attention-like al estilo RNN-Attention.
  • Embeddings aprendibles (We) y paso explícito por capas ocultas.
  • Implementación de Adam desde cero, (respetando la fórmula oficial)
  • Regularización con dropout aplicada manualmente.
  • Modo interactivo.
  • Mecanismo de reentrenamiento conversacional por medio de comandos: LOAD_TEXT y RECORD
  • Guardado de modelo para evitar re-entrenamiento en cada ejecución.

Modelo RNN

Dado el tamaño del modelo no será posible compartirlo directamente en esta plataforma, en cuanto encuentre un espacio adecuado para ello, dejo el enlace de referencia para la descarga así como capturas de su desempeño en tiempo real.
Si posee un conjunto de datos ya depurados con los que entrenar su propio modelo, no dude en hacerlo y compartir sus resultados.

Propuesta de mejoras

  • Utilizar la librería Java Binding for OpenCL (JOCL) para permitir el uso de GPU Nvidia o similares en los cálculos y mejorar el desempeño de la RNN durante su entrenamiento (fine-tuning).
  • Aumentar el número de capas (si con ello se logra mejora sustancial en rendimiento).
  • Optimizar el mecanismo de atención (Self-attention mechanism) como lo hacen los modelos actuales para imitar la atención cognitiva, actualmente muy rudimentario.
  • Usar ReLU o Swish en capas superiores para no usar Math.tanh().
  • Utilizar LayerNorm o BatchNorm (si existe una implementación libre de librerías externas) para mantener el código puro.
  • Implementar word2vec o fastText embedding preentrenados en español para incializar We en conjunto con one-hot + embeddings.
  • Implementar UI que permita cambiar los parámetros de ejecución y sea más amigable con el usuario.
  • Factibilidad de guardado del modelo después de cada época transcurrida o esperar a que acabe las determinadas.
  • Validar si el uso de double en vez de float es correcto para cuestiones de manejo de memoria y escalabilidad.

Ayuda

Este proyecto es el fruto de mi esfuerzo, tiempo libre e interés por llevar el desarrollo de la inteligencia artificial a otros lenguajes no tan populares en este contexto como Java.
Si Ud. es amante de este lenguaje y quiere apoyar con la mejora de este proyecto, no dude en hacerlo, mucho camino queda por recorrer, pero el primer paso ya está dado.

Capturas

About

An RNN written in pure Java to compete with Transformers

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages