AIGC: Progressive Distillation 筆記
Google 出品,必屬精品?
DDIM 知識蒸餾(Knowledge Distillation)
我們先從 DDIM 的知識蒸餾開始(2101.02388),在這個知識蒸餾的設定里面,我們有一個老師 (teacher) 和一個學生 (student),學生的目標是讓自己的輸出? 盡量地接近老師的輸出
,用數(shù)學公式表達,就是最小化:
另外,知識蒸餾有一個要求是,輸出需要是確定的 (deterministic),所以這里采用的是 DDIM 的設定。
逐步蒸餾(Progressive Distillation)

逐步蒸餾(2202.00512)的設定很簡單,相比于上面知識蒸餾的一步到位,逐步蒸餾采用的是分步進行蒸餾——首先有一個通過 N 步 DDIM 訓練好的老師,然后有一個長得和老師一模一樣的學生,想要以自己?1 步的輸出去貼近老師 2 步的輸出(意味著學生 DDIM 只需要 ?步),當這個學生學習結(jié)束以后,這個學生就成了新的老師,然后重復如上的過程。
論文對于擴散過程,用了一個更廣泛的設定?. 我們通常所見到的?Variance Preserving 擴散過程,是其在?
時的特例。
?是所謂的?latent, 其實就是?
?加噪后的數(shù)據(jù).?
.
這里,我們在離散時間上進行訓練和蒸餾,并且采用余弦方案 ,
?代表了純高斯噪聲?
(注意下標?t 的范圍是從0到1)。
我們這里再定義一個信噪比 (Signal-to-Noise Ratio)?.??在
?的時候,很明顯?
,?
,?故信噪比為?0.
Loss
針對 loss 函數(shù)我們有
?代表了在 t 時間點所生成的圖片。在公式做了如上的變形之后,我們可以把 loss 看成是在?
?空間里面的函數(shù)(預測圖像和原圖像的距離),而信噪比則控制了 loss 的權(quán)重 (weight). 這里我們把這個權(quán)重稱作權(quán)重函數(shù) (weighting function). 當然,我們還可以設計各種不同的權(quán)重函數(shù)。
這里,論文討論了一個很有趣的現(xiàn)象——當??時(即擴散初期),因為?
, 所以
任何一點小的波動都會被超級放大。在蒸餾的初期,因為我們的步數(shù)很多,早期的一些的錯誤會在后期被修復;但是越往下蒸餾,步數(shù)越少的時候,這種情況就要出問題了。在極端的情況下,如果我們這個逐步蒸餾,進行到只剩下一步了(意味著直接從純高斯噪聲一步生成圖片),那么這個時候,整個 loss 也變成 0 了,學生就學不到任何東西了。
對此,論文里面有三種解決方案:
直接預測 x (繞過了
?在分母上的問題)
預測?
?的同時,也預測
,然后用公式?
?生成圖片。(兩種渠道預測的
?加權(quán)求和)
預測?
, 然后?

另外,論文里面還提出了兩種可行的 loss 的方案:
?Truncated SNR:?
SNR+1:?
DDIM Angular Parameterization
這里,我們對 DDIM 從另一個角度進行切入?,所以?
. 顯然,由
, 我們可得?
.
接下來,我們定義??的速度 (velocity) 為:
利用三角函數(shù)的那些定理(初高中知識哦),對上面的公式變形后,我們可以得到:
在這里,我們再定義一個預測速度 (predicted velocity):?
根據(jù)公式?,我們有:?
所以這里解釋了上一節(jié)的解決方案3的公式由來。
接下來我們要做的只是一些公式變形了,最終我們會得到:

學習目標
對于每一步的更新,其方法是可以有很多種的。
這里,論文里面使用的更新公式為:
, 對其求導的話就可以得到?
.(這里論文假定了 score function
?可以用
來近似;詳細過程見論文附錄)
有了更新公式以后,接下來的事情就簡單了,根據(jù)公式先計算前一步的?, 根據(jù)?
再計算前一步的?
. 然后我們計算目標?
,最小化上述的 loss. 大功告成。

完。
注:B站的公式編輯器頻繁抽風,如果遇到一些 tex parse error 之類的錯誤時,嘗試刷新一下頁面。