Con la aparición de ChatGPT, el mundo reconoció el potencial potencial de los modelos de idiomas grandes, que pueden comprender el lenguaje natural y responder a las solicitudes de los usuarios con alta precisión. En la abreviatura de LLMla primera carta L representa Grandereflejando el número masivo de parámetros que típicamente tienen estos modelos.
Los LLM modernos a menudo contienen más de mil millones de parámetros. Ahora, imagine una situación en la que queremos adaptar un LLM a una tarea aguas abajo. Un enfoque común consiste en sintonia FINAque implica ajustar los pesos existentes del modelo en un nuevo conjunto de datos. Sin embargo, este proceso es extremadamente lento y intensivo en recursos, especialmente cuando se ejecuta en una máquina local con hardware limitado.
Durante el ajuste, algunas capas de redes neuronales se pueden congelar para reducir la complejidad del entrenamiento, este enfoque aún se queda corto a escala debido a los altos costos computacionales.
Para abordar este desafío, en este artículo exploraremos los principios centrales de Lora (Adaptación de bajo rango)una técnica popular para reducir la carga computacional durante el ajuste fino de modelos grandes. Como beneficio adicional, también echaremos un vistazo a Qlora, que se basa en Lora al incorporar la cuantización para mejorar aún más la eficiencia.
Representación de la red neuronal
Tomemos una red neuronal totalmente conectada. Cada una de sus capas consiste en norte neuronas completamente conectadas a metro neuronas de la siguiente capa. En total, hay norte ⋅ metro conexiones que pueden representarse como una matriz con las dimensiones respectivas.
Cuando se pasa una nueva entrada a una capa, todo lo que tenemos que hacer es realizar la multiplicación de la matriz entre la matriz de peso y el vector de entrada. En la práctica, esta operación está altamente optimizada utilizando bibliotecas de álgebra lineal avanzada y a menudo se realiza en lotes completos de entradas simultáneamente para acelerar el cálculo.
Truco de multiplicación
La matriz de peso en una red neuronal puede tener dimensiones extremadamente grandes. En lugar de almacenar y actualizar la matriz completa, podemos factorizarla en el producto de dos matrices más pequeñas. Específicamente, si una matriz de peso tiene dimensiones n × mpodemos aproximarlo usando dos matrices de tamaños n × k y K × Mdónde k es una dimensión intrínseca mucho más pequeña (k << n, m).
Por ejemplo, suponga que la matriz de peso original es 8192 × 8192que corresponde a aproximadamente 67m parámetros. Si elegimos k = 8la versión factorizada consistirá en dos matrices: una de tamaño 8192 × 8 y el otro 8 × 8192. Juntos, contienen solo sobre 131k Parámetros: más de 500 veces menos que el original, reduciendo drásticamente la memoria y los requisitos de cálculo.
La desventaja obvia del uso de matrices más pequeñas para aproximar una más grande es la pérdida potencial en precisión. Cuando multiplicamos las matrices más pequeñas para reconstruir el original, los valores resultantes no coincidirán exactamente con los elementos de matriz originales. Esta compensación es el precio que pagamos por reducir significativamente la memoria y las demandas computacionales.
Sin embargo, incluso con un valor pequeño como K = 8, a menudo es posible aproximar la matriz original con una pérdida mínima de precisión. De hecho, en la práctica, incluso los valores tan bajos como K = 2 o K = 4 a veces se pueden usar de manera efectiva.
Lora
La idea descrita en la sección anterior ilustra perfectamente el concepto central de Lora. Lora representa Adaptación de bajo rangodonde el término rango bajo se refiere a la técnica de aproximando una matriz de peso grande al factorizarla en el producto de dos matrices más pequeñas con un rango mucho más bajo k. Este enfoque reduce significativamente el número de parámetros entrenables al tiempo que preserva la mayor parte del poder del modelo.
Capacitación
Supongamos que tenemos un vector de entrada incógnita pasado a una capa totalmente conectada en una red neuronal, que antes del ajuste fino, está representada por una matriz de peso W. Para calcular el vector de salida Ysimplemente multiplicamos la matriz por la entrada: y = wx.
Durante el ajuste fino, el objetivo es ajustar el modelo para una tarea aguas abajo modificando los pesos. Esto se puede expresar como aprendizaje de una matriz adicional ΔWtal que: y = (w + ΔW) x = wx + ΔWX. Como vimos el truco de multiplicación anterior, ahora podemos reemplazar ΔW por multiplicación licenciado en Letrasasí que finalmente tenemos: y = wx + bax. Como resultado, congelamos la matriz Wy resolver el Mejoramiento Tarea para encontrar matrices A y B que contienen totalmente mucho menos parámetros que ΔW!
Sin embargo, el cálculo directo de la multiplicación (Ba) x Durante cada pase hacia adelante, es muy lento debido al hecho de que la multiplicación matriz licenciado en Letras es una operación pesada. Para evitar esto, podemos aprovechar la propiedad asociativa de la multiplicación de matriz y reescribir la operación como B (hacha). La multiplicación de A por incógnita resulta en un vector que se multiplicará por B que también produce un vector. Esta secuencia de operaciones es mucho más rápida.
En términos de backpropagation, Lora también ofrece varios beneficios. A pesar de que un gradiente para una sola neurona todavía toma casi la misma cantidad de operaciones, ahora tratamos con muchos menos parámetros en nuestra red, lo que significa:
- Necesitamos calcular muchos menos gradientes para A y B que originalmente se hubiera requerido para W.
- Ya no necesitamos almacenar una matriz gigante de gradientes para W.
Finalmente, para calcular Ysolo necesitamos agregar el ya calculado WX y Bax. Aquí no hay dificultades ya que la adición de matriz puede ser fácilmente paralelizada.
Como detalle técnico, antes de ajustar, matriz A se inicializa utilizando una distribución gaussiana y matriz B se inicializa con ceros. Usando una matriz cero para B al principio asegura que el modelo se comporte exactamente como antes, porque Bax = 0 · ax = 0entonces Y permanece equivalente a WX.
Esto hace que la fase inicial de ajuste fino sea más estable. Luego, durante la propagación de retroceso, el modelo adapta gradualmente sus pesos para A y B para aprender nuevos conocimientos.
Después de entrenar
Después del entrenamiento, hemos calculado las matrices óptimas A y B. Todo lo que tenemos que hacer es multiplicarlos para calcular ΔWque luego agregamos a la matriz previa W Para obtener los pesos finales.
Mientras que la multiplicación matriz licenciado en Letras Puede parecer una operación pesada, solo la realizamos una vez, ¡así que no debería preocuparnos demasiado! Además, después de la adición, ya no necesitamos almacenar A, Bo ΔW.
Sutileza
Si bien la idea de Lora parece inspiradora, puede surgir una pregunta: durante el entrenamiento normal de las redes neuronales, ¿por qué no podemos representar directamente como como? Bax en lugar de usar una matriz pesada W para calcular y = wx?
El problema con solo usar Bax es que la capacidad del modelo sería mucho más baja y probablemente insuficiente para que el modelo aprenda de manera efectiva. Durante el entrenamiento, un modelo necesita aprender cantidades masivas de información, por lo que naturalmente requiere una gran cantidad de parámetros.
En la optimización de Lora, tratamos WX como el conocimiento previo del modelo grande e interpretar ΔWx = Bax Como conocimiento específico de la tarea introducido durante el ajuste fino. Entonces, todavía no podemos negar la importancia de W en el rendimiento general del modelo.
Adaptador
Estudiando la teoría de LLM, es importante mencionar el término “adaptador“Eso aparece en muchos documentos de LLM.
En el contexto de Lora, un adaptador es una combinación de matrices A y B que se utilizan para resolver una tarea particular aguas abajo para una matriz dada W.
Por ejemplo, supongamos que hemos entrenado una matriz W tal que el modelo puede comprender el lenguaje natural. Luego podemos realizar varias optimizaciones de Lora independientes para ajustar el modelo en diferentes tareas. Como resultado, obtenemos varios pares de matrices:
- (A₁, B₁)-Adaptador utilizado para realizar tareas de respuesta de pregunta.
- (A₂B₂)– Adaptador utilizado para problemas de resumen de texto.
- (A₃B₃)– Adaptador capacitado para el desarrollo de chatbot.
¡Dado eso, podemos almacenar una sola matriz y tener tantos adaptadores como queramos para diferentes tareas! Dado que las matrices A y B son pequeñas, son muy fáciles de almacenar.
Ajuste del adaptador en tiempo real
Lo mejor de los adaptadores es que podemos cambiarlos dinámicamente. Imagine un escenario en el que necesitamos desarrollar un sistema de chatbot que permita a los usuarios elegir cómo debe responder el bot en función de un personaje seleccionado, como Harry Potterun pájaro enojadoo Cristiano Ronaldo.
Sin embargo, las limitaciones del sistema pueden evitar que almacenemos o ajustemos tres modelos grandes separados debido a su gran tamaño. ¿Cuál es la solución?
¡Aquí es donde los adaptadores vienen al rescate! Todo lo que necesitamos es un solo modelo grande W y tres adaptadores separados, uno para cada personaje.
Mantenemos en la memoria solo matriz W y tres pares de matriz: (A₁, B₁), (A₂, B₂), (A₃, B₃). Cada vez que un usuario elige un nuevo carácter para el bot, solo tenemos que reemplazar dinámicamente la matriz del adaptador realizando la adición de la matriz entre Wy (Aᵢ, Bᵢ). ¡Como resultado, obtenemos un sistema que escala extremadamente bien si necesitamos agregar nuevos personajes en el futuro!
Qlora
Qlora es otro término popular cuya diferencia de Lora está solo en su primera letra, Qque significa “cuantificado“. El término “cuantificación“Se refiere al número reducido de bits que se utilizan para almacenar pesos de las neuronas.
Por ejemplo, podemos representar pesos de redes neuronales como carrozas que requieren 32 bits para cada peso individual. La idea de cuantización consiste en comprimir pesos de red neuronal a una precisión menor sin pérdida o impacto significativo en el rendimiento del modelo. Entonces, en lugar de usar 32 bits, podemos soltar varios bits para usar, por ejemplo, solo 16 bits.
Hablando de Qlora, la cuantización se usa para la matriz previa a la aparición W para reducir su tamaño de peso.
*Bonificación: ajuste de prefijo
Ajuste de prefijo es una alternativa interesante a Lora. La idea también consiste en usar adaptadores para diferentes tareas aguas abajo, pero esta vez los adaptadores están integrados dentro de la capa de atención del transformador.
Más específicamente, durante el entrenamiento, todas las capas modelo se congelan, excepto las que se agregan como prefijos a algunos de los incrustaciones calculadas dentro de las capas de atención. En comparación con Lora, el ajuste del prefijo no cambia la representación del modelo, y en general, tiene muchos menos parámetros entrenables. Como anteriormente, para tener en cuenta el adaptador de prefijo, necesitamos realizar la adición, pero esta vez con menos elementos.
A menos que se les tenga restricciones computacionales y de memoria muy limitadas, los adaptadores Lora todavía se prefieren en muchos casos, en comparación con el ajuste de prefijo.
Conclusión
En este artículo, hemos analizado los conceptos de LLM avanzados para comprender cómo los modelos grandes pueden ajustarse de manera eficiente sin sobrecarga computacional. La elegancia de Lora para comprimir la matriz de peso a través de la descomposición de la matriz no solo permite que los modelos entrenen más rápido, sino que también requieren menos espacio de memoria. Además, Lora sirve como un excelente ejemplo para demostrar la idea de adaptadores que se pueden usar y cambiar de manera flexible para tareas aguas abajo.
Además de eso, podemos agregar un proceso de cuantización para reducir aún más el espacio de memoria mediante la disminución del número de bits necesarios para representar cada neurona.
Finalmente, exploramos otra alternativa llamada “Tuning de prefijo”, que juega el mismo papel que los adaptadores pero sin cambiar la representación del modelo.
Recursos
Todas las imágenes son del autor a menos que se indique lo contrario.