簡介#

與第七、八章討論的無條件生成方法(從隨機雜訊生成內容)不同,文字轉圖像生成(Text-to-Image Generation) 讓使用者透過文字提示詞控制輸出結果,模型會將提示詞轉換為一張精細的圖像。目前已有多個商用服務,包括 OpenAI 的 DALL-E 3 [1]、Google 的 Imagen [2],以及 Adobe 的 Firefly [3]。

Figure 1: An example of a prompt and a generated image by OpenAI’s DALL-E 3 [1]

釐清需求#

典型的候選人與面試官互動會涵蓋以下要點:

  • 目標解析度: 1024x1024 像素
  • 語言支援: 初期支援英語,但架構需可擴展至其他語言
  • 訓練資料: 約五億張圖像,大部分附有圖說
  • 提示詞複雜度: 支援最多 128 個單詞的詳細提示詞
  • 生成速度: 接近即時,目標為每張圖像 10 秒以內
  • 圖像多樣性: 寫實風景、人像、抽象藝術、概念藝術
  • 公平性: 處理年齡、種族、性別方面的偏差
  • 安全性: 透過過濾與檢查機制,防止生成冒犯性、不當或有害的圖像

將問題框定為機器學習任務#

定義輸入與輸出#

  • 輸入: 描述所需圖像的文字提示詞(場景、物件、顏色、風格、情感)
  • 輸出: 一張視覺細節豐富且符合提示詞的圖像

Figure 2: Input and output of a text-to-image system. Image credit: [4]

選擇合適的機器學習方法#

文字轉圖像生成是一個涉及文字理解與圖像生成的多模態任務(Multimodal Task)。主要有兩種方法:

  • 自迴歸模型(Autoregressive Models)
  • 擴散模型(Diffusion Models)

自迴歸模型#

自迴歸模型將文字轉圖像生成視為序列生成任務。一個僅解碼器的 Transformer 接收文字 token 作為輸入,輸出代表圖像的視覺 token,再由圖像 tokenizer 將這些視覺 token 解碼為實際圖像。

Figure 3: Autoregressive text-to-image generation

代表性模型包括 OpenAI 的 DALL-E [5] 和 Google 的 Muse [6]。

擴散模型#

擴散模型最早於 2019 年提出 [7],約三年後獲得廣泛關注。其核心機制是從隨機雜訊出發,在文字提示詞的引導下逐步將雜訊轉換為清晰圖像。流程通常包含:

  • 文字編碼器(如 OpenAI 的 CLIP [8] 或 Google 的 T5 [9])將提示詞轉換為嵌入向量(Embedding)
  • 此嵌入向量捕捉提示詞的語意,並引導擴散模型生成匹配的圖像 1

Figure 4: Diffusion-based text-to-image generation

代表性模型包括 Google 的 Imagen 3 [2]、OpenAI 的 DALL-E 2 [10],以及 Stability AI 的 Stable Diffusion [11]。

擴散模型 vs. 自迴歸模型#

自迴歸模型將生成視為序列任務;擴散模型則將其視為迭代精煉過程。兩者皆能生成逼真圖像、生成速度較慢、通常具有數十億參數,且需要大量計算資源。它們在三個關鍵面向上有所不同:

Figure 5: Diffusion vs. autoregressive model characteristics

  1. 實作複雜度 — 自迴歸模型在訓練與推論時較易實作。訓練時,自迴歸模型的統計效率更高,因為它能在一次前向-反向傳播中從所有步驟獲得有用的梯度訊號。擴散模型則需要為每個訓練樣本採樣不同的雜訊等級。推論時,擴散模型需經過多步精煉圖像,增加了複雜度。
  2. 圖像品質 — 擴散模型能生成更精細、更逼真的圖像。其迭代過程允許持續精煉細節,帶來更優異的整體真實感。
  3. 取樣靈活性 — 擴散模型可透過調整取樣步數,輕鬆在取樣速度與圖像品質之間取得平衡。自迴歸模型在訓練後難以進行此類調整。

本章採用擴散模型,以追求卓越的圖像品質為優先考量。模型開發章節將深入探討架構、訓練方法與取樣技術。

資料準備#

資料集包含約五億組圖像-圖說配對。大規模資料集在訓練前需要大量預處理。本節涵蓋圖像與圖說的準備技術。

圖像準備#

圖像準備包含兩個主要步驟:過濾不當圖像與標準化保留的圖像。

過濾不當圖像#

  • 移除過小的圖像: 捨棄小於閾值(如 64x64 像素)的配對,因小圖像通常品質不佳
  • 圖像去重: 使用去重方法 [12] 移除完全相同或感知上相似的圖像,避免模型偏向頻繁出現的圖像
  • 移除不當圖像: 應用危害偵測與 NSFW 偵測模型,過濾暴力、裸露等有害內容
  • 移除低美感圖像: 使用專門的 ML 模型排除美感不佳的圖像

標準化圖像#

  • 調整圖像尺寸: 將較短邊縮放至目標大小(如 128),保持比例不變,然後從中心裁切至最終尺寸(如 128x128)
  • 正規化圖像: 將像素值縮放至標準範圍,如 [0, 1] 或 [-1, 1],以獲得更穩定的訓練

Figure 6: Image preparation steps

圖說準備#

圖說經常不相關或缺失。確保圖說品質的常見步驟如下:

  • 處理缺失或非英文圖說: 使用圖像描述模型(如 BLIP-3 [13])自動生成描述性圖說(第五章介紹了從零建構圖像描述系統的方法)
  • 增強圖說: 使用預訓練模型(如 CLIP [8])為每組圖像-圖說配對評分。若分數低於閾值,則以 BLIP-3 自動生成的圖說替換原始圖說
  • 移除匹配不佳的配對: 增強圖說後,移除 CLIP 相似度分數低於閾值的配對,確保模型僅接觸到描述準確的圖像

模型開發#

架構#

擴散模型透過多個步驟逐步對含雜訊的圖像進行去噪,直到圖像變得清晰。在每個步驟中,模型接收含雜訊圖像作為輸入,並預測應移除的雜訊 2。兩種常見的架構可用於此目的:

  • U-Net
  • Diffusion Transformer(DiT)

Figure 7: Input and output of the diffusion model in a single step

U-Net#

U-Net [14] 是一種 CNN 架構,最初為生物醫學影像分割而設計。它由一系列下取樣區塊(Downsampling Blocks) 接續上取樣區塊(Upsampling Blocks) 組成。

Figure 8: U-Net downsampling and upsampling blocks

下取樣區塊#

下取樣區塊逐步縮小空間維度(高度與寬度),同時增加深度(通道數),產生壓縮表示。每個區塊通常包含:

  • 卷積運算(Convolution) — 從輸入中擷取視覺特徵
  • 批次正規化(Batch Normalization) — 正規化特徵圖以穩定訓練
  • 非線性啟動函數 — 引入非線性以學習複雜模式
  • 最大池化(Max-pooling) — 縮減特徵圖維度
  • 交叉注意力(Cross-attention) — 對額外條件(如文字提示詞 token)進行交叉注意力運算,確保文字提示詞影響預測的雜訊

Figure 9: Typical layers in a downsampling block

交叉注意力層特別值得注意,因為它在不同模態(圖像與文字)之間進行交叉注意力運算。文字提示詞由基於 Transformer 的編碼器處理為一系列連續嵌入向量,捕捉語意。在每個去噪步驟中,模型透過 Conv2DBatchNorm2D 等層處理含雜訊圖像以擷取視覺特徵。在交叉注意力層中:

  • 查詢(Queries) 來自圖像特徵
  • 鍵與值(Keys and Values) 來自文字嵌入向量

這使模型能夠將文字資訊對齊並整合到圖像特徵中。

上取樣區塊#

上取樣區塊對稱地增加空間維度並減少特徵圖深度。最終輸出與原始輸入大小一致(即預測的雜訊)。每個區塊包含:

  • 轉置卷積(Transposed Convolution) — 使用如 PyTorch 的 ConvTranspose2D 等運算增加特徵圖維度
  • 批次正規化(Batch Normalization) — 正規化特徵圖以穩定訓練
  • 非線性啟動函數 — 引入非線性以學習複雜模式
  • 交叉注意力(Cross-attention) — 在上取樣過程中維持額外條件的影響

Figure 10: Typical layers in an upsampling block

U-Net 架構有許多細節與變體。不同的實作可能使用不同的層與配置。理解關鍵組件與結構對於大多數 ML 系統設計面試已足夠。欲深入了解,請參閱 [14]。

DiT#

DiT [15] 是另一種熱門的擴散模型架構。與 U-Net 不同,DiT 主要依賴 Transformer 架構來處理含雜訊的輸入並預測雜訊。

Figure 11: DiT components

DiT 的靈感來自第五章討論的 Vision Transformer(ViT) [16] 架構,其組件包括:

  • Patchify — 將輸入圖像轉換為一系列 patch 嵌入向量
  • 位置編碼(Positional Encoding) — 為每個 patch 嵌入向量附加位置資訊
  • Transformer — 處理嵌入向量與條件訊號(如文字提示詞)以預測每個 patch 的雜訊
  • Unpatchify — 將預測的雜訊向量轉換回與原始輸入維度一致的圖像

U-Net 與 DiT 在實務上都表現良好。U-Net 被用於早期的文字轉圖像模型,如 Google 的 Imagen [17] 和 Stable Diffusion [11]。近期 DiT 展現了巨大潛力。本章以 U-Net 為教學範例;第十一章將更詳細地探討 DiT。

訓練#

擴散模型透過擴散過程(Diffusion Process) 進行訓練,分為兩個階段:

  • 前向過程(Forward Process):加噪
  • 反向過程(Backward Process):去噪

前向過程#

在前向過程中,雜訊逐步加入圖像,經過多個步驟(以 t 或時間步表示),直到圖像變成完全的雜訊。t 的值通常從某個範圍(一般為 1 到 1,000)中隨機選取。前向過程不涉及任何 ML 模型或參數更新。

Figure 12: Forward diffusion process

反向過程#

在反向過程中,ML 模型學習逆轉前向過程。在每個步驟中,模型預測含雜訊圖像中的雜訊,並利用此預測來降低雜訊。此過程重複進行,直到圖像變得清晰。

Figure 13: Backward diffusion process

擴散訓練過程#

在訓練過程中,透過模擬前向過程將雜訊加入原始圖像,然後由模型預測此雜訊。涉及四個關鍵步驟:

  1. 雜訊添加
  2. 條件訊號準備
  3. 雜訊預測
  4. ML 目標與損失計算

本節包含一些數學公式供有興趣的讀者參考,但這些細節不影響 ML 系統的設計。

1. 雜訊添加#

第一步透過在多個時間步中加入雜訊來模擬前向擴散過程。在每個時間步,圖像會被略微添加高斯雜訊(Gaussian Noise)而受到破壞。

每個時間步的雜訊量由雜訊排程(Noise Schedule) 控制,以變異數參數 $\beta_1, \beta_2, \ldots, \beta_T$ 定義,其中 $T$ 為總時間步數。每個 $\beta_t \in (0,1)$ 控制時間步 $t$ 添加的雜訊量。排程通常遞增:

$\beta_1<\beta_2<\ldots<\beta_T$

早期添加較少雜訊(保留更多原始圖像資訊),後期添加較多雜訊(加速擴散過程)。

時間步 $t$ 的含雜訊資料表示為:

$x_t = \sqrt{(1-\beta_t)}x_{t-1} + \sqrt{\beta_t}\epsilon$

其中:

  • $x_t$ 是時間步 $t$ 的含雜訊圖像
  • $x_{t-1}$ 是時間步 $t-1$ 的含雜訊圖像
  • $\epsilon$ 是從 $N(0, I)$ 取樣的高斯雜訊
  • $\beta_t$ 是時間步 $t$ 的變異數排程參數

逐步添加雜訊非常耗時。實際上,時間步 $t$ 的含雜訊資料可直接從原始資料 $x_0$ 推導得出:

$\begin{aligned} & x_t=\sqrt{\alpha_t} x_{t-1}+\sqrt{1-\alpha_t} \epsilon_{t-1} \ & =\sqrt{\alpha_t}\left(\sqrt{\alpha_{t-1}} x_{t-2}+\sqrt{1-\alpha_{t-1}} \epsilon_{t-2}\right)+\sqrt{1-\alpha_t} \epsilon_{t-1} \ & =\sqrt{\alpha_t \alpha_{t-1}} x_{t-2}+\sqrt{1-\alpha_t \alpha_{t-1}} \epsilon_{t-2}^{\prime} \ & =\ldots \ & =\sqrt{\alpha_t^{\prime}} x_0+\sqrt{1-\alpha_t^{\prime}} \epsilon \end{aligned}$

其中:

  • $x_t$ 是時間步 $t$ 的含雜訊圖像
  • $\alpha_t=1-\beta_t$ 和 $\alpha_t^{\prime}=\prod_{i=1}^t \alpha_i$ 是 $\beta_t$ 的重新參數化
  • $\epsilon$ 是從 $N(0, I)$ 取樣的高斯雜訊

總結來說,在雜訊添加階段,我們隨機取樣 $t$ 並使用以下公式直接從 $x_0$ 計算 $x_t$:

$x_t=\sqrt{\alpha_t^{\prime}} x_0+\sqrt{1-\alpha_t^{\prime}} \epsilon$

2. 條件訊號準備#

為了預測添加的雜訊,模型需要兩個額外輸入:圖像圖說以及取樣的時間步 $t$(表示雜訊程度)。各個條件訊號由獨立的編碼器準備(見 Figure 14)。

3. 雜訊預測#

訓練的主要目標是學習如何逆轉前向過程 — 從 $x_t$ 重建 $x_0$。直接預測 $x_0$ 效果較差;相反地,訓練模型預測雜訊 $\epsilon$ 能簡化任務並提升效能。在此步驟中,模型根據含雜訊輸入 $x_t$ 和時間步 $t$ 預測 $\epsilon$ 3

4. ML 目標與損失計算#

目標是最小化真實雜訊 $\epsilon$ 與模型預測之間的差異。損失函數為均方誤差(Mean Squared Error, MSE)

$L=E_{t, x_0, \epsilon}\left(\left|\epsilon-\epsilon_\theta\left(x_t, t\right)\right|^2\right)$

其中:

  • $t$ 是從 ${1,2, \ldots, T}$ 均勻取樣的時間步
  • $\epsilon \sim N(0, I)$ 是前向過程中使用的高斯雜訊
  • $x_t$ 是時間步 $t$ 的含雜訊資料,透過雜訊添加公式計算
  • $\epsilon_\theta\left(x_t, t\right)$ 是神經網路的預測(U-Net 或 DiT)

Figure 14: A single iteration in diffusion training

為了可讀性,本節省略了可處理均值的推導與損失簡化等數學細節。欲深入了解擴散訓練,請參閱 [18]。

取樣#

取樣(Sampling) 是指從訓練好的擴散模型生成新圖像的過程。流程從一張隨機像素圖像(從高斯分布中抽取)開始,模型逐步精煉它:

  1. 在每個步驟中,模型預測當前圖像中的雜訊
  2. 利用此預測略微調整圖像
  3. 持續精煉直到獲得清晰、細緻的圖像

Figure 15: Sampling process

基本取樣過程有兩個缺點:經常無法準確匹配文字提示詞,且因大量迭代步驟而速度緩慢。兩種常用技術可解決這些問題:

  • 無分類器引導(Classifier-Free Guidance, CFG) [19] — 在訓練時,模型同時學習有文字提示詞和無文字提示詞的圖像生成。取樣時,CFG 調整這兩種模式之間的平衡,增加有條件模式(含文字)的影響,減少無條件模式(無文字)的影響,從而產生更符合提示詞的圖像。
  • 減少擴散步數 — 如 DDIM [20] 等取樣演算法將步數從標準的 1,000 步減少至最少 20 步,大幅加速生成同時維持圖像品質。

在大多數 ML 系統設計面試中,重點在於高層概念以及各組件如何協同運作,而非繁瑣的細節。欲深入探索擴散模型,請參閱 [21][19][20]。

文字轉圖像擴散模型的挑戰#

擴散模型通常非常龐大(例如 DALL-E 2 有 35 億參數 [10]),因為它們必須學習多樣的概念、形狀與風格。這種規模在訓練和取樣階段都帶來挑戰。

訓練資源密集#

由於模型規模龐大且生成圖像的維度極高,訓練需要大量的算力與 GPU 記憶體。常見策略包括:

  • 混合精度訓練(Mixed Precision Training) — 同時使用 16 位元與 32 位元浮點數,以減少記憶體使用量並提高計算效率 [22]
  • 模型與資料平行化 — 使用 FSDP [23] 和 DeepSpeed [24] 等框架將訓練分散至多個裝置
  • 潛在擴散模型(Latent Diffusion Models) — 在較低維度的潛在空間而非像素空間中運作,大幅加速訓練與推論。第十一章將詳細介紹此方法。

圖像生成速度慢#

生成速度慢的原因有二:擴散取樣的序列特性需要多個精煉步驟,且每一步涉及數十億參數的大量計算。常見策略包括:

  • 平行取樣(Parallel Sampling) — 透過平行處理減少生成時間 [25]
  • 模型蒸餾(Model Distillation) — 蒸餾後的模型保留原模型的行為,同時更小且更快 [26]
  • 模型量化(Model Quantization) — 降低模型權重的精度,減少記憶體使用並加速生成

評估#

離線評估指標#

一致的基準測試是評估文字轉圖像模型的關鍵。DrawBench [17] 提供一組精選的提示詞,測試圖像生成的各個面向(物件組合、互動、上下文理解),難度從簡單到複雜。需要評估三個關鍵領域:

  • 圖像品質
  • 圖像多樣性
  • 圖像-文字對齊度

如前幾章所述,Inception Score(IS) [27] 和 Frechet Inception Distance(FID) [28] 是評估品質與多樣性的常用指標。本節主要聚焦於圖像-文字對齊度

圖像-文字對齊度#

圖像-文字對齊度衡量生成圖像與文字提示詞的匹配程度。常用指標為 CLIPScore [29]。

CLIP#

CLIP [8] 是 OpenAI 開發的模型,用於匹配圖像與對應描述。它由兩個編碼器組成:

  • 文字編碼器 — 將輸入文字轉換為文字嵌入向量
  • 圖像編碼器 — 將圖像轉換為圖像嵌入向量

Figure 16: CLIP encoders

訓練過程中,CLIP 學習將相關的文字與圖像嵌入向量拉近,同時將不相關的推遠,建立一個共享嵌入空間(Shared Embedding Space)

訓練完成後,相似的文字描述會映射到彼此鄰近的位置,圖像也會映射到其相關描述附近 4

Figure 17: Text and image feature vectors mapped to the CLIP embedding space

CLIPScore#

CLIPScore 衡量文字描述與圖像的 CLIP 嵌入向量之間的餘弦相似度(Cosine Similarity)。分數越高表示圖像與描述之間的對齊度越好。

人工評估#

人工評估補充自動化指標,評估圖像品質與文字對齊度:

  • 圖像品質: 人工評分者比較生成圖像與參考圖像,判斷哪張更具照片真實感。品質由生成圖像被偏好的百分比決定。
  • 文字對齊度: 評分者查看圖像與圖說,回答「此圖說是否準確描述了上方的圖像?」回答「是」、「部分是」、「否」分別記為 100、50、0 分,再分別計算生成圖像與參考圖像的平均分數。

線上評估指標#

線上指標衡量模型在正式環境中的表現:

  • 點擊率(Click-Through Rate, CTR) — 點擊生成圖像的使用者百分比;高 CTR 表示圖像有用
  • 頁面停留時間 — 較長的瀏覽時間表示較高的使用者參與度
  • 使用者回饋 — 透過問卷收集的直接回饋;正面回饋表示滿意
  • 轉換率(Conversion Rate) — 與生成圖像互動後採取目標行動(如購買、註冊)的使用者百分比
  • 延遲(Latency) — 從提示詞生成圖像所需的時間;越低越好
  • 吞吐量(Throughput) — 每秒圖像生成次數;高吞吐量確保服務可擴展
  • 資源利用率 — 使用的計算資源(CPU、GPU、記憶體);效率越高成本越低
  • 每位使用者每月平均成本 — 監控成本是否合理。不滿意的使用者可能反覆以不同種子重新生成圖像,增加開支

整體 ML 系統設計#

雖然擴散模型是核心,但其他幾個管線對效率、安全性與品質至關重要:

  • 資料管線(Data Pipeline)
  • 訓練管線(Training Pipeline)
  • 模型優化管線(Model Optimization Pipeline)
  • 推論管線(Inference Pipeline)

資料管線#

資料管線為訓練準備資料:

  • 移除不當圖像並標準化其餘圖像
  • 確保圖說存在且相關
  • 使用預訓練模型(如 Google 的 T5 [9])預先計算並快取圖說嵌入向量,減少訓練時的計算量

資料管線也收集新產生的資料(使用者提示詞、生成的圖像、使用者回饋),加入訓練集供未來使用。

Figure 18: Data pipeline

訓練管線#

訓練管線使用資料管線收集的最新資料來訓練模型,確保模型能適應近期的使用者提示詞與更高品質的生成圖像。

Figure 19: Training pipeline

評估管線#

評估管線使用預定義的自動化指標評估新訓練的模型,判斷其是否達到部署所需的效能與品質標準。

模型優化管線#

模型優化管線透過以下方式提升模型效率:

  • 模型壓縮 — 透過量化與剪枝減少模型大小與生成時間
  • 模型蒸餾 — 蒸餾為更小的模型以減少大小與生成時間
  • 優化演算法 — 以更高效的演算法取代取樣過程,加速生成

優化完成後,優化後的模型可替換現有的正式環境模型。

推論管線#

推論管線處理使用者請求並生成圖像,由多個組件組成以確保品質與安全性:

  • 提示詞自動完成
  • 提示詞安全服務
  • 提示詞增強
  • 圖像生成
  • 危害偵測
  • 超解析度服務

Figure 20: Inference pipeline

提示詞自動完成服務#

使用專門的模型,在使用者輸入時即時建議可能的下一個詞彙或片語,提升使用者體驗。

Figure 21: Suggested phrases by the auto-complete service

提示詞安全服務#

使用文字分類模型處理使用者提示詞,拒絕違反使用政策的請求(如暴力、仇恨圖像或裸露內容),確保符合安全標準。

提示詞增強#

優化使用者提示詞,改善其清晰度、連貫性與細節程度。

Figure 22: An example of prompt enhancement

此組件在進階的圖像與影片生成系統中被廣泛使用 [30],透過提供更連貫且詳細的提示詞,幫助模型產生更好的輸出。

圖像生成#

推論管線的核心。它:

  1. 透過 T5 文字編碼器將增強後的文字提示詞編碼為 token
  2. 將這些 token 傳入擴散模型,為每個提示詞生成一張或多張圖像

危害偵測#

確保生成的圖像對使用者是安全的。如果圖像在先前的安全措施後仍包含暴力或裸露內容,此組件會標記並封鎖該圖像。

超解析度服務#

提高生成圖像的解析度,以滿足視覺品質與解析度要求。

文字轉圖像系統通常至少使用一個超解析度模型,因為擴散模型一般無法直接生成高解析度圖像。取而代之的做法是:擴散模型在較低解析度下訓練,再由專門的超解析度模型進行增強。例如:基礎模型生成 64x64 圖像,第一個超解析度模型提升至 256x256,第二個再提升至 1024x1024。Google 的方法 [31] 即採用此級聯策略。

Figure 23: A cascade of super-resolution models

其他討論主題#

若面試尾聲仍有時間,可考慮討論以下主題:

  • 使用一致性模型(Consistency Models) 加速圖像生成 [26]
  • 運用 RLHF 提升品質 [32]
  • 將文字轉圖像模型擴展以支援 Inpainting 與 Outpainting [33]
  • 將模型個人化至特定概念(第十章)
  • 不同排程技術的細節 [34]
  • DDPM 與 DDIM 的細節,包括理論基礎 [20][18]
  • 使用 Patch n’ Pack [35] 等技術支援多種長寬比與解析度
  • 開發重新描述模型(Re-captioning Model) 的細節 [36][37][13]
  • 透過引導改善多樣性-保真度權衡 [19]
  • 透過 ControlNet 實現更進階的控制 [38]
  • 控制生成圖像的風格 [39]

摘要#

Image represents a mind map summarizing the key aspects of a generative AI system design interview. …