Classifer Guidance:
1# 1. 网络正常去噪,预测当前步的纯净轨迹或噪声2pred_tau = unet(noisy_tau, history_obs, step_k)3# 2. 将预测轨迹送入可导的代价函数计算 Cost (必须 Autograd)4cost = task_cost_function(pred_tau)5# 3. 对输入的高维轨迹求梯度 (告诉它往哪里微调能降低 Cost)6grad = autograd.grad(outputs=cost, inputs=noisy_tau)7# 4. 在标准去噪更新的基础上,叠加上梯度引导项. scale 与归一化有关 1e-5 ~ 0.058next_noisy_tau = ddpm_step(pred_tau, noisy_tau) - scale * gradCFG:
1# 1. 带条件前向:比如输入 prompt="walk forward"2pred_cond = unet(noisy_tau, condition="walk forward", step_k)3# 2. 无条件前向:将条件置空 prompt="" (Drop-out)4pred_uncond = unet(noisy_tau, condition="", step_k)5# 3. 计算 CFG 放大后的预测值 (不使用任何 Autograd 梯度)6# scale > 1 (比如 7.5),将预测推向更符合条件的方向7pred_final = pred_uncond + scale * (pred_cond - pred_uncond)8# 4. 用最终预测值进行标准的去噪更新9next_noisy_tau = ddpm_step(pred_final, noisy_tau)