假設有一個數列 a(i), i = 1, ..., n, 代表一個有序的觀測資料,例如一個時間序列。假設這些資料有一些雜訊,或統計上常假設是隨機誤差:
a(i) = m(i) + e(i), i = 1, 2, ...
我們比較關心的是 m(i), 但它和 e(i) 糾纏在一起,我們怎樣得到 m(i)?迴歸模型 (regression model) 的方法就是假設 m(i) 是某種平滑函數,在極小化某種誤差函數如最小平方法
minimize Q(m; a) = Σ (a(i) - m(i))^2
或某種統計準則如 MLE
maximize L(m; a) = f(a; m)
在上式中資料 a 視為某種機率模型的隨機樣本資料,m 則是待估計的參數,實際上 m = m(θ) 是更少量參數的函數,例如
m = (m(1), ..., m(n)), m(t) = α + β t, θ = (α, β)
而 f 是資料 a 的聯合機率質量或密度。平滑化方法是估計 m(i) 的另一種方式,如核平滑方法,或簡單的移動平均法:
b(t) = (a(t-k) + ... + a(t+k)/(2k+1)
在時間數列分析方法,這是 2k+1 期移動平均。核平滑是一種加權的移動平均法:
b(t) = (Σ_{j=-k~k} w(j) a(t+j))/(Σ_{j=-k~k} w(j))
如果 Σ_{j=-k~k} w(j) = 1,則上式分母部分就消失了,諸 w(t) 總合成一個明確的權量函數,上式可以寫成
b(t) = Σ_s w(s) a(t+s) = Σ_u w(u-t) a(u)
如果把 w(t) 反轉,令 g(t) = w(-t), 則
b(t) = Σ_u a(u) g(t-u)
在連續型時間資料,總和式可以改用積分式
b(t) = ∫_R a(s) g(t-s) ds
不論總和式或積分式,我們說 b(t) = a★g(t) 是 a(t) 與 g(t) 的捲積 (convolution), 或譯為疊積,摺積或旋積,在泛函、工數、機率學等常見的一種運算,例如兩獨立隨機變數 X, Y 分別具機率密度 f(x), g(y),則 Z = X + Y 具機率密度 h = f★g。但捲積通常不要求如統計平滑法的權量或機率學中機率密度那樣,要求非負且總和(積分)值為 1。
數學上捲積符合交換律 f★g = g★f,結合律 f★(g★h)=(f★g)★h,分配律 f★(g+h)=(f★g)+(f★h) 及數乘結合律 a(f★g)=(af)★g=f★(ag),其中 a 為任意實數(針對這裡考慮的實函數)。如果像機率密度函數之類可積分函數,設
F(t) = ∫_(-∞,t] f(s) ds, G(t) = ∫_(-∞,t] G(s) ds
則我們還有
∫_(-∞,t] f★g(s) ds = F★g(t) = f★G(t)
如果 f, g 可微分,則有
D(f★g(t)) = (Df)★g(t) = f★(Dg)(t)
另外,∫_R f★g(t) dt = ∫_R f(t) dt ∫_R g(t) dt,更一般地,f★g 的 Laplace 或 Fourier 變換是 f 和 g 個別變換的乘積。
如果函數 f, g 只定義在 [0, ∞),即它們在 (-∞, 0) 可視為被定義為 0,則
f★g(t) = ∫_R f(s)g(t-s) ds = ∫_[0,t] f(s)g(t-s) ds
因為在 s < 0 時 f(*s) = 0,在 s > t 時 g(t-s) = 0。如果 f, g 都不是單變量函數而是 k 變量,則
f★g(t) = ∫…∫ f(s)g(t-s) ds
換言之,單變量即純量變數直接改成 k 變量即向量值變數,而積分也變成多元(多重)積分。在離散型,
f★g(t)_1,…,t_k) = Σ_{s_1} … Σ_{s_k} f(s_1,…,s_k)g(t_1-s_1,…,t_k-s_k)
例如一二向資料矩陣 [ a(ij) ],假設以 3×3 簡單平均平滑化:
b(ij) = Σ_{s=-1,0,1} Σ_{t=-1,0,1} a(i+s, j+t)/9
即用 a(ij) 之周圍資料簡單平均方式平滑;當然也可考慮給予中心點不同權重的加權平均方式。
平滑與迴歸方式不同,因或者對「理論值」m(t) 不知其明確規律,或者本意就只是單純對 a(t) 變化的修勻,若用 w(t) 當權量函數,或取 g(t) = w(-t) 當「捲積核函數」, 意謂
f★g 之函數 g 對 f 的修飾,輸入任意函數 f(t),經固定的 g(t) 做捲積式的修飾,而得輸出 f★g(t)。
假設輸入原數據 f(t) = m(t) + e(t)
f★g(t) = Σ_s f(s)g(t-s) = m★g(t) + e★g(t), 或
f★g(t) = ∫_R f(s)g(t-s) ds = m★g(t) + e★g(t).
誤差或雜訊 e(t) 被 g(t) 平均掉,但捲積或平滑運算並不能重現 m(t),而是 m(t) 的一個平滑版本。不過,如果 m(t) 呈直線趨勢,而捲積核函數 g(t) 是對稱(於 0)的權量函數,則
m★g(t) = ∫_R (α + β s)g(t-s) ds = m(t)
核平滑、移動平均等方法在統計上的應用,都是假設 m(t) 局部近似直線性,並且採用的基本是對稱的核函數或權函數,正是基於上列理由。
拋開「平滑化」的想法,g(t) 可以是一般函數,則捲積 f★g(t) 提供關於 f(t) 特殊的資訊,例如
設 g(t) = t/2 當 t = -1, 0, 1,則 f★g(t) = (f(t+1) - f(t-1))/2
設 g(t) =2 - |t| 當 t = -1, 0, 1,則 f★g(t) = (f(t+1) - f(t)) - (f(t) - f(t-1))
前者是數列 f(t) 的中心差分,後者是 f(t) 的二階差分。這種捲積在提取 f(t) 的某些特性,前者提取局部增量,相當於函數微分的數值版或離散版;後者在看 f(t) 的二階變化。另外,如果 f(t) 代表出生過程,也就是說代表某地區在片刻時間段 [t, t+dt] 出生數約 f(t) dt;又設 g(t) 代表殘存函數,即出生 t 時間後才死亡機率,則
f★g(t) = ∫_(-∞,t] f(s)g(t-s) ds
代表 t 時點生存數;如果 f(t) 代表某物品生產量,g(t) 是該物存活函數,則 f★g(t) 代表該物長期存在量;而如果該物生產有時間起點,則
f★g(t) = ∫_[0,t] f(s)g(t-s) ds
是生產 t 時間後的存在量。
以上捲積的三種意義:平滑方法、特性擷取和存量計算,是捲積常見的應用,在這些應用中,f(t) 和 g(t) 是不對等的,特別是 g(t), 在三種應用中分別代表權量、設計和殘餘函數,也可視為原始輸入資料 f(t) 的一個過濾器 (filter)。另外,在獨立隨機變數和的分布上,捲積的兩個運算元有同等地位,都是個別隨機變數的機率密度,而前面提及捲積的代數怔質如交換律結合律等,也很理所當然。捲積可能還有其他應用,就不贅言了。接下來我們把焦點放在資料特徵的擷取。
對輸入函數或資料 f(t) 做特徵擷取,最令人熟悉的該是傅立葉變換 (Fourier transform) 或 Laplace 變換‵(這兩變換其實史學上可以看成是相同的,不過因為形式的問題,有不同的解釋。在機率上前者對應特性函數 ch.f.,後者對應動差母函數 m.g.f.),晚近的小波變換 (wavelet transform) 都是擷取函數或數列 f(t) 的方法。
捲積神經網路 (onvolutional neural network, CNN) 是利用捲積做神經網路輸入端處理的神經網路,在圖像辨識上是常用的方法。CNN 基本上是由一個或多個卷積層和頂端的全連通層(經典的神經網路)組成。卷積層是將原始圖像資料經過捲積運算擷取特徵數據,而後送入全連通層做分類辨識。細分的話,捲積層事實上又分成幾層,或說其要做的事分成幾個步驟:捲積、池化、扁平化。
首先是使用適當的捲積核函數擷取圖像特徵數據。數位化圖像資料是由像素所構成的,在黑白圖像,可以用 1/0 表示一個像素,這是非黑即白的圖像,適用於如字形辨認;真實的黑白圖像常是由不同灰階像素構成一個圖,所以每個像素可能是 0-255 的數值代表灰階;RGB 彩色圖像每一像素則是分成三層,分別是 R, G, B,以 0-255 代表色澤深淺,所以每個像素等於一個三維向量。假設有一圖像是 m×n 像素,以 3×3 捲積核做特徵擷取,在不填補 0 的情況每項特徵得一個 (m-2)×(n-2)×3 陣列,實務上可能將 RGB 三層特徵做疊加和偏置,並使用線性整流 (Rectified Linear Units, ReLU) f(x)=max{0,x} 去除負值。在例如字形辨認的應用,圖像的像素可能較少,並且筆畫出現在邊緣,使得某些特徵的擷取產生問題,此時可先將原始圖像擴充並填補 0 成為 (m+2)×(n+2),則用 3×3 捲積核擷取特徵時得到的仍是 m×n 像素資料。
池化是一種非線性形式的降採樣,其中「最大池化(Max pooling)」是最為常見的。具體的操作就是妁捲積運算結果矩陣分割成等大小的小子矩陣,例如 m×n 矩陣分割成 (m/2)×(n/2) 個 2×2 子矩陣,而後以每一個小矩陣之最大元素構建成新的 (m/2)×(n/2) 矩陣。池化層也可以使用其他池化函式如平均池化,但因最大池化被認為表現良好,現在已少用平均池化而偏向使用最大池化。
對於較大型、較複雜圖像辨認,上列捲積、整流及池化程序可能會重複一次以上,因此前面說 CNN 的捲積層是一個或多個。在完成這些操作後,接下來是扁平化,也就是把每個特徵矩陣改為向量;並且所有特徵的數據形成一個大型向量。如果擷取 p 個特徵,每個特徵本來是 m'×n' 矩陣,扁平化就是把 p 個 m'×n' 矩陣當作一個 m'n'p 維度的向量,成為全連通層 (ANN) 的輸入資料。