Regression

Regression

「迴歸」就是找一個函數,盡量符合手邊的一堆函數點。此函數稱作「迴歸函數」。

當函數點不精確,則不適合內插,適合迴歸。

方便起見,以下用座標表示函數點。

Error(Loss)

強硬地用函數符合函數點,就會有「誤差」。

單一函數點的誤差,有許多種衡量方式,一般是用函數點與函數的差的平方(平方誤差),其他還有函數點與函數的差的絕對值(絕對值誤差)。

Optimization

人腦考慮的「最符合」,放到了電腦就被設定成「誤差總和最小」。把誤差總和寫成一個函數,迴歸問題就變成了最佳化問題!

運用最佳化演算法,求得誤差最小值,求得迴歸函數的係數。

迴歸函數
f(x) = ax² + bx + c
N個函數點
(x₀,y₀) ... (xɴ₋₁,yɴ₋₁)
每個函數點的平方誤差
(y₀ - f(x₀))² ... (yɴ₋₁ - f(xɴ₋₁))²
所有函數點的平方誤差總和
e(a,b,c) = (y₀ - f(x₀))² + ... + (yɴ₋₁ - f(xɴ₋₁))²
         = ∑ (yᵢ - f(xᵢ))²
         = ∑ (yᵢ - ŷᵢ)²
         = ∑ ‖yᵢ - ŷᵢ‖²
令誤差總和最小
 min e(a,b,c)
a,b,c
選定一個最佳化演算法,求出e(a,b,c)的最小值,求出此時a b c的數值,
就得到迴歸函數f(x)。
迴歸函數
f(x) = ax² + bx + c
N個函數點
(2,3) ... (7,8)
每個函數點的平方誤差
  (3 - f(2))² ... (8 - f(7))²
= (3 - (a⋅2² + b⋅2 + c))² ... (8 - (a⋅7² + b⋅7 + c))²
所有函數點的誤差總和
  (3 - f(2))² + ... + (8 - f(7))²
= (3 - (a⋅2² + b⋅2 + c))² + ... + (8 - (a⋅7² + b⋅7 + c))²

Squared Error / Absolute Error

平方誤差後盾雄厚,絕對值誤差樸實無華。大家採用平方誤差。

因為平方誤差非常實用,所以許多人將「採用平方誤差、令誤差總和最小」直接稱作「最小平方法Least Squares Method」。

一、平方誤差通常有唯一解。絕對值誤差通常有無限多解。

絕對值誤差當中,當迴歸函數上下函數點不一樣多,那麼迴歸函數將朝向函數點較少的一側移動,降低絕對值誤差。當迴歸函數上下函數點一樣多,那麼迴歸函數可以上下移動,絕對值誤差保持相同。

絕對值誤差當中,答案總是均分函數點,答案可能不唯一。這種符合方式太過樸素、缺乏內涵。答案其實就是中位數。

二、平方誤差支援微積分,容易推導數學公式。

微積分經典定理:「極值位於一次微分等於零的地方」。藉由一次微分,得以判別誤差函數最小值,甚至得以推導公式。

平方誤差函數,處處皆可一次微分。絕對值誤差函數,至少有一處無法一次微分,只能改用次微分,事情變得相當複雜。

三、平方誤差支援線性代數,擁有強悍數學性質。

線性代數經典定理:「平方誤差盡量小=垂直投影」。藉由垂直投影,得以推導公式,讓這種符合方式擁有了具體形象。

當誤差函數既是平方誤差函數、又是線性函數,那麼可以使用線性代數。絕對值誤差函數則無法使用線性代數。

Polynomial Regression

Linear Regression

「一次迴歸」。迴歸函數採用一次函數。誤差採用平方誤差。

一個變數,迴歸函數是直線。兩個變數,迴歸函數是平面。

一次迴歸性質特殊,不需要最佳化演算法。寫成一次方程組,套用「Normal Equation」,求得迴歸函數的係數。

迴歸函數 f(x) = ax + b
函數點 (2,3) (5,6) (7,8)
⎡ 2  1 ⎤ ⎡ a ⎤   ⎡ 3 ⎤
⎢ 5  1 ⎥ ⎣ b ⎦ = ⎢ 6 ⎥
⎣ 7  1 ⎦         ⎣ 8 ⎦

迴歸函數 f(x,y) = ax + by + c  
函數點 (2,3,4) (5,6,7) (7,8,9) (3,3,3) (4,4,4)
⎡ 2  3  1 ⎤         ⎡ 4 ⎤
⎢ 5  6  1 ⎥ ⎡ a ⎤   ⎢ 7 ⎥
⎢ 7  8  1 ⎥ ⎢ b ⎥ = ⎢ 9 ⎥
⎢ 3  3  1 ⎥ ⎣ c ⎦   ⎢ 3 ⎥
⎣ 4  4  1 ⎦         ⎣ 4 ⎦

一次迴歸可以寫成最佳化形式。

迴歸函數 f(x) = ax + b
函數點 (2,3) (5,6) (7,8)
所有函數點的誤差總和 ‖Ax - y‖²
一次迴歸化作最佳化問題 min ‖Ax - y‖²

    ⎡ 2  1 ⎤       ⎡ a ⎤       ⎡ 3 ⎤
A = ⎢ 5  1 ⎥   x = ⎣ b ⎦   b = ⎢ 6 ⎥
    ⎣ 7  1 ⎦                   ⎣ 8 ⎦

一次迴歸有公式解。

一次迴歸可以找到輸入與輸出的大致關係:成正比、成反比。首項係數a的正負,代表正反比。

Polynomial Regression

「多項式迴歸」。迴歸函數採用多項式函數。誤差採用平方誤差。

演算法仍是Normal Equation。

迴歸函數 f(x) = ax + b
函數點 (2,3) (5,6) (7,8)
⎡ 2  1 ⎤ ⎡ a ⎤   ⎡ 3 ⎤
⎢ 5  1 ⎥ ⎣ b ⎦ = ⎢ 6 ⎥
⎣ 7  1 ⎦         ⎣ 8 ⎦

迴歸函數 f(x) = ax² + bx + c
函數點 (2,3) (5,6) (7,8)
⎡  4  2  1 ⎤ ⎡ a ⎤   ⎡ 3 ⎤
⎢ 25  5  1 ⎥ ⎢ b ⎥ = ⎢ 6 ⎥
⎣ 49  7  1 ⎦ ⎣ c ⎦   ⎣ 8 ⎦

迴歸函數 f(x,y) = ax² + bxy + cy² + dx + ey + f
函數點 (2,3,4) (5,6,7) (7,8,9)
                         ⎡ a ⎤
⎡ 2²  2×3  3²  2  3  1 ⎤ ⎢ b ⎥   ⎡ 4 ⎤
⎢ 5²  5×6  6²  5  6  1 ⎥ ⎢ c ⎥ = ⎢ 7 ⎥
⎣ 7²  7×8  8²  7  8  1 ⎦ ⎢ d ⎥   ⎣ 9 ⎦
                         ⎢ e ⎥
                         ⎣ f ⎦

Underfitting / Overfitting

用單純的函數去符合複雜的函數點,顯然符合的不太完美。

用複雜的函數去符合單純的函數點,顯然事情被搞複雜了。

如果我們不清楚函數點的性質,也就無法抉擇函數了。那麼,該如何了解函數點的性質呢?這是心靈科學,就此打住。

Moving Regression

Moving Regression

「移動迴歸」。鄰近函數點的加權平均數,進行迴歸。

Isotonic Regression

Isotonic Regression

「保序迴歸」。迴歸函數採用遞增函數。

採用絕對值誤差,時間複雜度O(NlogN)。

採用平方誤差,時間複雜度O(N)。

迴歸函數的前後項差距在一定範圍內

Deep Learning

Deep Learning

「深度學習」。迴歸函數是各種函數串聯並聯。

Deep Learning是新興理論,尚在發展當中,無法整理成篇。我將發展現況分成兩種方向,僅供參考。

邏輯推理觀點

我認為深度學習可以做到邏輯推理的歸納法。

邏輯推論logical inference宛如求解equation solving。根據一些邏輯運算式子的計算結果,判斷一個邏輯運算式子是否有唯一解。

邏輯推理logical reasoning宛如迴歸regression。根據一些邏輯運算式子的計算結果,調整一個邏輯運算式子,盡量達成唯一解。

機率分布即是二元邏輯的推廣版本。convolution即是加法運算。ReLU即是分支判斷。各種函數即是各種邏輯運算。

事先網羅足夠多的函數,事後練出足夠長的邏輯運算式子。

模組編程觀點

我認為深度學習就是在寫程式。

專案即是迴歸模型。編程即是拼湊函數,除錯即是降低誤差。運算子即是初階函數,函式庫即是進階函數。物件導向精簡函數架構,演算法形成函數單元。自行拼湊適當函數,考慮越多,效果越好。

以前是撰寫程式碼,經過編譯器,自動生成機器碼。現在是拼湊函數,經過Deep Learning,自動生成程式碼。封建升城堡。

與其說Deep Learning可以取代程式設計師,不如說Deep Learning是一種更高層次的編程方式。大家只是換個方式寫程式。