擴散模型的負關鍵字原理

剛剛看到國際AI Art社群有人在詢問什麼是Negative prompt,運作原理是什麼,我來為大家說一說。
首先要明白的是: 降噪擴散機率模型DDPM(及其衍生模型) 其核心概念是取一張雜訊圖像進行多步降噪,降到最後即可得到精美的圖像。故該類模型最核心最關鍵能力乃操之在於降噪能力,此能力掌握在模型中的一個U-Net模組。
DDPM的工作迴圈大致如下: 首先取一張帶有雜訊的影像,詢問U-Net他認為這張影像的雜訊有多大。U-Net會回覆一個代表雜訊的epsilon(後稱eps,其為一張量),我們就從原圖裡面扣掉eps的一部份丶將全圖強度提高一些丶加一些新的雜訊之後,從頭再問一次U-Net認為雜訊eps是多少,如此週而復始進行數(shù)百次(後續(xù)系列模型已降低至數(shù)十次) ,最終得到美圖。
從以上步驟可以看到,DDPM系列其一個核心重點在於eps的估算,<不直接猜正確的原圖,而改猜加入至原圖的雜訊>就是DDPM 的創(chuàng)見。但DDPM模型發(fā)佈當時並沒有提出引導整個生成圖像的方式,也就是還沒有設計任何輸入prompt的功能,整個生成過程就是個freestyle式的free run。等到DDPM原作者Ho的另外一篇重磅論文<Classifier-free Guidance >發(fā)表後,才算是親手補上了一套嶄新高效的prompt實作方式。
在Classifier-free設計中,Ho使用了一個新式的雜訊預估值,該值如下(為講解之便,此處非原公式) :
Eps = gamma * eps with prompt + (1-gamma) * eps without prompt
從上述式子可以看到,整體的Eps形同在2個端點數(shù)值之間做內(nèi)插: 一個端點值是在prompt作用下的eps,另一個端點值是無prompt作用之free run eps。如此一來即可免除原本使用笨重的classifier式架構,採用原本的改良版U-Net即可實現(xiàn)prompt控制。更神奇的是,實作時發(fā)現(xiàn)若將gamma設為大於1的值,則將可產(chǎn)生顯著的圖像質(zhì)量提升(請注意此時(1-gamma) 是一個負值) 。整體eps應是對施加prompt與留空prompt兩種情況之eps取其差而得,將上述公式重寫就會發(fā)現(xiàn)奧秘:
Eps = gamma * (eps with prompt -?eps without prompt) + eps without prompt
也就是說: 空prompt eps是整個估算的基本值,再增補上gamma倍的delta eps即為整體eps。
到了Automatic1111 實作webui版本的Stable Diffusion 時,Automatic1111 將公式中原本應該是free run eps(prompt為空字串時的eps) 的地方,改為由另外一組prompt控制所產(chǎn)生的eps,此prompt即為後面我們稱呼的負關鍵字negative prompt 。最終的公式變成:
Eps = gamma * eps with positive prompt + (1-gamma) * eps with negative prompt
由於gamma大於1丶(1-gamma) 小於0,故負關鍵字會抵扣掉正關鍵字的效果,兩者運算完後才是整體的eps。
後頭大伙發(fā)現(xiàn),eps根本就是朗之萬動力學的drift term,因此正關鍵字可視為導向目標的動量,而負關鍵字則可被視為遠離反向目標的動量。