淺談圖像生成式 AI(Generative AI for images) 原理:Diffusion Model

淺談圖像生成式 AI(Generative AI for images) 原理:Diffusion Model

更新於 發佈於 閱讀時間約 7 分鐘

繼小弟之前的文章〈淺談大型語言模型(LLM)原理:從原理到訓練解析〉,簡要地說明了 AI「文字生成」的運作原理,如今文字生成已經是一種稀鬆平常的 AI 應用了,取而代之鋒頭正盛的是「圖像生成」,今天想用一樣淺顯易懂的方式,用一篇文章讓大家快速了解圖像生成 AI 的運作原理,如此日後對各種 AI 產圖驚艷不已時,可以知其然也知其所以然,跟朋友們說嘴兩句也不虧XD。

raw-image


此前我們說到「文字生成」的底層原理是「文字接龍」,精確一點說:以 token 為基本單位,做 token 接龍。而當我們把腦筋動到「圖像生成」上時,我們知道「像素」是圖像的基本單位,那同樣的道理,是不是可以做像素的接龍,達到生成圖片的目的?這個思路在方向上是正確的,不過有幾個比較棘手的問題要解決。

還記得在文字生成的時候,AI 是以「前面已經產出的所有 token」作為輸入,去做接龍產出下一個 token。舉例:

你輸入「台灣大」,模型往下接「學」,然後他拿「台灣大學」作為輸入繼續往下接,接一個「生」,得到「台灣大學生」……,一路接到結束符號,完成對你的回覆。

這種「拿自己的輸出當作下一次的輸入,不斷循環」的模式我們稱作自迴歸模型(Autoregressive generation)。如此,若要生成一篇 100 字的文章,需要做 100 次的自迴歸,看起來這個運算量還不算大。不過,當我們將眼光放到生成圖像的「像素接龍」時,情況就有些不一樣了。若我們要產出一個 800 萬像素的圖片(以現今的圖像水準來看,是張解析度不太高的圖片),並且採用與文字生成一樣「一個單位接一個單位」的方式,AI 一共要做 800 萬次的自迴歸才能完成,這是麼概念呢?哈利波特全集的字數大約是 200 多萬字,如此產出一張 800 萬像素的圖片需要的運算量約等同於產出 3 部哈利波特全集,其中需要花費的運算量與時間是不切實際的。(註:其中所花費的運算量不只是自迴歸次數,還有神經網絡每次要對所有單位做 Attention 需要消耗的算力,以上因為比較深入且複雜,在本文不多討論。)

AI 同時產出所有位置的內容

AI 同時產出所有位置的內容

既然用 Autoregressive generation 這種接龍的方式行不通,那我們就換個方式:叫 AI 平行運算、同時產出所有像素,可以理解為把一張圖片切分成好幾個位置,然後請 AI 一次性生成所有位置的內容,這種方式我們稱之為非自回歸模型(Non-autoregressive generation)。使用這種方式,除了運算量大幅縮減之外(不需要像 Autoregressive 一樣在生成新的單位時考慮其他所有已產出單位),運算的時間也大幅縮短,因為所有位置的運算時間是平行、同時進行的,雖然我不是 AI 科學家,但這聽起來很不錯對吧?

很可惜的,雖然原本的運算成本問題被解決了,但新的問題跑出來了:AI 的產出質量往往不佳。原因是什麼呢?簡單來說,AI 沒辦法保證生成的不同位置互相一致(global coherence),因為每個位置是獨立、平行生成的,生成過程缺乏因果性與上下文依賴性。再白話一些,在 Non-autoregression 中經常需要 AI 自己腦補(因為文字無法窮舉所有元素),我舉個例子:

我請 AI 畫一張「在看書的人類」圖片,很有可能 AI 在生成位置 1 的時候它所想的人類是一個黑人,在生成位置 2 的時候它所想的是一個白人,結果生成出來的圖片裡的人皮膚一半黑、一半白。
請他生成一台車子,它前面想的是跑車,後面想的是卡車。

請他生成一台車子,它前面想的是跑車,後面想的是卡車。

這就是 Non-autoregressive generation 的天生缺陷,他不是根據前面已產出的內容去做後面內容的接龍,所以即使在固定的指令下,不同位置產出的內容往往並不是互洽且完美兼容的

為了要解決這個問題,科學家們嘗試了好幾種辦法,今天只講其中一個最有名且最被廣泛使用的方式:Diffusion Model。先來復盤一下我們此前碰到的問題:

1. 用 Autoregressive generation 產出的質量不錯,但需要消耗的時間及資源太過龐大

2. 用 Non-autoregressive generation 產出的質量太差(每次產出需要 AI 自己腦補太多),但需要消耗的時間及資源可接受

Diffusion Model 這樣做:先用 Non-autoregression 產出第一版(對人類而言)最模糊、充滿雜訊、只有大致樣貌的圖片; 再拿第一版當作初始輸入,以第一版為基礎,用 Non-autoregression 產出第二版還是一樣很模糊、充滿雜訊、只有大致樣貌的圖片,但比第一版清楚了一點點……依此類推,總之用前一版當作輸入,輸出下一版,一路產出到第100版(隨便講)把所有所需像素都產完的完整清晰圖片。有趣的點是,雖然 AI 每次做的都是 Non-autoregression,但是它每次都是以前一個版本當作基礎(輸入)然後去做擴寫(輸出),所以稍微宏觀一點看,本質上他其實是 Autoregression 的概念,也因此我們可以把 Diffusion Model 視為一種融合了 Autoregression 跟 Non-autoregression 的模型。

註:以上所謂的從最不清晰到清晰,都是站在人類的角度去看,對於 AI 來說其實不是這樣。

李宏毅教授 Youtube 簡報

李宏毅教授 Youtube 簡報

所以這樣有什麼好處呢?他融合了兩種 regression 方式的優點,又規避了各自的缺點:

  1. 因為 AI 每次做的都是 Non-autoregression,所以產出每一版圖片的時間都是快的,也(相對)不會消耗太多運算資源
  2. 因爲每次 Non-autoregression 都是在前一版的基礎下(可以想像為一個框架)去做擴寫,所以大大限制了 AI 腦補的空間,他的發揮空間被限制在前一版的框架內
  3. 即使要產很多個版本才能逐步產出清晰完整的圖片,但是這個運算量相對來說是很能接受的。可以理解為,原本 Autoregression 的單位是「像素」,做的是像素接龍; 但在 Diffusion Model,Autoregression 的單位是「版本」,做的是版本接龍,兩個接龍次數及運算量不在一個數量級。

如此,讓我們得以用合理的運算時間及成本,生成出質量不錯的圖像,也正是目前主流圖像生成 AI 的運作邏輯。

以上就是 AI 圖像生成 — Diffusion Model 的大致原理,因為是淺談,為了讓一般沒有基礎的人也能聽懂,所以忽略了大量細節,有興趣的人可以再去自行研究,或參考李宏毅教授的課。有趣的是,Diffusion Model 的「擴寫」特性其實我們是有機會觀察到的喔,有些產圖工具會把這個過程展示出來給用戶看,所以你可以看到圖片是從一開始很模糊的版本,一步一步慢慢變得清晰,直至產出完畢,下次使用產圖工具時不妨可以留意看看。

That’s all for me today,希望以上內容對大家有一點點幫助,在這個 AI 時代對這項顛覆性技術有多一些的熟悉,一定不會是壞事。

2025/4/13,新北林口,鯛魚

avatar-img
英特來糗
3會員
18內容數
兩位對知識懷抱熱忱的大學同學主筆,一些科技、經濟、職涯知識分享。透過分享我們的已知,希望幫助在同一條道上的人走得更順利,未見得正確,能燃起一些火花足矣。 - 筆者 鯛魚:政大差點延畢,現職軟體產品經理。 筆者 小胡:政大雙主修經濟、上海復旦經濟學碩士,現職銀行數據分析師。
留言
avatar-img
留言分享你的想法!
英特來糗 的其他內容
薪水低,不一定是你不夠好,而是「薪水與能力脫節了」。這篇文章分享我如何用三年薪水翻倍的實戰經驗,拆解能力成長、薪資觀察與跳槽節奏,讓打工人賺到自己值得的價值。
本文分享作者在換工作後遭遇期待落差與現實撞擊的心路歷程。從「我不是來處理 Google Sheets 的!」的挫敗心聲,到思考如何從困境中練出反脆弱性,闡述「反脆弱性」在職場上的實踐:不是只在好環境中閃閃發光,而是即使條件不理想,也能成為撐起戰局的關鍵角色。
本文分享面試中遇到的費米問題:估算新北市理髮廳數量。文章詳細闡述解題思路,包括轉換問題、選擇框架、列出公式、拆解元素、合理假設等步驟,並分享個人經驗及心得。文章強調邏輯思考和估算過程的重要性,而非答案的精確度。最後並比較估算結果與2010年官方數據的差異。
薪水低,不一定是你不夠好,而是「薪水與能力脫節了」。這篇文章分享我如何用三年薪水翻倍的實戰經驗,拆解能力成長、薪資觀察與跳槽節奏,讓打工人賺到自己值得的價值。
本文分享作者在換工作後遭遇期待落差與現實撞擊的心路歷程。從「我不是來處理 Google Sheets 的!」的挫敗心聲,到思考如何從困境中練出反脆弱性,闡述「反脆弱性」在職場上的實踐:不是只在好環境中閃閃發光,而是即使條件不理想,也能成為撐起戰局的關鍵角色。
本文分享面試中遇到的費米問題:估算新北市理髮廳數量。文章詳細闡述解題思路,包括轉換問題、選擇框架、列出公式、拆解元素、合理假設等步驟,並分享個人經驗及心得。文章強調邏輯思考和估算過程的重要性,而非答案的精確度。最後並比較估算結果與2010年官方數據的差異。
本篇參與的主題活動
隨著夏天的腳步逼近,是不是也感覺到空氣中那股濕熱的黏膩感了呢?這種天氣下,如果還噴上秋冬常用的濃郁木質調或甜膩美食調香水,不只自己覺得悶,旁人可能也會有點「窒息」感。夏天,我們需要的是能帶來清爽、愉悅感受,彷彿一陣微風拂過的「降溫系」香氣! 但是,什麼樣的香水才適合夏天?
隨著夏天的腳步逼近,是不是也感覺到空氣中那股濕熱的黏膩感了呢?這種天氣下,如果還噴上秋冬常用的濃郁木質調或甜膩美食調香水,不只自己覺得悶,旁人可能也會有點「窒息」感。夏天,我們需要的是能帶來清爽、愉悅感受,彷彿一陣微風拂過的「降溫系」香氣! 但是,什麼樣的香水才適合夏天?