周末拿自己那块3060从零搓了个扩散模型,结构是最朴素的SimpleUNet加时间嵌入,一千六百多万参数,权重存下来六十多兆。
跑下来的数:
- 单轮43秒,二十轮不到十五分钟
- 显存峰值只有0.43G,batch开到128还有富余
结果有点打脸。本来以为多少能看出飞机、汽车的轮廓,出来的全是颜色挺对味、但没有任何形状的抽象色块。回头想也合理,二十轮只够它学会色彩分布和“去噪”这件事本身,物体结构起码还得再堆几十轮才可能浮出来。
真踩过才有体感的几条:
- 小batch用GroupNorm。换回BatchNorm,loss直接抖。
- 时间嵌入别接马虎。接得不对,模型分不清现在是哪个噪声档位,loss看着在降,其实啥也没学到。
- 跳连别省,细节全靠它兜着。
核心逻辑就一句:让网络去预测噪声。简单到有点不真实,但它确实work。