kohya-ss/sd-scripts

Question about V-Prediction in SDXL Finetuning

Aberta

#1.163 aberto em 9 de mar. de 2024

 (1 comentário) (0 reação) (0 responsável)Python (1.217 forks)batch import
help wanted

Métricas do repositório

Stars
 (7.201 estrelas)
Métricas de merge de PR
 (Mesclagem média 18h 39m) (16 fundiu PRs em 30d)

Description

It's just my one-sided doubts, about the implement of the v-prediction. In sdxl training, the source code implements v-prediction by:

def add_v_prediction_like_loss(loss, timesteps, noise_scheduler, v_pred_like_loss):
    scale = get_snr_scale(timesteps, noise_scheduler)
    # print(f"add v-prediction like loss: {v_pred_like_loss}, scale: {scale}, loss: {loss}, time: {timesteps}")
    loss = loss + loss / scale * v_pred_like_loss
    return loss

which is mathematically equivalent to: L:=L+snr*L*w, where w=v_pred_like_loss, and snr=scale, while the paper suggests: L:=snr*L.

So, is the source adds additional v-pred like loss rather than scaling it? Why are the implementation and paper different? I'm not a mathematician, and maybe I'm short-sighted. Hope someone can answer my doubts :D

Guia do colaborador