昇思 MindSpore 首個可訓練的 diffusion 模型 DDPM 馬上要和大家見面了,操作簡單,可訓練 + 推理,單卡即可運行,歡迎廣大産學研開發者使用啟智社區免費 Ascend NPU 算力體驗。
最近爆火的 AI 繪圖,相信大家并不陌生了。
從 AI 繪圖軟件生成的作品打敗一衆人類藝術家,斬獲數字藝術類冠軍,到如今 DALL.E、Imagen、novelai 等國内外平台遍地開花。
也許你也曾點開過相關網站,嘗試讓 AI 描繪你腦海中的風景,又或者上傳了一張自己帥氣 / 美美的照片,然後對着最後生成的糙漢哭笑不得。
那麼,在你感受 AI 繪圖魅力的同時,有沒有想過(不你肯定想過),它背後的奧妙究竟是什麼?
△美國科羅拉多州技術博覽會中獲得數字藝術類冠軍的作品——《太空歌劇院》
一切,都要從一個名為 DDPM 的模型說起…
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
image_size: 圖片大小
timesteps: 加噪步數
sampling_timesteps: 采樣步數,為提升推理性能,需小于加噪步數
Trainer
train_batch_size:batch 大小
train_lr: 學習率
train_num_steps: 訓練步數
如何借助啟智社區運算 DDPM 模型?
DDPM 模型運算可使用啟智社區的 NPU 算力,具體操作可以參考下方的視頻。
悄悄打一個廣告,啟智社區聯合 MindSpore 為大家發福利啦,一年份 100 萬卡時的免費算力,快去啟智社區(https://openi.pcl.ac.cn/)體驗吧 ~
" 進階版 "DDPM 模型 MindDiffusion
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,怎麼辦,突然就很期待成品了呢 ( � � ω� � ) )
One More Thing
最後的最後,在 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, and Pieter Abbeel. Denoising Diffusion Probabilistic Models. arXiv:2006.11239, 2020.
[ 3 ] Ling Yang, Zhilong Zhang, Shenda Hong, Runsheng Xu, Yue Zhao, Yingxia Shao, Wentao Zhang, Ming-Hsuan Yang, and Bin Cui. Diffusion models: A comprehensive survey of methods and applications. arXiv preprint 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
* 本文系量子位獲授權刊載,觀點僅為作者所有。
— 完 —
量子位 QbitAI
վ ' ᴗ ' ի 追蹤 AI 技術和産品新動态
一鍵三連「分享」、「點贊」和「在看」
科技前沿進展日日相見 ~