FTH 1 · Enseñar a caminar|INEMA.CLUB-PRO

Clase 6 · 16 min

Leer el entrenamiento: curvas, colapso y recompensa hackeada (reward hacking)

Una curva de recompensa que sube no significa que el robot aprendió a caminar. En esta clase lees el log de tu entrenamiento y el de dos entrenamientos reales de 150 iteraciones, grabados para el curso: en uno la recompensa sube porque el robot aprendió a caer más temprano. El otro muestra el arreglo y el límite del arreglo.

Comenzar la clase
Monitor en un banco oscuro con un gráfico de línea que sube, desenfocado, y un robot humanoide de pie sujeto a un pórtico al fondo.

En esta clase vas a

  1. 1Recompensa, duración del episodio y velocidad: los tres números leídos juntos
  2. 2Recompensa hackeada: subió de −4,31 a −1,12 mientras el episodio bajaba de 55 a 15 pasos
  3. 3El arreglo con is_alive y su límite: 0,16 m/s
  4. 4El ciclo entrenar → leer → ajustar → entrenar de nuevo

Objetivo: leer el log de un entrenamiento y reconocer colapso y recompensa hackeada (reward hacking).

01Las señales que busca curvas.py

Haz clic en cada bloque. Cada alerta compara el primer y el último cuarto del entrenamiento.

Haz clic en cada bloque del diagrama para ver qué hace.

Caminar de rodillas, temblar y quedarse parado son los atajos clásicos. Todos aparecen leyendo esos cuatro números juntos, nunca la recompensa sola.

02Las curvas de tu entrenamiento

El progresso.csv de la clase 5.

Terminal · leer tu entrenamiento
F=${FTH:-$HOME/fth}; cd $F/locomocao && . $F/.venv/bin/activate
python3 kit/curvas.py $F/treino/ppo; echo "saída: $?"
Ejemplo del repositorio
treino: ppo · 20 iterações (médias do primeiro e do último quarto)
recompensa inicial: -3.64 · final: -4.75
episódio médio: 46 → 58 passos (de 1000)
velocidade para a frente no fim: 0.14 m/s · termo que mais pagou no fim: pose (1.00)
alertas: 0
saída: 0

En 20 iteraciones la recompensa todavía oscila y el término que más paga es pose: la policy apenas salió de la pose por defecto. No hay alertas, pero tampoco hay aprendizaje que leer. Por eso el kit trae dos entrenamientos más grandes. Atención: curvas.py sale con 0 aunque haya alerta; lee la línea alertas:, no el código de salida.

03Dos entrenamientos reales de 150 iteraciones

Generados con el mismo kit/treinar.py, 32 entornos, semilla 0. cai-cedo usa kit/recompensa.yaml (8 min); com-vivo agrega el término is_alive con peso 5 (10 min). Solo el progresso.csv está en el repositorio.

Fragmento · kit/recompensa-viva.yaml
is_alive: {weight: 5.0}                            # 5 × 0,02 s = +0,1 por passo de pé: ficar vivo passa a valer mais que a punição
Terminal · los dos ejemplos
F=${FTH:-$HOME/fth}; cd $F/locomocao && . $F/.venv/bin/activate
for x in cai-cedo com-vivo; do python3 kit/curvas.py kit/exemplos/$x; echo; done
Ejemplo del repositorio
treino: cai-cedo · 150 iterações (médias do primeiro e do último quarto)
recompensa inicial: -4.31 · final: -1.12
episódio médio: 55 → 15 passos (de 1000)
velocidade para a frente no fim: 0.15 m/s · termo que mais pagou no fim: upright (0.23)
ALERTA: recompensa hackeada: a recompensa subiu porque o episódio encurtou; cada passo de pé custa mais do que paga, e cair cedo virou a melhor estratégia
alertas: 1

treino: com-vivo · 150 iterações (médias do primeiro e do último quarto)
recompensa inicial: 1.36 · final: 2.32
episódio médio: 57 → 63 passos (de 1000)
velocidade para a frente no fim: 0.16 m/s · termo que mais pagou no fim: is_alive (6.27)
alertas: 0

cai-cedo: la recompensa subió de −4,31 a −1,12 mientras el episodio cayó de 55 a 15 pasos. Como cada paso de pie daba saldo negativo (la penalización por acción brusca pesaba más que los premios), caer temprano se volvió la mejor estrategia.

com-vivo: con is_alive peso 5 (+0,1 por paso de pie, 5 por segundo), el episodio pasa a crecer (57 → 63) y ninguna alerta se dispara. Pero el término que más paga es is_alive y la velocidad es 0,16 m/s: el entrenamiento aprendió a no caer, aún no a caminar.

04El ciclo de ajuste

Ejecuta, mira cómo la lectura de las curvas frena el entrenamiento y ejecuta de nuevo. Ese es el ciclo de esta clase.

por hacer

en curso

hecho

alerta

Simulación ilustrativa en el navegador. La alerta en la lectura de las curvas es intencional: es el caso cai-cedo.

05Práctica

Lee antes de creer.

E1 · Tu entrenamiento

3 min

Ejecuta curvas.py en el entrenamiento de la clase 5 y anota el término que más pagó al final.

Listo cuando: python3 kit/curvas.py $F/treino/ppo; echo "saída: $?" → treino: ppo · 20 iterações y saída: 0.

E2 · El atajo

5 min

Ejecuta los dos ejemplos y escribe, en una frase, por qué subió la recompensa del cai-cedo.

Listo cuando: la salida del cai-cedo muestra ALERTA: recompensa hackeada y alertas: 1; tu frase cita el episodio acortándose (55 → 15 pasos).

E3 · El próximo ajuste

10 min

El con-vivo no se cae, pero camina a 0,16 m/s. Propón un ajuste de un término (cuál, peso anterior, peso nuevo) y di qué señal esperarías ver en las curvas si funciona.

Listo cuando: escribiste un término de kit/recompensa.yaml con los dos pesos y una señal medible (p. ej.: velocidad al final por encima de 0,3 m/s sin que el episodio se acorte).

06Prueba de la clase

La explicación aparece después de tu respuesta.

Pregunta 1 de 4

En el cai-cedo, la recompensa subió y el episodio cayó de 55 a 15 pasos. ¿Qué aprendió la policy?competencia

07En tres frases

LecturaRecompensa, duración del episodio, velocidad y término dominante, siempre juntos.
AtajoEn cai-cedo, la recompensa subió porque el robot aprendió a caerse más temprano.
CicloEntrenar, leer, ajustar un término y entrenar de nuevo; sin alerta todavía no es caminar.

Para ir más allá

Clase anteriorPróxima clase