最近爆火的AI繪圖,相信大家並不陌生了。
從AI繪圖軟體生成的作品打敗一眾人類藝術家,拿下數位藝術類冠軍,到如今DALL.E、Imagen、novelai等國內外平台遍地開花。
也許你也曾點開過相關網站,試著讓AI描繪你腦海中的風景,又或者上傳了一張自己帥氣/美美的照片,然後對著最後生成的糙漢哭笑不得。
那麼,在你感受AI繪圖魅力的同時,有沒有想過(不你肯定想過),它背後的奧妙究竟是什麼?
△美國科羅拉多州技術博覽會中獲得數位藝術類冠軍的作品-《太空歌劇院》
一切,都要從一個名為DDPM的模型說起…
DDPM模型,全名為Denoising Diffusion Probabilistic Model,可以說是現階段diffusion模型的開山鼻祖。
不同於前輩GAN、VAE和flow等模型,diffusion模型的整體思路是透過一種偏向於最佳化的方式,逐步從一個純噪音的圖片中產生影像。
△現在已有生成影像模型的對比
有的小夥伴可能會問了,什麼是純雜訊圖片?
很簡單,老式電視機沒訊號時,伴隨著「刺啦刺啦」噪音出現的雪花圖片,就屬於純噪音圖片。
而DDPM在生成階段所做的事情,就是把這些個「雪花」一點點移除,直到清晰的影像露出它的廬山真面目,我們把這個階段稱之為「去雜訊」。
△純噪音圖片:老電視的雪花螢幕
透過描述,大家可以感受到,去噪其實是個相當複雜的過程。
沒有一定的去噪規律,可能你忙活了好半天,到最後還是對著奇形怪狀的圖片欲哭無淚。
當然,不同類型的圖片也會有不同的去噪規律,至於怎麼讓機器學會這種規律,有人靈機一動,想到了一種絕妙的方法:
既然去噪規律不好學,那我為什麼不先通過加噪的方式,先把一張圖片變成純噪音圖像,再把整個過程反著來一遍呢?
這便奠定了diffusion模型整個訓練-推理的流程:先在前向過程(forward process)通過逐步加噪,將圖片轉換為一個近似可用高斯分佈的純噪聲圖像;
緊接著在反向過程(reverse process)中逐步去噪,生成圖像;
最後以增大原始圖像和生成圖像的相似度作為目標,優化模型,直至達到理想效果。
△DDPM的訓練-推理流程
到這裡,不知道大家的接受度怎樣?如果感覺沒問題,輕輕鬆鬆的話,準備好,我要開始上大招(深入理論)啦。
1.1.1 前向過程(forward process)
前向過程又稱為擴散過程(diffusion process),整體是一個參數化的馬可夫鏈(Markov chain)。從初始資料分佈x0~q(x)出發,每步在資料分佈中加入高斯噪音,持續T次。其中從第t-1步xt-1到第t步xt的過程可以用高斯分佈表示為:
透過適當的設置,隨著t不斷增加,原始資料x0會逐漸失去他的特徵。我們可以理解為,在進行了無限次的加噪步驟後,最終的數據xT會變成沒有任何特徵,完全是隨機噪音的圖片,也就是我們最開始說的「雪花屏」。
在這個過程中,每一步的變化是可以透過設定超參βt來控制,在我們知曉最開始的圖片是什麼的前提下,前向加噪的整個過程可以說是已知且可控的,我們完全能知道每個步驟的生成資料是什麼樣子。
但問題在於,每次的計算都需要從起始點出發,結合每一步的過程,慢慢推導到你想要的某步資料xt,過於麻煩。好在因為高斯分佈的一些特性,我們可以一步到位,直接從x0得到xt。
注意,這裡的
和為組合係數,本質上是超參的βt表達式。
1.1.2 反向過程(reverse process)
和前向過程同理,反向過程也是馬爾可夫鏈(Markov chain),只不過這裡用到的參數不同,至於具體參數是什麼,這個就是我們需要機器來學習的部分啦。
在了解機器如何學習前,我們先思考,基於某一個原始資料x0,從第t步xt,精準反推回第t-1步xt-1的過程應該是怎樣的?
答案是,這個仍可以用高斯分佈表示:
#注意這裡必須要考慮x0,意思是反向過程最後產生圖像還是要與原始數據有關。輸入貓的圖片,模型產生的圖像應該是貓,輸入狗的圖片,生成的圖像也應該和狗相關。若是移除掉x0,會導致無論輸入哪種類型的圖片訓練,最後diffusion產生的影像都一樣,「貓狗不分」。
經過一連串的推導,我們發現,反向過程中的參數
#和
,竟然還是可以用x0,xt,以及參數βt,表示出來的,是不是很神奇~
當然,機器事先並不知道這個真實的反推過程,它能做到的,只是用一個大概近似的估計分佈去模擬,表示為p0(xt-1|xt)。
1.1.3 最佳化目標
在最開始我們提到,需要透過增加原始資料和反向過程最終產生資料的相似度來最佳化模型。在機器學習中,我們計算該相似度參考的是交叉熵(cross entropy)。
關於交叉熵,學術上給出的定義是「用於度量兩個機率分佈間的差異性資訊」。換句話說,交叉熵越小,模型產生的圖片就越和原始圖片接近。但是,在大多數情況下,交叉熵是很難或無法透過計算得出的,所以我們一般會透過最佳化一個更簡單的表達式,達到相同的效果。
Diffusion模型借鏡了VAE模型的最佳化思路,將variational lower bound(VLB,又稱為ELBO)取代cross entropy來作為最大最佳化目標。透過無數步驟的分解,我們最終得到:
看到這麼複雜的公式,好多小夥伴肯定頭都大了。但不慌,這裡需要關注的,只是中間的Lt-1罷了,它表示的是xt和xt-1之間估計分佈p0(xt-1|xt)和真實分佈q(xt-1|xt,x0 )的差距。差距越小,模型最後產生圖片的效果越好。
1.1.4 上程式碼
在了解DDPM背後的原理,接下來就讓我們看看DDPM模型究竟是如何實現…
才怪啦。相信看到這裡的你,肯定也不想遭受成百上千行符碼的洗禮。
好在MindSpore已經為大家提供了開發完備的DDPM模型,訓練推理兩手抓,操作簡單,單卡即可運行,想要體驗效果的小伙伴,只需要先
pip install denoising-diffusion-mindspore
然後,參考如下程式碼配置參數:
#對重要的參數進行一些解析:
GaussianDiffusion
Trainer
DDPM只是Diffusion這個故事的開頭。目前,已有無數的研究人員被背後瑰麗的世界所吸引,紛紛投身其中。
在不斷優化模型的同時,他們也逐漸發展了Diffusion在各領域的應用。
其中,包括了電腦視覺領域的圖像優化、inpainting、3D視覺、自然語言處理中的text-to-speech、AI for Science領域的分子構像生成、材料設計等。
更有來自史丹佛大學電腦科學系的博士生Eric Zelikman大開腦洞,嘗試將DALLE-2與最近另一個大火的對話模型ChatGPT相結合,製作出了溫馨的繪本故事。
△DALLE-2 ChatGPT合力完成的,關於一個名叫「羅比」的小機器人的故事
不過最廣為大眾所知的,應該還是它在文生圖(text-to-image)的應用。輸入幾個關鍵字或一段簡短的描述,模型可以為你產生相對應的圖畫。
例如,輸入“城市夜景 賽博朋克 格雷格·路特科夫斯基”,最後生成的便是一張色彩鮮明,頗具未來科幻風格的作品。
再比如,輸入“莫奈撐陽傘的女人月亮夢幻”,生成的便是一張極具有朦朧感的女人畫像,色彩搭配的風格有木有讓你想起莫內的《睡蓮》?
想要寫實風格的風景照作為螢幕保護?沒問題!
△鄉村 田野 屏保
想要二次元濃度多一點的?也可以!
△來自深淵風景繪畫寫實風格
#以上這些圖片,均是由MindDiffusion平台的下的悟空畫畫製作而成的哦,悟空畫畫是基於擴散模型的中文文生圖大模型,由華為諾亞團隊攜手中軟分散式平行實驗室,昇騰運算產品部門共同開發。
模型基於Wukong dataset訓練,並使用昇思框架(MindSpore) 昇騰(Ascend)軟硬體解決方案實現。
躍躍欲試的小夥伴先別著急,為了讓大家擁有更好的體驗,更多自行開發的空間,我們打算讓MindDiffusion中的模型同樣也具備可訓練、可推理的特性,預計在明年就要和大家見面啦,敬請期待。
歡迎大家頭腦風暴,生成各種別具風格的作品哦~
(據去內部打探情報的同事說,有人已經開始嘗試「張飛繡花」、「劉華強砍瓜」、「古希臘神大戰哥吉拉」了。ummmm,怎麼辦,突然就很期待成品了呢(ಡωಡ))
#最後的最後,在Diffusion爆火的如今,有人也曾發出過疑問,為什麼它可以做到如此的大紅大紫,甚至風頭開始超過GAN網路?
Diffusion的優勢突出,劣勢也很明顯;它的許多領域仍是空白,它的前方還是一片未知。
為什麼卻有那麼多的人在孜孜不倦地對它進行研究呢?
興許,馬毅教授的一番話,可以提供我們一種解答。
但diffusion process的有效性、以及很快取代GAN也充分說明了一個簡單道理:
幾行簡單正確的數學推導,可以比近十年的大規模調試超參調試網路結構有效得多。
或許,這就是Diffusion模型的魅力吧。
[1]https://medium.com/mlearning-ai/ai-art-wins-fine-arts-competition-and-sparks-controversy- 882f9b4df98c
[2]Jonathan Ho、Ajay Jain 和Pieter Abbeel。去噪擴散機率模型。 arXiv:2006.11239, 2020.
[3]楊凌,張志龍,洪申達,徐潤生,趙越,邵迎霞,張文濤,楊明軒,崔斌。擴散模型:方法和應用的全面調查。 arXiv 預印本arXiv:2209.00796, 2022.
[4]https://lilianweng.github.io/posts/2021-07-11-diffusion-models
[5]https: / /github.com/lvyufeng/denoising-diffusion-mindspore
[6]https://zhuanlan.zhihu.com/p/525106459
[7]https://zhuanlan. zhihu .com/p/500532271
[8]https://www.zhihu.com/question/536012286
[9]https://mp.weixin.qq.com/ s /XTNk1saGcgPO-PxzkrBnIg
[10]https://m.weibo.cn/3235040884/4804448864177745
以上是單卡就能運行AI畫畫模型,小白也能看懂的教學來了,還有100萬卡時免費NPU算力可用的詳細內容。更多資訊請關注PHP中文網其他相關文章!