Stable Diffusion背後的秘密:原來一直在去噪,不是在畫圖! --- 你可能用過Stable Diffusion。 當輸入"一隻貓坐在沙發上"。 然後,你看著進度條,一點一點往前走。 10%... 20%... 30%... 影像慢慢從模糊變清晰。 一開始,全是雜訊。 然後,隱約能看到一些形狀。 再然後,能看到貓的輪廓。 最後,一張清晰的圖出現了。 你有沒有想過,它到底在做什麼? 答案是:去雜訊。 它不是在"畫"圖。 它是在"去噪"。 一開始,給它一張純噪音圖。 就是那種電視沒訊號時的雪花畫面。 然後,它一步一步把雜訊去掉。 每去掉一點,圖就清晰一點。 去了50 步,圖就清晰了。 這就是DDPM:Denoising Diffusion Probabilistic Model。 (去雜訊擴散機率模型) 聽起來很複雜,但核心就是兩個字:去雜訊。 但這裡有個神奇的地方: 它怎麼知道該去成什麼樣子? 我是說,同樣是一堆噪音, 你可以去成貓,可以去成狗,可以去成車。 它怎麼知道你要的是貓? 答案是:你告訴它的。 你輸入"一隻貓坐在沙發上"。 這段文字,會被變成一個向量。 然後,在每一步去雜訊的時候, 模型都會看這個向量, 知道:哦,你要的是貓,不是狗。 所以,它去噪的方向,是朝著"貓"去的。 這就是為什麼,你輸入不同的文字, 會產生不同的圖。 因為去噪的方向不一樣。 而這一切,都建立在一個簡單的想法上: 生成,就是反向去雜訊。 你先學會怎麼加噪音。 然後,反過來,學會怎麼去噪音。 去雜訊的終點,就是產生的結果。 注意,這是2020 年的論文突破。 從那之後,所有最好的圖像生成模型, Stable Diffusion、Midjourney、DALL-E 2, 全都用這個思路。 不是GAN,是Diffusion。 因為Diffusion 更穩定,更可控,生成的圖更真實。 另外,你玩Stable Diffusion時,可能有調過下面參數: Steps: 50 CFG Scale: 7.5 Sampler: DPM++ 2M Karras 程式碼跑通了,圖生成了。 但你可能不知道這些參數是什麼意思。 Steps 是去雜訊的次數。 Stable Diffusion 不是一次性生成圖。 它是一步一步去噪。 Steps = 50,就是去50 次雜訊。 每去一次,圖就清晰一點。 Steps 越多,圖越清晰,但也越慢。 Steps 越少,圖越模糊,但也越快。 一般來說,50 步就夠了。 CFG Scale 是文字引導的強度。 CFG 是Classifier-Free Guidance。 意思是:你輸入的文字,對生成的影響有多大。 CFG Scale = 1,文字幾乎沒影響,模型隨便產生。 CFG Scale = 20,文字影響很大,模型嚴格依照文字產生。 CFG Scale = 7.5,是一個平衡。 既聽文字的,又有一點創造性。 太低,產生的圖和文字不符。 太高,生成的圖太死板,沒有驚喜。 Sampler 是去噪的方法。 DDPM 說的是"去1000 次雜訊"。 但1000 次太慢了。 所以,後來有人發明了更快的方法。 DPM++、Euler、DDIM... 這些都是"怎麼更快去雜訊"。 有的方法,20 步就能達到1000 步的效果。 有的方法,更穩定。 有的方法,更有創意。 你選哪個Sampler,就是在選"怎麼去雜訊"。 這就是這些參數的意思。 Steps:去幾次雜訊。 CFG Scale:文字影響有多大。 Sampler:用什麼方法去噪。 ---- AI產生好讀的科普文,很適合學習複雜的概念。
正在載入線程內容
正在從 X 取得原始推文,整理成清爽的閱讀畫面。
通常只需幾秒鐘,請稍候。