bcjohn's blog
Jacobian 矩陣 (2) - 在 EWA Volume Splatting 中的應用
發布於: 2026-08-08 更新於: 2026-08-08 分類於: Math
此為 Jacobian 矩陣 系列文章 - 第 2 篇:
  1. Jacobian 矩陣 (1) - 定義
  2. Jacobian 矩陣 (2) - 在 EWA Volume Splatting 中的應用

前言

前一篇文章中,我們詳細介紹了 Jacobian 矩陣 的數學定義與幾何意義。我們了解到,Jacobian 矩陣本質上就是多變數向量函數的「一階導數」,它代表了一個複雜的非線性變換在空間中某一點附近的局部線性近似

今天我們來學習 Jacobian 矩陣在 3D 電腦圖學領域中發揮的關鍵作用,探討一篇極具影響力的經典論文 — EWA Volume Splatting (Zwicker et al., 2001) 是如何巧妙地利用 Jacobian 矩陣與 Gaussian 的數學特性,讓 Volume Rendering (體積渲染) 這件原本只能靠緩慢的 Ray Marching (光線步進) 完成的任務大幅加速,甚至奠定了近年爆紅的 3D Gaussian Splatting 即時渲染技術的數學基礎

背景:三維渲染的挑戰 Ray Marching vs. Splatting

要理解 EWA Volume Splatting 的偉大之處,我們得先看看傳統是怎麼渲染三維體積資料(例如:醫療 CT 掃描、雲霧、或是點雲)的

Ray Marching (光線步進):緩慢的傳統演算法

傳統體積渲染最常用的方法是 Ray Marching (光線步進)。它的作法是從虛擬相機的視角出發,對螢幕上的「每一個像素」射出一條光線穿過 3D 場景。光線在穿過體積資料的過程中,必須沿途不斷地「步進」取樣,計算每一小步的顏色與透明度,最後將整條光線上所有取樣點的結果積分起來,才能決定該像素的最終顏色。這也造就了它的效能瓶頸:只要場景稍微複雜、解析度稍微高一點,就得射出數百萬條光線,每條光線又要取樣成百上千次,計算量極為龐大;再加上取樣時需要不斷在 3D 空間中插值查詢資料,記憶體存取非常缺乏效率,在早期的硬體上根本不可能做到即時渲染

Splatting (拋濺法):擁抱 GPU 的演算法

為了解決這個效能問題,電腦圖學家們提出了 Splatting (拋濺法)。這是一種思路完全反過來的演算法:
與其從螢幕射出光線去尋找 3D 資料,不如我們直接拿著 3D 資料,把它們像「砸雪球」一樣,一顆一顆直接「砸 (Splat)」到 2D 螢幕上!

在 Splatting 中:

  1. 空間中的資料被表示為一顆一顆重疊的 3D 球體 (通常是 3D 高斯橢球)
  2. 渲染的過程,就是將這每一顆 3D 橢球,經過相機投影,變成 2D 螢幕上的一個 2D 橢圓
  3. 最後只要把這些 2D 橢圓整個疊加起來,就完成了一張畫面

這套流程之所以有潛力,是因為它完全打中了現代硬體的強項 — 把 3D 座標投影到 2D、再於螢幕上繪製 2D 圖形,正是 GPU Rasterizer (光柵化硬體) 最擅長的事情。數以萬計的 2D 繪製指令可以同時被平行處理,這讓 Splatting 天生就具備大幅加速的本錢

不過,要把這個想法真正付諸實行,還得先跨過一道非常棘手的數學難題

閱讀更多
Jacobian 矩陣 (1) - 定義
發布於: 2026-08-08 更新於: 2026-08-08 分類於: Math
此為 Jacobian 矩陣 系列文章 - 第 1 篇:
  1. Jacobian 矩陣 (1) - 定義
  2. Jacobian 矩陣 (2) - 在 EWA Volume Splatting 中的應用

前言

在微積分中,函數的變化率稱為「導數」

  • 單變數函數 $f(x)$ 的導數,是一個數字
  • 多變數函數 $f(x, y)$ 的導數,是一個向量(梯度)

那如果函數同時有多個輸入與多個輸出呢?這時,我們將所有的偏導數排列在一起,就會形成一個矩陣,這就是 Jacobian 矩陣 (雅可比矩陣),簡單來說 Jacobian 矩陣就是「多變數向量函數的導數」,它能幫助我們掌握複雜函數在多維空間中的變化率

閱讀更多
高斯分布 (4) - 邊緣化
發布於: 2026-08-07 更新於: 2026-08-07 分類於: Math
此為 高斯分布 系列文章 - 第 4 篇:
  1. 高斯分布 (1) - 從共變異數矩陣出發
  2. 高斯分布 (2) - 一維到多維的分布形式
  3. 高斯分布 (3) - 仿射變換後的性質變化
  4. 高斯分布 (4) - 邊緣化

前言

前一篇文章我們討論的是「把整個高斯分佈做仿射變換 $\mathbf{Y} = A\mathbf{X} + \mathbf{b}$」會發生什麼事,結論是分佈仍然是高斯,且 $\mathbf{Y} \sim \mathcal{N}(A\boldsymbol{\mu} + \mathbf{b}, A\Sigma A^T)$。那時我們用 二維高斯分布的仿射變換 當作例子,體會了一個二維高斯分佈經過旋轉、平移之後,變成另一個二維高斯分佈的過程,但事實上高斯分佈不只能做到同維度的變換,甚至也能進行降維的變換,這個操作有個專有名稱叫做 邊緣化 (Marginalization)

邊緣化(Marginalization)

定義:先把維度切成兩塊

邊緣化做的事就是 降維:把高斯分布的某些維度丟掉,只留下剩餘維度的分布。為了清楚描述「哪些維度要留、哪些要丟」,我們先把隨機向量 $\mathbf{X}$ 拆成兩個部分:要保留的 $\mathbf{x}_a$($p$ 維)與要丟掉的 $\mathbf{x}_b$($q$ 維)

$$ \mathbf{X} = \begin{bmatrix} \mathbf{x}_a \\ \mathbf{x}_b \end{bmatrix}, \quad \boldsymbol{\mu} = \begin{bmatrix} \boldsymbol{\mu}_a \\ \boldsymbol{\mu}_b \end{bmatrix}, \quad \Sigma = \begin{bmatrix} \Sigma_{aa} & \Sigma_{ab} \\ \Sigma_{ba} & \Sigma_{bb} \end{bmatrix} $$

其中:

  • $\Sigma_{aa}$($p \times p$):$\mathbf{x}_a$ 自己內部的共變異數
  • $\Sigma_{bb}$($q \times q$):$\mathbf{x}_b$ 自己內部的共變異數
  • $\Sigma_{ab} = \Sigma_{ba}^T$($p \times q$):兩塊之間的耦合項,描述 $\mathbf{x}_a$ 與 $\mathbf{x}_b$ 的相關性

接下來的邊緣化,關鍵就在於我們怎麼處理要丟掉的 $\mathbf{x}_b$ 以及這個耦合項 $\Sigma_{ab}$

閱讀更多
高斯分布 (3) - 仿射變換後的性質變化
發布於: 2026-03-18 更新於: 2026-08-07 分類於: Math
此為 高斯分布 系列文章 - 第 3 篇:
  1. 高斯分布 (1) - 從共變異數矩陣出發
  2. 高斯分布 (2) - 一維到多維的分布形式
  3. 高斯分布 (3) - 仿射變換後的性質變化
  4. 高斯分布 (4) - 邊緣化

前言

在上一篇文章中,我們認識了多維高斯分佈的數學表示方式,知道 均值向量 $\boldsymbol{\mu}$ 決定了分佈的中心,而 共變異數矩陣 $\Sigma$ 決定了資料的分散形狀與方向,這篇文章我們將進一步探討:當高斯分佈經過 矩陣變換(仿射變換) 後,會產生什麼樣的變化?

線性變換與仿射變換

首先我們先簡單介紹一下什麼是線性變換與仿射變換:

線性變換(Linear Transformation)

線性變換 可寫成:

$$
\mathbf{Y} = A\mathbf{X}
$$

其中 $A$ 是矩陣。線性變換的幾何特性是原點保持不變($\mathbf{X}=\mathbf{0}$ 時,$\mathbf{Y}=\mathbf{0}$)

仿射變換(Affine Transformation)

仿射變換 可寫成:

$$
\mathbf{Y} = A\mathbf{X} + \mathbf{b}
$$

其中 $\mathbf{b}$ 是平移向量。仿射變換可視為「先線性變換,再平移」

結論:所以兩者的差別只是仿射變換多一個平移的向量

閱讀更多
高斯分布 (2) - 一維到多維的分布形式
發布於: 2026-03-18 更新於: 2026-08-07 分類於: Math
此為 高斯分布 系列文章 - 第 2 篇:
  1. 高斯分布 (1) - 從共變異數矩陣出發
  2. 高斯分布 (2) - 一維到多維的分布形式
  3. 高斯分布 (3) - 仿射變換後的性質變化
  4. 高斯分布 (4) - 邊緣化

前言

上一篇文章中學習了高斯分布的基礎數學 - 共變異數矩陣,這篇文章則是從一維高斯分布出發,逐漸了解到三維甚至多維高斯分布的數學形式,而在這之中我們也可以看到 共變異數矩陣 在高斯分布中的重要性

介紹

高斯分布(Gaussian Distribution),也稱為常態分布(Normal Distribution),是我們在生活中和統計學裡最常遇見的機率分布

我們常常聽到的經驗法則:「大約有 68% 的數據(例如身高、考試成績),會落在平均值正負 1 個標準差以內」,這裡所指的「鐘型曲線」規律,其實就是高斯分布的特性

為什麼它這麼重要?因為自然界中絕大多數的現象,最終都會不約而同地呈現出這種形狀。加上它在數學計算上非常直觀又方便,這使得它成為機器學習和建立各種數據模型時最常用的基礎

一維高斯分布

基本表示

若隨機變數 $X$ 服從均值為 $\mu$、變異數為 $\sigma^2$ 的一維高斯分布,可記為:

$$X \sim \mathcal{N}(\mu, \sigma^2)$$

機率密度表示

機率密度函數(PDF) 為:

$$f(x) = \frac{1}{\sigma\sqrt{2\pi}} \exp\left(-\frac{(x-\mu)^2}{2\sigma^2}\right)$$

其中:

  • $\mu$ 是 均值(mean)
  • $\sigma^2$ 是 變異數(variance)
  • $\sigma$ 是 標準差(standard deviation)
閱讀更多
高斯分布 (1) - 從共變異數矩陣出發
發布於: 2026-03-18 更新於: 2026-08-07 分類於: Math
此為 高斯分布 系列文章 - 第 1 篇:
  1. 高斯分布 (1) - 從共變異數矩陣出發
  2. 高斯分布 (2) - 一維到多維的分布形式
  3. 高斯分布 (3) - 仿射變換後的性質變化
  4. 高斯分布 (4) - 邊緣化

這一系列文章的目的是研究高斯分布相關的數學性質,在 高斯分布 (2) - 一維到多維的分布形式 文章中會學習到高斯分布的多維形式,基本上就是由平均值共變異數矩陣所決定的,因此在正式介紹高斯分布數學式之前,我們需要先了解什麼是共變異數矩陣

前言

我們在看資料時,常常不只想知道「一個東西變化大不大」,還會好奇「兩個東西是不是一起變」。例如:天氣變熱時,飲料銷量會不會跟著上升? 讀書時間增加,成績會不會也變好? 這些「一起變」的現象,就是 共變異數 (Covariance) 想描述的內容

最基本的概念是 變異數 (Variance),它告訴我們某個數據本身的波動有多大;但只看單一變數就像只看一個角色,很難了解整個故事。當我們把兩個變數放在一起,就可以用共變異數判斷它們是同方向動(一起變大或變小)、還是相互拉扯(一个變大、一个變小),或是根本沒什麼關聯

而當資料裡的變數不只兩個,而是三個、十個、甚至上百個時,我們就需要把所有變數之間的「一起變動關係」整理成一張表,那就是 共變異數矩陣 (Covariance Matrix)。這張矩陣像是一個地圖,描繪出每個變數之間的連動方式,幫助我們看出資料的真正結構

閱讀更多
武漢天門尋根之旅
發布於: 2026-03-15 更新於: 2026-03-15 分類於: Life

  以前爺爺就常跟我說想要回去故鄉老家看看,記得他說小時候過著有一餐沒一餐的生活,從小就要在燒餅店之類的地方幫忙賣東西賺錢,每當爺爺說到這件事的時候,我就會建議他可以回去看看,但他總是說回去大陸的話軍人的退休金就會被政府收回去,之後只能都喝西北風了。或許是很久之前的法律規定吧,我想現在這時代不可能只是因為回去大陸旅遊就把退休金沒收,即便如此爺爺年紀也大了,他認為的事情是無法說服他的,而且隨著爺爺失智症後面變的更加嚴重,跟他講過的事情他大概十秒後又會再問一次同樣的問題,這樣的狀況也不可能帶爺爺回去。

  在爺爺去年中風躺在病床時,就有在他旁邊跟他說之後打算代他回老家看看了,爺爺總是說八、九十年過去了,從小照顧他的叔公等這些認識的人八成也都早已不在了,而他父親也在他小的時候就跑得不知所向,即使回去也不可能有認識的人了。

  趁著過年前的空檔,出發的兩週前才突發奇想的去辦台胞證,還好很快的一週後就拿到了,接著上網訂購中國東方航空的機票剛好只剩一個空位,出發!

閱讀更多
go-linebot 開發心得
發布於: 2026-01-28 更新於: 2026-01-30 分類於: Life

故事

最近花了半個月的時間開發了 go-linebot,是一款能夠在 line 上面進行圍棋對弈,以及串接 KataGo 進行 AI 對弈和 AI 覆盤的服務

閱讀更多
奇異值分解 SVD (2) - 實際應用
發布於: 2025-12-07 更新於: 2025-12-26 分類於: 線性代數
此為 奇異值分解 SVD 系列文章 - 第 2 篇:
  1. 奇異值分解 SVD (1) - 定義與性質
  2. 奇異值分解 SVD (2) - 實際應用

前言

在上一篇文章中,我們詳細介紹了奇異值分解 (SVD) 的定義、性質和計算方法

本文將介紹 SVD 的兩個實際應用:

  1. 圖像壓縮:利用 SVD 的低秩近似特性,大幅減少圖像存儲空間
  2. 極分解:從 SVD 推導極分解,理解線性變換的幾何意義
閱讀更多
奇異值分解 SVD (1) - 定義與性質
發布於: 2025-12-07 更新於: 2025-12-07 分類於: 線性代數
此為 奇異值分解 SVD 系列文章 - 第 1 篇:
  1. 奇異值分解 SVD (1) - 定義與性質
  2. 奇異值分解 SVD (2) - 實際應用

前言

在前面的文章中,我們學習了多種矩陣分解方法,如 特徵值分解矩陣對角化對稱矩陣的譜分解正定矩陣的 Cholesky 分解 等。然而,這些分解方法都有一個共同的限制:只能作用在方陣上。對於非方陣(如 $m \times n$ 矩陣,其中 $m \neq n$),這些方法都無法直接應用

相較之下,奇異值分解 (Singular Value Decomposition, SVD) 適用於 任意矩陣(包括非方陣),這使得它成為線性代數中最普遍、最實用的分解方法。無論是瘦高矩陣($m > n$)、矮胖矩陣($m < n$),還是方陣($m = n$),SVD 都能提供一個優雅的分解形式

下面我們來學習 SVD 的定義、性質、計算方法以及其代表的幾何意義

定義

對於任意 $m \times n$ 矩陣 $A$,存在分解:

$$A = Q_1\Sigma Q_2^T$$

其中:

  • $Q_1$:$m \times m$ 正交矩陣
  • $\Sigma$:$m \times n$ 對角矩陣(對角線元素稱為奇異值
  • $Q_2$:$n \times n$ 正交矩陣
閱讀更多