LoRA se usa ampliamente para ajustar modelos grandes porque es eficiente, pero asume silenciosamente que todas las actualizaciones de un modelo son similares. En realidad, no lo son. Cuando ajustas el estilo (como el tono, el formato o la personalidad), los cambios son simples y se concentran en solo unas pocas dimensiones, lo que LoRA maneja bien con actualizaciones de bajo rango. Pero cuando se intenta enseñar al modelo nuevos conocimientos fácticos (como datos médicos o estadísticas), la información se distribuye en muchas dimensiones. Una configuración de rango bajo (como el rango 8) no puede capturarlo todo, por lo que el modelo puede parecer correcto pero dar respuestas incorrectas o incompletas.
Intentar solucionar esto aumentando el rango introduce otro problema: la inestabilidad. A medida que aumenta el rango, la escala utilizada en LoRA estándar hace que la señal de aprendizaje se debilite, lo que hace que el entrenamiento sea ineficaz. RS-LoRA resuelve esto ajustando ligeramente la fórmula de escala (cambiando de dividir por r a dividir por √r), lo que estabiliza el aprendizaje incluso en rangos superiores. Este pequeño cambio permite que el modelo retenga mejor información compleja y de alta dimensión sin interrumpir el entrenamiento.
En el siguiente tutorial de código, demostramos este fallo desde los primeros principios utilizando NumPy: sin bucles de entrenamiento ni marcos. Simulamos dos tipos de actualizaciones de peso, medimos exactamente cuánta información sobrevive en cada rango y exponemos la falla secundaria: que aumentar ingenuamente el rango para compensar desencadena un colapso de escala que mata por completo la señal de aprendizaje. Luego mostramos la solución (la escala de rango estabilizado de RS-LoRA) y por qué un solo cambio de carácter en el denominador (r → √r) es lo que hace que la adaptación de alto rango sea estable.
En esta configuración, estamos simulando cómo el ajuste fino afecta la matriz de peso de un modelo mediante la creación de un entorno simplificado. Asumimos una matriz de peso previamente entrenada de tamaño 64 × 64 e introducimos dos tipos de actualizaciones: cambios de “estilo” de bajo rango (como tono o formato) y cambios de “hechos” de alto rango (como estadísticas detalladas de cricket). Luego definimos dos configuraciones de LoRA: un rango pequeño (r=4), que representa el uso típico de LoRA, y un rango más grande (r=32), que es más adecuado para capturar información compleja como en RS-LoRA. Esto nos permite comparar qué tan bien los diferentes rangos pueden recuperar estas actualizaciones simuladas y resaltar dónde tiene problemas LoRA estándar.
Aquí, simulamos los dos tipos fundamentalmente diferentes de actualizaciones de ajuste. La actualización de estilo se construye intencionalmente como de rango bajo: solo unos pocos valores singulares son grandes y el resto disminuye rápidamente, lo que significa que la mayor parte de la información importante se concentra en solo un puñado de dimensiones. Esto refleja el comportamiento del mundo real, donde los cambios de tono o formato no requieren una modificación generalizada del modelo.
Por el contrario, la actualización de hechos es de alto rango: los valores singulares decaen lentamente, lo que indica que muchas dimensiones aportan información significativa. Esto refleja cómo se distribuye el conocimiento fáctico (como estadísticas o datos de dominio) en todo el modelo. Los valores singulares impresos dejan esto claro: las actualizaciones de estilo muestran una fuerte caída después de los primeros valores, mientras que las actualizaciones de hechos permanecen consistentemente grandes en muchas dimensiones, lo que demuestra que no se pueden comprimir fácilmente en una aproximación de bajo rango.
Esta parte compara qué tan bien LoRA y RS-LoRA estándar pueden reconstruir las actualizaciones originales utilizando diferentes rangos. Ambos métodos utilizan primero SVD para obtener la mejor aproximación de rango r posible (es decir, comprimir la actualización en r dimensiones), pero difieren en cómo escalan el resultado: LoRA estándar divide por r, mientras que RS-LoRA divide por √r. La tabla muestra el error de reconstrucción: menor significa mejor.
La conclusión clave es clara: para las actualizaciones de estilo, incluso los rangos pequeños (como 4 u 8) funcionan bien porque la información es naturalmente de rango bajo, por lo que el error disminuye rápidamente. Pero en el caso de las actualizaciones de hechos, el error se mantiene alto en los rangos bajos, lo que demuestra que se está perdiendo información importante. Aumentar el rango ayuda, pero LoRA estándar se vuelve inestable debido al sobreescalamiento (el error no mejora constantemente). RS-LoRA, con su escala √r, maneja rangos más altos con mayor elegancia y reduce el error de manera más constante, lo que lo hace más adecuado para capturar conocimiento complejo y de alta dimensión.
A = Vt[:r, :]
escala = alfa / np.sqrt(r) # <-- el cambio de clave delta_approx = escala * (B @ A) error = np.linalg.norm(delta - delta_approx, 'fro') / np.linalg.norm(delta, 'fro') devuelve delta_approx, rangos de error = [2, 4, 8, 16, 32, 48] estilo_errores_estándar, hechos_errores_estándar = [], [] style_errors_rslora, hechos_errores_rslora = [], [] para r en rangos: _, e = lora_approx_standard(delta_style, r); style_errors_standard.append(e) _, e = lora_approx_standard(delta_facts, r); fact_errors_standard.append(e) _, e = lora_approx_rslora(delta_style, r); style_errors_rslora.append(e) _, e = lora_approx_rslora(delta_facts, r); hechos_errors_rslora.append(e) print("Rango | Err de estilo (estándar) | Err de hechos (estándar) | Err de hechos (RS-LoRA)") print("-" * 60) para i, r en enumerar(rangos): print(f" {r:2d} | {style_errors_standard[i]:.3f} | {facts_errors_standard[i]:.3f} | {facts_errors_rslora[i]:.3f}")
Esta sección explica por qué LoRA estándar tiene dificultades en los rangos superiores. A medida que aumenta el rango r, LoRA estándar escala la actualización en α / r, que se reduce rápidamente; puede verlo caer de 16 (en r=1) a solo 0,25 (en r=64). Esto significa que aunque esté agregando más dimensiones (intentando capturar más información), la actualización general se vuelve cada vez más débil, suprimiendo efectivamente la señal de aprendizaje. Luego, el optimizador tiene que compensar empujando los pesos con más fuerza, lo que a menudo conduce a inestabilidad o mala convergencia.
RS-LoRA soluciona este problema cambiando la escala a α/√r. En lugar de reducirse demasiado agresivamente, la escala disminuye más gradualmente, manteniéndose lo suficientemente fuerte incluso en los rangos más altos (por ejemplo, todavía 2,0 en r=64). Esto mantiene significativa la magnitud de la actualización efectiva, lo que permite que el modelo realmente se beneficie de representaciones de rango superior sin eliminar la señal. En términos simples: LoRA estándar agrega capacidad pero elimina su impacto, mientras que RS-LoRA preserva ambos.
Esta sección muestra la diferencia principal en cómo se distribuye la información entre actualizaciones de estilo y de hechos. En cuanto al estilo, la mayor parte de la señal importante se concentra en unas pocas dimensiones; puede ver que con el rango 4, más del 99 % de la información ya está capturada. Es por eso que los métodos de bajo rango como LoRA funcionan tan bien para cambios de tono, formato o personalidad. Hay un claro “codo” en los valores singulares: después de unos pocos componentes, el resto no importa mucho.
En realidad, es todo lo contrario. La información se distribuye en muchas dimensiones: incluso en el rango 8, solo se captura alrededor del 28 % de la señal total, lo que significa que aún falta la mayor parte del conocimiento. Éste es el problema de la “cola larga”: cada dimensión adicional aporta algo importante. Cuando LoRA se trunca a un rango bajo, corta esta cola, lo que genera un conocimiento incompleto o incorrecto. Es por eso que el modelo puede parecer confiado pero aun así se equivoca en los detalles fácticos.
Consulte los códigos completos aquí. Encuentre cientos de cuadernos de Colab de ciencia de datos y aprendizaje automático aquí. Además, no dude en seguirnos en Twitter y no olvide unirse a nuestro SubReddit de más de 130.000 ML y suscribirse a nuestro boletín. ¡Esperar! estas en telegrama? Ahora también puedes unirte a nosotros en Telegram.
¿Necesita asociarse con nosotros para promocionar su repositorio de GitHub O su página principal de Hugging O su lanzamiento de producto O seminario web, etc.? Conéctate con nosotros

Soy graduado en ingeniería civil (2022) de Jamia Millia Islamia, Nueva Delhi, y tengo un gran interés en la ciencia de datos, especialmente las redes neuronales y su aplicación en diversas áreas.