The Fraud Explorer inició su desarrollo en el año 2014. Para esa época no se conocían los LLM como se conocen hoy y no existía ChatGPT. La inteligencia artificial que decidimos crear fue una basada en sistemas expertos a través de reglas, que nos permitían poder hacer un análisis descriptivo de los eventos que analizábamos.
The Fraud Explorer inició con el diseño de un algoritmo propietario basado en el triángulo del fraude que encontraba eventos de presión, oportunidad y justificación
A medida que fue pasando el tiempo, perfeccionamos la IA basada en sistemas expertos y consolidamos nuestro algoritmo basado en el triángulo del fraude, que se hizo mas robusto y empezó a incorporar otros modelos como el diamante, el pentágono y la estrella del fraude. Este algoritmo, sin embargo, tenía una limitante y era que carecía de razonamiento, solamente se basaba en seguir unas instrucciones a través de reglas.
El lugar del algoritmo y la red neuronal
En el año 2024 empezamos a experimentar con la IA generativa en nuestros laboratorios y nos dimos cuenta del gran potencial que tenía para incorporarla en la última milla del proceso de alertamiento antifraude. Si el algoritmo del triángulo del fraude entregaba 100 alertas, podíamos pedirle a un LLM que las revisara, que razonara y que nos ayudara a eliminar falsos positivos y así reducir el tiempo que un humano le estaba dedicando a la revisión de miles de alertas mensuales.
Fue así como empezamos a incorporar modelos LLM fundacionales como Mistral, Llama y Gemma y empezamos a obtener buenos resultados con el objetivo de reducir falsos positivos. Sin embargo, descubrimos que estos modelos fallaban en sus análisis y algunas veces no eran capaces de deducir sobre una buena o mala alerta como lo hacemos los humanos, fue aquí que nos dimos cuenta que podíamos entrenar un modelo para hacerlo más eficiente y efectivo en la tarea.
El lugar del algoritmo estaba claro: detectar situaciones sospechosas en las empresas, basado en la teoría del triángulo del fraude. Por otro lado, el lado del LLM también estaba claro: analizar las alertas entregadas por el algoritmo y razonar sobre ellas para deducir si eran relevantes o no.
Plataforma de entrenamiento
Después de estudiar los diferentes entornos de entrenamiento y las variadas técnicas para ello, decidimos usar MLX (Machine Learning X) del equipo de Apple Research, que básicamente fue creada para usar el potencial de la arquitectura unificada de los equipos Apple con ARM. Compramos equipos Mac Studio con Chips M1 Ultra y con 64 y 128 GB de RAM para poder correr el proceso de entrenamiento de lo que en ese momento nos imaginabamos que podíamos crear.
Por otro lado, estudiamos los diferentes tipos de entrenamiento y decidimos usar LoRA (una técnica que permite hacer fine tuning a un LLM) y escogimos un modelo fundacional que cumpliera nuestras expectativas, que entendiera el español correctamente y que tuviera una licencia permisiva para poder re-entrenarlo y usarlo comercialmente, fue entonces como llegamos a Gemma de Google.
Modelo fundacional
Gemma, el modelo fundacional que escogimos para re-entrenarlo y hacerlo eficiente y efectivo en nuestras necesidades, es de Google y es considerado un Open LLM, basado en Deepmind Gemini, con una licencia permisiva que nos permitía explícitamente re-entrenarlo, redistribuirlo y hacer un uso comercial del mismo.
Gemma viene en diferentes tamaños, uno de 9 billones de parámetros y otro de 27 billones. Para nuestra labor escogimos el modelo de 9 Billones de parámetros ya que se ejecuta perfectamente en nuestra infraestructura, donde tenemos una tarjeta NVidia RTX 4000 SFF de 20 GB donde se carga el modelo y se procesa la red neuronal.
Dataset de entrenamiento
Hemos recolectado más de 10mil alertas de fraude y corrupción reales durante 10 años y le hemos explicado a Gemma por qué son relevantes y que aspectos de cada alerta debe tener en cuenta para sus futuros razonamientos. El dataset está dividido en tres partes:
- Training: esta parte contiene el 80% de los datos de entrenamiento, es decir, aproximadamente 8mil eventos reales de fraude con su respectiva explicación. Estos son los datos con los cuales el modelo aprende y modifica sus parámetros.
- Validation: esta parte contiene el 10% de los datos de entrenamiento, aproximadamente mil eventos reales con su explicación. Esta parte es la que le sirve al entrenamiento para validar que tan bien funciona el modelo en un conjunto de datos que no ha visto durante su entrenamiento, es decir, el dataset de validación sirve para conocer qué tan bien generaliza el modelo ante nuevos datos.
- Test: esta parte contiene el otro 10% de los datos, aproximadamente mil y juega un papel fundamental a la hora de testear el modelo ya no en la fase de entrenamiento sino en la fase de producción.
Un buen entrenamiento (fine tuning) está directamente relacionado con la calidad de los datos de entrenamiento y no tanto con el número de datos usados para entrenarlo. La comunidad de investigadores recomienda tener cómo mínimo un dataset de 1000 puntos cuidadosamente elaborados, en vez de tener 100mil de poca y pobre calidad.
Terminología al entrenar un LLM
Entender qué significa cada término es fundamental para poder tener éxito en la tarea de realizar un fine tuning de un modelo LLM. Estos son los términos que es de vital importancia entender, con su significado y recomendación:
- Dataset: es el conjunto de datos que se usará para el proceso de fine tuning. El dataset debe partirse en 3, un pedazo para entrenamiento (80% recomendado), otro para validación (10%) y otro para el testing (10%).
- Epochs: un epoch representa un paso completo por el dataset de entrenamiento. Si se tienen 8mil puntos de datos, un Epoch será el paso por cada uno de esos puntos una única vez. Dos Epochs significa el paso de dos veces por cada punto de datos. Hay una fórmula para calcularlo y es Epochs = iteraciones totales * tamaño del batch / cantidad de datos. La cantidad de iteraciones necesarias para completar un epoch es igual a la cantidad total de puntos de datos de entrenamiento dividida por el batch_size. Por ejemplo, si se tiene 1000 puntos de datos y un batch_size de 100, se necesitarán 10 iteraciones para completar un epoch.
- Tamaño del batch: o más conocido como batch_size, hace referencia a la cantidad de pasos en paralelo que dará el sistema de entrenamiento sobre nuestros datos. Un batch_size de 1 significa que pasará punto por punto de manera lineal y un batch_size de 4 significa que lo hará en paralelo 4 veces. Este parámetro de entrenamiento es útil para reducir la cantidad de memoria requerida para entrenar un modelo.
- Training Loss: este término refleja cómo de bien el modelo está aprendiendo a predecir la salida (su repuesta, el output) según los datos de entrenamiento. Cuando el valor de training_loss decae (baja) lo que significa es que el modelo está aprendiendo y entendiendo mejor los diferentes patrones del dataset de entrenamiento.
- Validation Loss: mide cómo de bien funciona el modelo en un set de datos separado del proporcionado para el entrenamiento y que no ha visto y es nuevo para él. Durante el proceso de entrenamiento sirve para proveer información sobre la habilidad del modelo para generalizar sobre nuevos datos según vaya aprendiendo en el dataset de entrenamiento. Cuando este valor decae en el tiempo significa que las predicciones del modelo se vuelven más acertadas, correctas y precisas en los datos que están por fuera de su dataset de entrenamiento.
- Gradiente descendiente: es el algoritmo que usa internamente el framework de entrenamiento para ajustar los nodos (parámetros de las neuronas) para obtener las respuestas correctas que queremos y que le estamos enseñando al modelo.
- Perplejidad: conocido también como PPL o Perplexity, es la medida de incertidumbre en las predicciones de un LLM. En términos simples, indica cuan sorprendido está un modelo para su tarea de generar la siguiente palabra en una oración. Mientras mas baja sea la perplejidad, mejor capacidad tendrá el modelo para predecir la siguiente palabra en una secuencia, reflejando mayor seguridad. Un valor de 10 en perplexity significa que el modelo no está seguro entre cual de las 10 palabras elegir para completar la oración (tiene 10 posibles palabras cada vez). Dado un modelo y una secuencia de texto de entrada, la perplejidad mide la probabilidad de que el modelo genere la secuencia de texto de entrada. Como métrica, se puede utilizar para evaluar qué tan bien el modelo ha aprendido la distribución del texto con el que fue entrenado. Hay que tener en cuenta que el valor de salida se basa en gran medida en el texto con el que fue entrenado el modelo. Esto significa que los puntajes de perplejidad no son comparables entre modelos o conjuntos de datos.
- LoRA: traduce a Low Rank Adaptation y es una técnica de entrenamiento popular y liviana que reduce significativamente la cantidad de parámetros entrenables. Funciona insertando una cantidad menor de nuevos pesos en el modelo y solo estos se entrenan.
- Learning Rate: cuanto y en qué velocidad LoRA aprende de cada paso de entrenamiento. Se puede decir también que significa cual lento se lee el dataset de entrenamiento en el proceso de fine tuning. Es parecido a leer un libro, si se lee rápido seguramente se aprende poco y se lee lento se tiene mejor retención y memorización.
- Overfitting: cuando el modelo aprende los datos de entrenamiento muy bien pero debido a ello pierde su habilidad para generalizar en nuevos datos, es decir, sucede cuando el modelo solamente se vuelve bueno en los datos entrenados porque se enfocó mucho en aprenderlos. En otras palabras, esto es sobre-entrenamiento. El overfitting es como un estudiante demasiado entusiasta que memoriza cada respuesta de un libro de texto sin comprender los conceptos subyacentes.
- Underfitting: cuando un modelo es demasiado simplista para captar las complejidades presentes en los datos de entrenamiento. Un modelo con underfitting carece de la capacidad de captar patrones intrincados, lo que genera un rendimiento deficiente tanto con los datos de entrenamiento como con los nuevos datos. Es como si el modelo no hubiera logrado aprender ni siquiera la estructura básica del lenguaje.
- Bias: suposiciones que hace un modelo para que una función sea más fácil de aprender. En realidad, es la tasa de error de los datos de entrenamiento. Cuando la tasa de error tiene un valor alto, la llamamos sesgo alto y cuando la tasa de error tiene un valor bajo, la llamamos sesgo bajo.
- Variance: la diferencia entre la tasa de error de los datos de entrenamiento y los datos de prueba se denomina varianza. Si la diferencia es alta, se denomina varianza alta y, cuando la diferencia en los errores es baja, se denomina varianza baja. Por lo general, queremos lograr una varianza baja para generalizar nuestro modelo.
Ahora que conocemos la terminología usada para entrenar un LLM, veamos cuales han sido las reflexiones, conclusiones y enseñanzas que nos ha dejado el estar entrenando nuestro modelo FraudGPT durante 1 año.
Lección #1: Overfitting y Underfitting
En un escenario ideal, tanto el training loss (línea azul) como el validation loss (línea naranja) deberían disminuir hasta un punto de convergencia, lo que indica que el modelo está aprendiendo de manera eficaz y es capaz de generalizar bien a nuevos datos. Esto indicaría que el modelo está aprendiendo de los datos de entrenamiento y mejorando su capacidad para hacer predicciones precisas. Cuando las líneas se alejan entre si, al principio o al final, ocurre el overfitting o el underfitting.
Es importante monitorear la relación entre estos dos tipos de pérdida. Si el training loss continúa disminuyendo significativamente mientras que el validation loss comienza a aumentar, esto puede indicar un overfitting. El overfitting ocurre cuando el modelo aprende los datos de entrenamiento demasiado bien en tal medida que afecta negativamente la capacidad del modelo para generalizar a nuevos datos. Básicamente, el modelo se adapta tanto a las características específicas del conjunto de datos de entrenamiento (incluidas sus peculiaridades y anomalías) que su desempeño es deficiente con cualquier dato que difiera de este conjunto de entrenamiento, incluso levemente.
Cuáles son las principales razones por las que un modelo cae en overfitting ?, básicamente sucede por una alta variación y un bias bajo, por la poca cantidad de datos usados para entrenar el modelo y por la cantidad excesiva de pasos (iteraciones) y epochs. Esta situación de overfitting se soluciona aumentando el dataset de entrenamiento y parando de forma temprana la fase de entrenamiento (cuando el training loss y el validation loss) empiecen a alejarse entre si.
Cuáles son las principales razones por la que un modelo cae en underfitting ?, por un bias alto y una baja variación, por un tamaño deficiente del dataset de entrenamiento y por no usar las suficientes iteraciones antes de que converjan el training loss y el validation loss. Esta situación se soluciona aumentando el número de iteraciones y epochs.
Lección #2: Validation Loss y Training Loss
El objetivo es reducir al mínimo la pérdida de validación (validation loss). Casi siempre es bueno que haya un poco de overfitting (no mucho). Lo único que importa al final es que la pérdida de validación (validation loss) sea lo más baja posible.
Un training loss por debajo de 1 significa que el modelo está cayendo en overfitting (aprendiendo demasiado el set de entrenamiento). La recomendación es que el valor de training loss esté entre 1.2 y 1.3.
El ajuste perfecto se produce cuando la training loss = validation loss. Si ambos valores terminan siendo aproximadamente iguales y también si los valores convergen, entonces hay muchas probabilidades de que estemos haciendo el entrenamiento bien.
Si la pérdida de validación nunca aumenta sino que se vuelve constante, por ejemplo, después de unos 100 pasos, deberíamos detenernos allí, ya que podemos asumir razonablemente que nos sobreajustaremos (overfitting) si superamos ese límite.
Lección #3: Learning Rate
Durante el entrenamiento, en cada paso de entrenamiento el entrenador intenta modificar el modelo para que la puntuación de pérdida disminuya. La cantidad de cambios está determinada por la tasa de aprendizaje (Learning Rate). Por lo general, una tasa de aprendizaje más alta hará que el entrenamiento sea más rápido y una tasa de aprendizaje más baja hará que el entrenamiento sea más lento, pero si se establece la tasa de aprendizaje demasiado alta, el entrenamiento no será efectivo y si se establece demasiado baja, se desperdiciará mucha más energía de la que se necesita para entrenar el modelo de manera efectiva.
La calidad final de un modelo está directamente relacionada con la cantidad de pasos de entrenamiento necesarios para llegar a ella: siempre que no se produzca un overfitting, cuantos más pasos se necesiten, mejor será el modelo. Si se llega al valle de la curva de validación demasiado pronto, se debe intentar reducir el Learning Rate y entrenar de nuevo. La mejor estrategia es, de hecho, decidir cuántos epoch se está dispuesto a esperar y luego optimizar la tasa de aprendizaje para que el modelo llegue al valle más cerca del final del entrenamiento que del inicio.
Lección #4: Perplexity
Un valor de perplexity es mejor que uno alto. Tener un perplexity de 300 significa que el modelo duda de cuál de las 300 palabras mas cercanas puede usar parea completar la siguiente palabra de una oración. Tener un perplexity de 5 hace el modelo más confidente y seguro al tener solo 5 palabras posibles para completar la siguiente palabra de una oración.
El valor de perplejidad se mejora aumentando el tamaño del dataset, es decir, teniendo mas y mejores ejemplos.
Cuantización del modelo
Gemma 2 en su modelo original de 9 Billones de parámetros requiere una GPU de 20GB para poder cargar y ejecutar el modelo. Existen técnicas que nos permiten reducir el tamaño del modelo, no solo para que quepa en una GPU de menor tamaño sino para que sus inferencias se ejecuten también más rápido.
En NOFRAUD usamos la técnica de cuantización (quantization) que nos permite reducir el tamaño el modelo ya entrenado con nuestros datos de 20GB a 5GB usando el modelo de cuantización Q4KM.
Conclusiones
Entrenamos el modelo fundacional Gemma2 de 9 Billones de parámetros con nuestros datos especiales recolectados durante 10 años que contienen alertas reales de fraude que se dieron en empresas en diferentes sectores de la economía. Al entrenar un modelo con nuestros datos, lo hacemos mas eficiente y efectivo porque el modelo fundacional original nunca ha visto este tipo de datos y no sabría como analizarlos de manera efectiva.
Al entrenar el modelo, encontramos los valores perfectos en training loss y validation loss, con una perplejidad aceptable para aumentar la seguridad del modelo en sus predicciones y logramos ejecutarlo en una GPU de manera rápida a través del un proceso de cuantización. Todo esto ejecutado desde el framework MLX de Apple en equipos con chip M1 Ultra de última generación.
Este proceso de entrenamiento hizo posible ponerle un nombre a nuestro LLM resultante: FraudGPT y logramos reducir hasta un 97% de falsos positivos y aumentar la efectividad el encontrar y detectar de mejor manera eventos relacionados con fraude y corrupción en las empresas.
Referencias
Acerca de NOFRAUD
NOFRAUD es la compañía que desarrolla el software antifraude The Fraud Explorer y apoya a personas y empresas a enfrentar y solucionar sus retos en materia de fraude interno, corrupción y abuso corporativo. NOFRAUD ha creado la base de datos conductual de actos deshonestos más grande del mundo en Español e Inglés, que sirve para que la inteligencia artificial encuentre patrones sospechosos de corrupción al interior de las organizaciones.
Mejoramos la capacidad de las organizaciones incrementando sus beneficios, arrebatándole a los perpetradores la posibilidad de afectar negativamente los ingresos a través del fraude, la corrupción, el abuso corporativo y la generación de ambientes tóxicos.
Contacte conmigo en » jrios@nofraud.la y Visítenos en » www.nofraud.la.