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

此前我們說到「文字生成」的底層原理是「文字接龍」,精確一點說:以 token 為基本單位,做 token 接龍。而當我們把腦筋動到「圖像生成」上時,我們知道「像素」是圖像的基本單位,那同樣的道理,是不是可以做像素的接龍,達到生成圖片的目的?這個思路在方向上是正確的,不過有幾個比較棘手的問題要解決。
還記得在文字生成的時候,AI 是以「前面已經產出的所有 token」作為輸入,去做接龍產出下一個 token。舉例:
你輸入「台灣大」,模型往下接「學」,然後他拿「台灣大學」作為輸入繼續往下接,接一個「生」,得到「台灣大學生」……,一路接到結束符號,完成對你的回覆。
這種「拿自己的輸出當作下一次的輸入,不斷循環」的模式我們稱作自迴歸模型(Autoregressive generation)。如此,若要生成一篇 100 字的文章,需要做 100 次的自迴歸,看起來這個運算量還不算大。不過,當我們將眼光放到生成圖像的「像素接龍」時,情況就有些不一樣了。若我們要產出一個 800 萬像素的圖片(以現今的圖像水準來看,是張解析度不太高的圖片),並且採用與文字生成一樣「一個單位接一個單位」的方式,AI 一共要做 800 萬次的自迴歸才能完成,這是麼概念呢?哈利波特全集的字數大約是 200 多萬字,如此產出一張 800 萬像素的圖片需要的運算量約等同於產出 3 部哈利波特全集,其中需要花費的運算量與時間是不切實際的。(註:其中所花費的運算量不只是自迴歸次數,還有神經網絡每次要對所有單位做 Attention 需要消耗的算力,以上因為比較深入且複雜,在本文不多討論。)

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 簡報
所以這樣有什麼好處呢?他融合了兩種 regression 方式的優點,又規避了各自的缺點:
- 因為 AI 每次做的都是 Non-autoregression,所以產出每一版圖片的時間都是快的,也(相對)不會消耗太多運算資源
- 因爲每次 Non-autoregression 都是在前一版的基礎下(可以想像為一個框架)去做擴寫,所以大大限制了 AI 腦補的空間,他的發揮空間被限制在前一版的框架內
- 即使要產很多個版本才能逐步產出清晰完整的圖片,但是這個運算量相對來說是很能接受的。可以理解為,原本 Autoregression 的單位是「像素」,做的是像素接龍; 但在 Diffusion Model,Autoregression 的單位是「版本」,做的是版本接龍,兩個接龍次數及運算量不在一個數量級。
如此,讓我們得以用合理的運算時間及成本,生成出質量不錯的圖像,也正是目前主流圖像生成 AI 的運作邏輯。
以上就是 AI 圖像生成 — Diffusion Model 的大致原理,因為是淺談,為了讓一般沒有基礎的人也能聽懂,所以忽略了大量細節,有興趣的人可以再去自行研究,或參考李宏毅教授的課。有趣的是,Diffusion Model 的「擴寫」特性其實我們是有機會觀察到的喔,有些產圖工具會把這個過程展示出來給用戶看,所以你可以看到圖片是從一開始很模糊的版本,一步一步慢慢變得清晰,直至產出完畢,下次使用產圖工具時不妨可以留意看看。
That’s all for me today,希望以上內容對大家有一點點幫助,在這個 AI 時代對這項顛覆性技術有多一些的熟悉,一定不會是壞事。
2025/4/13,新北林口,鯛魚