FTH 1 · Ensinar a andar|INEMA.CLUB-PRO

Aula 6 · 16 min

Ler o treino: curvas, colapso e recompensa hackeada

Uma curva de recompensa subindo não quer dizer que o robô aprendeu a andar. Nesta aula você lê o log do seu treino e de dois treinos reais de 150 iterações, gravados para o curso: num deles a recompensa sobe porque o robô aprendeu a cair mais cedo. O outro mostra o conserto e o limite do conserto.

Começar a aula
Monitor numa bancada escura com um gráfico de linha subindo, desfocado, e um robô humanoide de pé preso a um pórtico ao fundo.

Nesta aula você vai

  1. 1Recompensa, duração do episódio e velocidade: os três números lidos juntos
  2. 2Recompensa hackeada: subiu de −4,31 para −1,12 com o episódio caindo de 55 para 15 passos
  3. 3O conserto com is_alive e o limite dele: 0,16 m/s
  4. 4O ciclo treinar → ler → ajustar → treinar de novo

Objetivo: ler o log de um treino e reconhecer colapso e recompensa hackeada.

01Os sinais que o curvas.py procura

Clique em cada bloco. Cada alerta compara o primeiro e o último quarto do treino.

Clique em cada bloco do diagrama para ver o que ele faz.

Andar de joelhos, tremer e ficar parado são os atalhos clássicos. Todos aparecem lendo esses quatro números juntos, nunca a recompensa sozinha.

02As curvas do seu treino

O progresso.csv da aula 5.

Terminal · ler o seu treino
F=${FTH:-$HOME/fth}; cd $F/locomocao && . $F/.venv/bin/activate
python3 kit/curvas.py $F/treino/ppo; echo "saída: $?"
Exemplo do repositório
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

Em 20 iterações a recompensa ainda oscila e o termo que mais paga é pose: a política mal saiu da pose padrão. Nenhum alerta, mas também nenhum aprendizado para ler. Por isso o kit traz dois treinos maiores. Atenção: o curvas.py sai 0 mesmo com alerta; leia a linha alertas:, não o código de saída.

03Dois treinos reais de 150 iterações

Gerados com o mesmo kit/treinar.py, 32 ambientes, semente 0. cai-cedo usa kit/recompensa.yaml (8 min); com-vivo acrescenta o termo is_alive com peso 5 (10 min). Só o progresso.csv está no repositório.

Trecho · 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 · os dois exemplos
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
Exemplo do repositório
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: a recompensa subiu de −4,31 para −1,12 enquanto o episódio caiu de 55 para 15 passos. Como cada passo de pé dava saldo negativo (a punição por ação brusca pesava mais que os prêmios), cair cedo virou a melhor estratégia.

com-vivo: com is_alive peso 5 (+0,1 por passo de pé, 5 por segundo), o episódio passa a crescer (57 → 63) e nenhum alerta dispara. Mas o termo que mais paga é is_alive e a velocidade é 0,16 m/s: o treino aprendeu a não cair, ainda não a andar.

04O ciclo de ajuste

Rode, veja a leitura das curvas barrar o treino e rode de novo. É o laço desta aula.

a fazer

rodando

feito

alerta

Simulação ilustrativa no navegador. O alerta na leitura das curvas é proposital: é o caso cai-cedo.

05Prática

Ler antes de acreditar.

E1 · Seu treino

3 min

Rode o curvas.py no treino da aula 5 e anote o termo que mais pagou no fim.

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

E2 · O atalho

5 min

Rode os dois exemplos e escreva, numa frase, por que a recompensa do cai-cedo subiu.

Pronto quando: a saída do cai-cedo mostra ALERTA: recompensa hackeada e alertas: 1; sua frase cita o episódio encurtando (55 → 15 passos).

E3 · O próximo ajuste

10 min

O com-vivo não cai, mas anda a 0,16 m/s. Proponha um ajuste de um termo (qual, peso antigo, peso novo) e diga o sinal que você esperaria ver nas curvas se ele funcionar.

Pronto quando: você escreveu um termo do kit/recompensa.yaml com os dois pesos e um sinal mensurável (ex.: velocidade no fim acima de 0,3 m/s sem o episódio encurtar).

06Teste da aula

A explicação aparece depois da sua resposta.

Pergunta 1 de 4

No cai-cedo, a recompensa subiu e o episódio caiu de 55 para 15 passos. O que a política aprendeu?competência

07Em três frases

LeituraRecompensa, duração do episódio, velocidade e termo dominante, sempre juntos.
AtalhoNo cai-cedo, a recompensa subiu porque o robô aprendeu a cair mais cedo.
CicloTreinar, ler, ajustar um termo e treinar de novo; sem alerta ainda não é andar.

Para ir além

Aula anteriorPróxima aula