miércoles, 15 de marzo de 2023

¿Qué hay dentro de la "caja negra" de la AI?


¿Qué hay dentro de la "caja negra" de la AI?
(¿Cómo se implementan los LLM?)


Para los que quieran saber qué hay dentro de la "caja negra" del ML y la AI, es interesante notar que el Machine Learning incluye diversas técnicas de estadística y de álgebra lineal, con vectores, matrices y tensores (matrices multidimensionales), que se aplican a los 'Large Data Sets', incluyendo algoritmos para clasificar los datos en múltiples niveles, agrupar, organizar, encontrar 'patrones ocultos' en los datos y hacer predicciones numéricas. Para lo cual existen 'software libraries' como 'PyTorch', 'Pandas', 'Prophet', la plataforma de desarrollo 'Hugging Face', y otras herramientas que se pueden utilizar en Python (el lenguaje utilizado para escribir el 'código fuente' de ChatGPT) así como otros lenguajes de programación.

Además ChatGPT tiene una API (Application Programming Interface), proporcionada por OpenAI, la cual permite a los 'application developers' integrar las capacidades de ChatGPT en sus propias aplicaciones, para de esa forma crear funciones de generación de texto AI conversacional dentro de su software.

También es importante mencionar que, en el caso de los LLM, estas técnicas de estadística no se aplican directamente a la 'bolsa de palabras' como tal (Bag of Words, BOW, en inglés) sino a los 'vectores de características numéricas' (numerical feature vectors, en inglés) que se derivan de los 'tokens' de la BOW y a su 'Frecuencia de Término' (Term Frequency, en inglés); un proceso llamado 'Encoding' que realizan los 'Transformers' en el marco de la arquitectura BERT.

He aqui una lista de los más importantes algoritmos que se utilizan, según la clase de tarea que se desee realizar sobre un Large Dataset dado (clasification, clustering, prediction):

  • Multi Classification (Multi-class o Multi-label): Support Vector Machine (SVM), Classification And Regression Tree (CART), Decision-Tree, Naive Bayes, F1 Score, Neural Network (NN).
  • Clustering and Filtering: DBSCAN, K-Nearest Neighbor (KNN), K-Means Clustering, Hierarchical Clustering, Gaussian Mixture Model.
  • Numerical Prediction: Linear Regression, Logistic Regression, Elastic Regression, Random Forest.

Y aunque tratar de explicar estos algoritmos se sale completamente del alcance de este blog, de todas formas vale la pena comentar algunas cosas para mejor entender los 'principios' en los cuales se basa esta nueva tecnología del ML y la IA ... y si quieren pueden pregutarle a la propia IA sobre cualquiera de estos algoritmos y seguramente la IA les dará una buena explicación ...

Con respecto a la clasificación de los algoritmos, es bueno aclarar que algunos de estos algoritmos pueden realizar varias tareas diferentes. De hecho, aunque los algoritmos de Neural Network (NN) aparecen en el grupo de "Multi Classification", porque precisamente la clasificación es una de las aplicaciones principales de las redes neuronales, donde el objetivo es categorizar los datos de entrada en clases predefinidas (por ejemplo, identificar una imagen como "gato" o "perro"), sin embargo, las redes neuronales son muy versátiles y se pueden configurar para resolver muchos otros tipos de problemas, incluyendo: Regression Analysis, Clustering and Filtering, y otros. Y por eso los algoritmos de Neural Network (NN) se utilizan en aplicaciones de Deep Learning (Aprendizaje Profundo), como en el caso de un Large Language Model (LLM).

Otra forma de clasificar los algoritmos anteriores es considerando que hay dos clases, según el paradigma de aprendizaje que se aplique:

1) Supervised Learning (Aprendizaje Supervisado);
2) Unsupervised Learning (Aprendizaje No Supervisado).

En este contexto Supervised (Supervisado) significa que el DataSet debe incluir "labels" (etiquetas) para que, durante el entrenamiento, el algoritmo pueda saber cuál es la respuesta correcta, o esperada, para cada conjunto de datos. De esta forma, los algoritmos de Classification y Numerical Prediction (Regression) son de tipo "Supervised", mientras que los de Clustering y Filtering pueden ser "Unsupervised".

Por cierto, el trabajo de añadir los "labels" a un dataset es un trabajo que puede requerir mucho tiempo, el cual es realizado por los "labelers" o "data annotators" (anotadores de datos), que son "domain experts", es decir, personas con expertisia en el area de conocimiento donde la AI está siendo entrenada; prácticamente una nueva profesión creada por esta naciente industria.

Algo interesante sobre estos algoritmos en general es que dependen de un conjunto de parámetros, ya sean internos (propios del algoritmo) o configuraciones externas (hyperparameters, en inglés), que deben ser optimizados para poder lograr que el modelo funcione como se espera; y por eso siempre se necesita un proceso de 'entrenamiento' con 'retroalimentación', según sea el 'Large Data Set' específico donde se aplica el algoritmo. Es decir, que durante su entrenamiento, el propio modelo va ajustando los parámetros de los algoritmos para así aprender de sus propios resultados y mejorar su rendimiento futuro.

Otra cuestión a tener en cuenta es que el proceso de aprendizaje automático es intensivo en energía y extremadamente costoso; por lo cual se necesitan "data centers" especializados, es decir, instalaciones especializadas diseñadas para manejar la inmensa potencia de computación necesaria para cargas de trabajo de inteligencia artificial como el aprendizaje automático y el aprendizaje profundo (Hyperscalers, en inglés). Por esa razón, el método que la industria de IA utiliza para desarrollar los LLM y maximizar las ganancias, es el de entrenar los modelos en conjuntos de datos más pequeños antes de escalarlos a escenarios del mundo real con volúmenes de datos mucho más grandes. Además, por razones de seguridad, muchas veces se utilizan "datos sintéticos" para entrenar los modelos.

Todo esto implica que la IA tiene que ser capaces de procesar grandes volúmenes de datos en paralelo; lo cual require un gigantesco poder de cómputo, gracias a los "data centers" con redes de computadoras que tienen cientos o miles de poderosos procesadores (GPU con cientos de "cores") producidos por NVIDIA, etc.

De hecho, los constructores de estos nuevos data centers ("Hyperscalers") ya están solicitando permisos (y recibiendo aprobaciones) para la fabricación de sus propias redes eléctricas con pequeños reactores nucleares modulares ("Small Modular Nuclear Reactors" o SMR) que puedan proveer la energía necesaria, del orden de los gigawatt, que se requiere para la infraestructura de esos nuevos data centers. La otra idea que se está explorando es hacer que la infraestructura de la IA sea "geográficamente flexible", es decir, colocar pequeños centros de datos junto a subestaciones eléctricas y mover la carga de computación entre ellos según la capacidad disponible.


Artificial Neural Network (ANN): Red Neruronal Artificial

La decisión sobre cuál es el mejor algoritmo para una tarea específica depende de varios factores que van desde el tamaño de Data Set, hasta el esfuerzo necesario para su entrenamiento, pasando por la posibilidad de tener (o no) una convergencia garantizada de los valores de los parámetros hacia un óptimo global, etc. Por ejemplo, los algoritmos SVM se destacan por lograr márgenes óptimos con un menor número de puntos de datos (y con menos entrenamiento); comparado con las ANN o NN (Neural Network) -- el hecho que la NN es 'artificial' se sobreentiende. Sin embargo, las NN generalmente superan a las SVM en conjuntos de datos grandes, complejos y no estructurados.

Artificial Neural Network (ANN)

En la imagen anterior, cada nodo circular azul/verde en las 'capas de procesamiento ocultas' (Hidden) y en la capa de salida (Output) representa una neurona artificial, y cada nodo circular rojo en la capa más a la izquierda (Input) representa un valor de datos de entrada. Una flecha representa una conexión desde la salida de una neurona (o nodo de datos) hasta la entrada de otra. Típicamente, en los LLM, las ANN tienen varias 'capas de procesamiento ocultas'. El número de capas de procesamiento ocultas determina cuán 'profundas' son estas redes; y de ahí el término "deep learning" (aprendizaje profundo).

Durante el entrenamiento de una Artificial Neural Network, para cada prueba que se realiza, se calcula un resultado de la 'predicción' de la ANN como una 'combinación lineal' (suma ponderada) del aporte de cada 'neurona' en función del valor de la entrada (que numéricamente se puede representar como una magnitud vectorial); como en el caso de predecir (reconocer) si una imagen es un "gato" o un "perro". Entonces, a las neuronas que más aportan cuando el resultado es correcto se les aumenta el "weight" ('peso') para las siguientes pruebas, mientras que a las que conducen a error se les quita 'peso'. Incluso, debido a que en la vida real las relaciones entre salidas y entradas no siempre son 'lineales' o 'proporcionales', se puede añadir un "bias" ('sesgo') que determina el valor umbral a partir del cual una neurona se dispara; que también podría ser un valor aleatorio o cero.

La analogía que se utiliza es la de un estudiante tomando un examen. La 'neurona' es como un estudiante, las 'entradas' son los materiales de estudio y la 'salida' es la calificación del examen. Entonces, el 'peso' sería cuánto tiempo dedica el estudiante a una materia específica (importancia); mientras que el 'sesgo' sería la inteligencia inherente del estudiante o la simplicidad del examen, que desplaza la calificación final independientemente del tiempo de estudio.

Matemáticamente, si "f" es la función de la neurona que depende del valor de la entrada, entonces la salida será (w*f + b), donde "w" es el "weight" y "b" es el "bias"; y ese valor de salida es el que se pasa como entrada para el siguiente grupo de neuronas en la red (que están conectadas a las 'dendritas' de la neurona inicial) hasta que se llega a un resultado final.

Neurona Artificial en Código Python


LLM: Los Mecanismos de Attention y Transformers

Además hay que mencionar que, en el caso de los LLM y la arquitectura de "Transformers", existe un mecanisno llamado "Attention" (Atención) que permite a las redes neuronales asignar dinámicamente diferentes niveles de importancia ("weights") a distintas partes de los datos de entrada (ya sean palabras en una oración o píxeles en una imagen). Y en lugar de tratar toda la entrada por igual, este mecanismo de "Attention" imita el enfoque cognitivo humano al permitir que el modelo se concentre en la información más relevante para una tarea determinada, mejorando la comprensión del contexto, el rendimiento y la eficiencia.

La siguiente imagen muestra algunos elementos importantes de la arquitectura del software de los LLM, incuyendo el proceso de "tokenization" de las palabras y las frases de entrada (a veces los tokens incluso pueden ser partes de una palabra), la creación de los "embeddings" vectoriales, los mecanismos de "attention", los bloques de "transformers", la búsqueda de relaciones de "contexto", hasta la "generación" de los tokens y los "text chunks" de salida.

Arquitectura de los LLM

Mientras que la imagen a continuación muestra gráficamente cómo funcionan los mecanismos de Attention (Self-Attention, en esta caso) aplicadas a un prompt:

Mecanismo de Attention



Además, los Transformers son capaces de hacer procesamiento en paralelo de las palabras y frases en un prompt para reducir el tiempo de 'pensamiento' de la IA a un nivel de 'tiempo real', a diferencia de las viejas Recurrent Neural Networks (RNN) que solo hacían procesamiento en serie, palabra por palabra, como se muestra aquí:

Transformer versus RNN


Entonces, según los investigadores, el éxito de los LLM se debe a que las redes neuronales que implementan los Transformers primero tratan las oraciones como acertijos que tratan de resolver por el orden de las palabras, pero una vez que leen lo suficiente y aprenden a prestarle más Attention a ciertos Tokens en un prompt, hay un punto de inflexión que los hace sumergirse en el "significado" de las palabras, como una abrupta "transición de fase" que recuerda al agua que se convierte en vapor. Al revelar este interruptor oculto, los investigadores abren una ventana a cómo los modelos de Transformadores como ChatGPT se vuelven más inteligentes.


Vector DB: Base de Datos Vectorial

También existe una tecnología relacionada muy importante llamada "vector database" o "Vector DB" (base de datos vectorial) que la IA utiliza para almacenar y buscar puntos de datos. Una base de datos vectorial (Vector DB) es un sistema diseñado para almacenar, gestionar y buscar "high-dimensional vector embeddings" (incrustaciones vectoriales de alta dimensión), o "numerical representations of unstructured data" (representaciones numéricas de datos no estructurados) como también le llaman. En el marco de los lenguajes y los LLM, los "embeddings de palabras" son representaciones numéricas que vinculan cada palabra del vocabulario con un punto específico en un espacio semántico de alta dimensión. En este espacio, las palabras que tienen significados similares se representan como puntos cercanos. Lo cual, por ejemplo, sirve para encontrar el "contexto" de las palabras en un LLM, o de los pixels en una imagen, etc.

A diferencia de las bases de datos tradicionales que funcionan con datos estructurados y búsquedas exactas, la Vector DB puede realizar búsquedas por similitud (por ejemplo, buscar el vecino más cercano de un punto de dato) para encontrar datos conceptualmente relacionados, en lugar de coincidencias exactas de una palabra clave. Las bases de datos vectoriales son esenciales para la "Retrieval-Augmented Generation (RAG)" (Generación Aumentada por Recuperación) en IA, ofreciendo recuperación de información semántica con baja latencia y en forma escalable.

He aquí un ejemplo en lenguaje SQL para hacer un Search en una Vector DB utilizando la función VECTOR_DISTANCE que implementa el algoritmo KNN (K-Nearest Neighbor) para encontrar el vecino más cercano de un ":query_vector" dado como parámetro; dentro de un "embedding". Nótese que el tercer parámetro de la función es COSINE; lo cual se refiere al "Cosine Similarity" que mide qué tan cercanos están dos vectores calculando el coseno del ángulo entre ellos:

SELECT doc_id, product_name, text_chunk,
VECTOR_DISTANCE (embedding, :query_vector, COSINE) AS distance
FROM product_documentation
ORDER BY distance
FETCH APPROXIMATE FIRST 5 ROWS ONLY;


No hay comentarios.:

Publicar un comentario