Por qué Existen los Pisos
Una Mala Racha de Recompensas Puede Privar de Prioridad a una Fuente
El bandit de ANDREA selecciona brazos de enfoque por rango UCB1. El rango UCB depende de mean_reward(k), que depende de las mejoras de pérdida observadas. Una racha de documentos de alta pérdida de una fuente de prioridad (digamos dictionary) puede arrastrar mean_reward(k) hacia abajo. Ahora dictionary tiene bajo rango, recibe pocas selecciones de enfoque, y su mean_reward(k) no puede recuperarse (sin selecciones = sin observaciones frescas).
El mismo riesgo aplica a cualquier fuente que el diseñador de entrenamiento de ANDREA quiera en la mezcla independientemente de la señal de recompensa a corto plazo.
Pisos como Pesos Mínimos
La configuración de entrenamiento de ANDREA especifica un piso por fuente: un peso de muestreo mínimo que la fuente recibe sin importar lo que diga la salida de UCB. Los pisos van de 0.0 a 1.0. Ejemplos:
hermes3-general piso = 0.8 (fuente conversacional prioritaria)
chat piso = 0.8
dictionary piso = 0.7 (andamio para recuerdo factual)
gutenberg piso = 0.7 (coherencia en prosa)
chat sintético piso = 0.0 (sin piso; el bandido decide libremente)
Cómo se Aplican los Pisos
Después de que UCB1 clasifica los brazos y el control de dados ensambla conjuntos de enfoque, cada fuente obtiene un peso tentativo. Luego se ejecuta la aplicación del piso:
peso_final_k = max(peso_tentativo_k, piso_k)
Si el bandido asignó un peso de 0.3 a hermes3-general pero su piso es 0.8, gana el piso: peso final = 0.8. La voz del bandido solo se sobrescribe hacia arriba; nunca se sobrescribe hacia abajo.
Diferentes Configs, Diferentes Floors
ANDREA envía varias configuraciones de entrenamiento: chatbot, tool-caller, bash-commander. Cada config establece diferentes floors para sus fuentes de prioridad. Chatbot floors hermes3-general & chat alto. Tool-caller floors repo-docstrings más alto. Bash-commander floors repo-commits más alto. Mismo algoritmo, diferentes prioridades.
Aplicar un Floor
El Riesgo de Memorización
Fuentes Pequeñas Se Memorizan
Las fuentes de datos de ANDREA varían enormemente en tamaño. synthetic-chat tiene aproximadamente 1,400 documentos. gutenberg tiene más de 500,000. Si el bandido tira de manera uniforme, synthetic-chat agota su grupo de documentos rápidamente: después de 1,400 tirones, cada documento ha sido visto al menos una vez. Tira 2,800 veces y cada documento ha sido visto al menos dos veces en promedio.
La exposición repetida a un conjunto pequeño de documentos lleva a la memorización: el modelo deja de aprender patrones generalizables y comienza a recitar secuencias específicas de tokens del datos de entrenamiento. La memorización es mala por dos razones: (1) desperdicia capacidad en recuerdo mecánico en lugar de generalización, y (2) puede filtrar datos de entrenamiento a través de la generación.
Las Épocas Como un Proxy de Memorización
Define una época sobre la fuente k como un pase completo a través de todos los documentos de k:
epochs_k = floor(lifetime_pulls_k / n_docs_k)
Si synthetic-chat (n_docs=1400) ha sido extraído 2,800 veces, epochs = floor(2800/1400) = 2: la fuente ha sido vista dos veces completas. Si gutenberg (n_docs=500,000) ha sido extraído 100,000 veces, epochs = floor(100000/500000) = 0: aún no un pase completo.
La Penalización 1/(1+epochs)
Cuando lifetime_pulls / n_docs > 1.0, ANDREA aplica una penalización multiplicativa:
penalty = 1 / (1 + epochs)
final_weight = bandit_weight * penalty
Curva:
| épocas | penalización | reducción de peso |
|---|---|---|
| 0 | 1.000 | ninguna |
| 1 | 0.500 | la mitad |
| 2 | 0.333 | un tercio |
| 3 | 0.250 | un cuarto |
| 5 | 0.167 | un sexto |
| 10 | 0.091 | un undécimo |
La penalización crece con cada pasada completada. Después de muchas épocas, el peso de la fuente se acerca a cero y el bandido la descansa naturalmente.
Por qué las Tiradas de Por Vida Persisten a Través de Reinicios
Las ejecuciones de entrenamiento de ANDREA abarcan días. Ocurren fallos. Los servidores se reinician. Las configuraciones se ajustan y el entrenamiento se reanuda desde un punto de control. Las tiradas de por vida persisten a través de todos estos eventos: el proxy escribe los conteos de tiradas al disco continuamente.
Si las tiradas se reiniciaran en cada reinicio, una fuente pequeña podría efectivamente reiniciarse a época 0 cada vez que el entrenamiento se reinicia. La penalización nunca se acumularía, y la memorización procedería independientemente. Hacer persistentes las tiradas de por vida convierte la penalización en una restricción real y de crecimiento monotónico.
Calcula una Penalización de Época
Cerrando el Stack del Currículo Bandit
Lo Que Tienes
Los floors garantizan muestreo mínimo para fuentes prioritarias: final_weight = max(bandit_weight, floor_k). Las penalizaciones de época limitan la memorización en fuentes pequeñas: cuando lifetime_pulls/n_docs > 1, el peso se multiplica por 1/(1+epochs). Los pulls de por vida persisten a través de reinicios, por lo que la penalización se convierte en una restricción monotónica, no en un contador reseteable.
El Pipeline Completo
Poniendo juntas las cuatro actividades del bandido ANDREA (76-79):
1. Actividad 76 (UCB1). Cada paso calcula UCB(k) = mean_reward(k) + 0.5 * sqrt(ln(N)/n_k). Argmax elige un brazo.
2. Actividad 77 (fases de dados). Límites de fases (cada 7 a 42 pasos) lanzan dados para el conteo de brazos de enfoque. Brazos aleatorios primero, UCB llena el resto. 25-33% de las fases corren completamente al azar.
3. Actividad 78 (atribución de recompensas). CUDA reporta pérdida; EMA por fuente rastrea historial; recompensa = max(0, EMA - pérdida) * 1000. Recompensa escalada alimenta mean_reward(k).
4. Actividad 79 (pisos & épocas, esta lección). Después de la salida de UCB, los pisos elevan fuentes de prioridad; penalizaciones de época reducen el peso de fuentes memorizadas. Tirones de por vida persisten.
En conjunto: un bandido que se adapta (UCB1), explora de manera confiable (fases de dados), obtiene señales de recompensa honestas (escalado 1000x), respeta las prioridades del diseño de entrenamiento (pisos), y evita la memorización (penalización por época).
Referencia
Whitepaper de ANDREA, secciones 3.5 y 3.6.